Merge pull request #1924 from weaveworks/update-mesh

Update mesh
This commit is contained in:
Matthias Radestock committed 2016-01-28 10:04:40 +00:00
commit cab4e37ef8
6 files changed
+23 -39

No files matched your search

+1 -2
View File
@@ -49,7 +49,7 @@ func (m *mockGossipComms) String() string {
// that the contents of messages are never re-ordered. Which, for instance,
// requires they are not based off iterating through a map.
func (m *mockGossipComms) GossipBroadcast(update mesh.GossipData) error {
func (m *mockGossipComms) GossipBroadcast(update mesh.GossipData) {
m.Lock()
defer m.Unlock()
buf := []byte{}
@@ -63,7 +63,6 @@ func (m *mockGossipComms) GossipBroadcast(update mesh.GossipData) error {
// Swallow this message
m.messages = m.messages[1:]
}
return nil
}
func equalByteBuffer(a, b []byte) bool {
+3 -11
View File
@@ -40,16 +40,11 @@ func (n *Nameserver) HandleHTTP(router *mux.Router, dockerCli *docker.Client) {
return
}
if err := n.AddEntry(hostname, container, n.ourName, ip); err != nil {
n.badRequest(w, fmt.Errorf("Unable to add entry: %v", err))
return
}
n.AddEntry(hostname, container, n.ourName, ip)
if r.FormValue("check-alive") == "true" && dockerCli != nil && dockerCli.IsContainerNotRunning(container) {
n.infof("container '%s' is not running: removing", container)
if err := n.Delete(hostname, container, ipStr, ip); err != nil {
n.infof("failed to remove: %v", err)
}
n.Delete(hostname, container, ipStr, ip)
}
w.WriteHeader(204)
@@ -79,10 +74,7 @@ func (n *Nameserver) HandleHTTP(router *mux.Router, dockerCli *docker.Client) {
ipStr = "*"
}
if err := n.Delete(hostname, container, ipStr, ip); err != nil {
n.badRequest(w, fmt.Errorf("Unable to delete entries: %v", err))
return
}
n.Delete(hostname, container, ipStr, ip)
w.WriteHeader(204)
}
router.Methods("DELETE").Path("/name/{container}/{ip}").HandlerFunc(deleteHandler)
+8 -10
View File
@@ -73,22 +73,22 @@ func (n *Nameserver) Stop() {
n.quit <- struct{}{}
}
func (n *Nameserver) broadcastEntries(es ...Entry) error {
func (n *Nameserver) broadcastEntries(es ...Entry) {
if n.gossip == nil || len(es) == 0 {
return nil
return
}
return n.gossip.GossipBroadcast(&GossipData{
n.gossip.GossipBroadcast(&GossipData{
Entries: Entries(es),
Timestamp: now(),
})
}
func (n *Nameserver) AddEntry(hostname, containerid string, origin mesh.PeerName, addr address.Address) error {
func (n *Nameserver) AddEntry(hostname, containerid string, origin mesh.PeerName, addr address.Address) {
n.infof("adding entry %s -> %s", hostname, addr.String())
n.Lock()
entry := n.entries.add(hostname, containerid, origin, addr)
n.Unlock()
return n.broadcastEntries(entry)
n.broadcastEntries(entry)
}
func (n *Nameserver) Lookup(hostname string) []address.Address {
@@ -134,9 +134,7 @@ func (n *Nameserver) ContainerDied(ident string) {
return false
})
n.Unlock()
if err := n.broadcastEntries(entries...); err != nil {
n.errorf("failed to broadcast container %s death: %v", ident, err)
}
n.broadcastEntries(entries...)
}
func (n *Nameserver) PeerGone(peer mesh.PeerName) {
@@ -148,7 +146,7 @@ func (n *Nameserver) PeerGone(peer mesh.PeerName) {
})
}
func (n *Nameserver) Delete(hostname, containerid, ipStr string, ip address.Address) error {
func (n *Nameserver) Delete(hostname, containerid, ipStr string, ip address.Address) {
n.Lock()
n.infof("tombstoning hostname=%s, container=%s, ip=%s", hostname, containerid, ipStr)
entries := n.entries.tombstone(n.ourName, func(e *Entry) bool {
@@ -168,7 +166,7 @@ func (n *Nameserver) Delete(hostname, containerid, ipStr string, ip address.Addr
return true
})
n.Unlock()
return n.broadcastEntries(entries...)
n.broadcastEntries(entries...)
}
func (n *Nameserver) deleteTombstones() {
+7 -11
View File
@@ -117,7 +117,7 @@ func TestNameservers(t *testing.T) {
mapping := mapping{hostname, []pair{{nameserver.ourName, addr}}}
mappings = append(mappings, mapping)
require.Nil(t, nameserver.AddEntry(hostname, "", nameserver.ourName, addr))
nameserver.AddEntry(hostname, "", nameserver.ourName, addr)
check(nameserver, mapping)
}
@@ -132,7 +132,7 @@ func TestNameservers(t *testing.T) {
mapping.addrs = append(mapping.addrs, pair{nameserver.ourName, addr})
mappings[i] = mapping
require.Nil(t, nameserver.AddEntry(mapping.hostname, "", nameserver.ourName, addr))
nameserver.AddEntry(mapping.hostname, "", nameserver.ourName, addr)
check(nameserver, mapping)
}
@@ -157,7 +157,7 @@ func TestNameservers(t *testing.T) {
mappings[i] = mapping
nameserver := nameserversByName[pair.origin]
require.Nil(t, nameserver.Delete(mapping.hostname, "*", pair.addr.String(), pair.addr))
nameserver.Delete(mapping.hostname, "*", pair.addr.String(), pair.addr)
check(nameserver, mapping)
}
@@ -223,15 +223,13 @@ func TestContainerAndPeerDeath(t *testing.T) {
require.Nil(t, err)
nameserver := makeNameserver(peername)
err = nameserver.AddEntry("hostname", "containerid", peername, address.Address(0))
require.Nil(t, err)
nameserver.AddEntry("hostname", "containerid", peername, address.Address(0))
require.Equal(t, []address.Address{0}, nameserver.Lookup("hostname"))
nameserver.ContainerDied("containerid")
require.Equal(t, []address.Address{}, nameserver.Lookup("hostname"))
err = nameserver.AddEntry("hostname", "containerid", peername, address.Address(0))
require.Nil(t, err)
nameserver.AddEntry("hostname", "containerid", peername, address.Address(0))
require.Equal(t, []address.Address{0}, nameserver.Lookup("hostname"))
nameserver.PeerGone(peername)
@@ -247,15 +245,13 @@ func TestTombstoneDeletion(t *testing.T) {
require.Nil(t, err)
nameserver := makeNameserver(peername)
err = nameserver.AddEntry("hostname", "containerid", peername, address.Address(0))
require.Nil(t, err)
nameserver.AddEntry("hostname", "containerid", peername, address.Address(0))
require.Equal(t, []address.Address{0}, nameserver.Lookup("hostname"))
nameserver.deleteTombstones()
require.Equal(t, []address.Address{0}, nameserver.Lookup("hostname"))
err = nameserver.Delete("hostname", "containerid", "", address.Address(0))
require.Nil(t, err)
nameserver.Delete("hostname", "containerid", "", address.Address(0))
require.Equal(t, []address.Address{}, nameserver.Lookup("hostname"))
require.Equal(t, l(Entries{Entry{
ContainerID: "containerid",
+3 -4
View File
@@ -46,7 +46,7 @@ func (grouter *TestRouter) Stop() {
}
}
func (grouter *TestRouter) gossipBroadcast(sender mesh.PeerName, update mesh.GossipData) error {
func (grouter *TestRouter) gossipBroadcast(sender mesh.PeerName, update mesh.GossipData) {
for _, gossipChan := range grouter.gossipChans {
select {
case gossipChan <- broadcastMessage{sender: sender, data: update}:
@@ -54,7 +54,6 @@ func (grouter *TestRouter) gossipBroadcast(sender mesh.PeerName, update mesh.Gos
common.Log.Errorf("Dropping message")
}
}
return nil
}
func (grouter *TestRouter) gossip(sender mesh.PeerName, update mesh.GossipData) error {
@@ -174,6 +173,6 @@ func (client TestRouterClient) GossipUnicast(dstPeerName mesh.PeerName, buf []by
return nil
}
func (client TestRouterClient) GossipBroadcast(update mesh.GossipData) error {
return client.router.gossipBroadcast(client.sender, update)
func (client TestRouterClient) GossipBroadcast(update mesh.GossipData) {
client.router.gossipBroadcast(client.sender, update)
}