mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
bb560a1f44
With the introduction of networkdb, the node discovery events were not sent to the drivers. This commit generates the node discovery events and sents it to the drivers interested in it. Signed-off-by: Madhu Venugopal <madhu@docker.com>
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package networkdb
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net"
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
"github.com/hashicorp/memberlist"
|
|
)
|
|
|
|
type eventDelegate struct {
|
|
nDB *NetworkDB
|
|
}
|
|
|
|
func (e *eventDelegate) broadcastNodeEvent(addr net.IP, op opType) {
|
|
value, err := json.Marshal(&NodeAddr{addr})
|
|
if err == nil {
|
|
e.nDB.broadcaster.Write(makeEvent(op, NodeTable, "", "", value))
|
|
} else {
|
|
logrus.Errorf("Error marshalling node broadcast event %s", addr.String())
|
|
}
|
|
}
|
|
|
|
func (e *eventDelegate) NotifyJoin(mn *memberlist.Node) {
|
|
e.broadcastNodeEvent(mn.Addr, opCreate)
|
|
e.nDB.Lock()
|
|
// In case the node is rejoining after a failure or leave,
|
|
// wait until an explicit join message arrives before adding
|
|
// it to the nodes just to make sure this is not a stale
|
|
// join. If you don't know about this node add it immediately.
|
|
_, fOk := e.nDB.failedNodes[mn.Name]
|
|
_, lOk := e.nDB.leftNodes[mn.Name]
|
|
if fOk || lOk {
|
|
e.nDB.Unlock()
|
|
return
|
|
}
|
|
|
|
e.nDB.nodes[mn.Name] = &node{Node: *mn}
|
|
e.nDB.Unlock()
|
|
}
|
|
|
|
func (e *eventDelegate) NotifyLeave(mn *memberlist.Node) {
|
|
e.broadcastNodeEvent(mn.Addr, opDelete)
|
|
e.nDB.deleteNodeTableEntries(mn.Name)
|
|
e.nDB.deleteNetworkEntriesForNode(mn.Name)
|
|
e.nDB.Lock()
|
|
if n, ok := e.nDB.nodes[mn.Name]; ok {
|
|
delete(e.nDB.nodes, mn.Name)
|
|
|
|
n.reapTime = reapInterval
|
|
e.nDB.failedNodes[mn.Name] = n
|
|
}
|
|
e.nDB.Unlock()
|
|
}
|
|
|
|
func (e *eventDelegate) NotifyUpdate(n *memberlist.Node) {
|
|
}
|