refactor: reduce coupling of nameserver to router

The nameserver no longer knows anything about router.Peers and
router.Peer. That only leaves PeerName, Gossip and GossipData.
This commit is contained in:
Matthias Radestock committed 2015-10-29 23:21:07 +00:00
1 parent 6a672cf8bc
commit 12f5ec40b5
4 files changed
+31 -29

No files matched your search

+1 -1
View File
@@ -18,7 +18,7 @@ import (
func startServer(t *testing.T, upstream *dns.ClientConfig) (*DNSServer, *Nameserver, int, int) {
peername, err := router.PeerNameFromString("00:00:00:02:00:00")
require.Nil(t, err)
nameserver := New(peername, nil, "")
nameserver := New(peername, "", func(router.PeerName) bool { return true })
dnsserver, err := NewDNSServer(nameserver, "weave.local.", "0.0.0.0:0", "", 30, 5*time.Second)
require.Nil(t, err)
udpPort := dnsserver.servers[0].PacketConn.LocalAddr().(*net.UDPAddr).Port
+17 -23
View File
@@ -37,25 +37,21 @@ const (
// - Update is O(n) for now
type Nameserver struct {
sync.RWMutex
ourName router.PeerName
domain string
gossip router.Gossip
entries Entries
peers *router.Peers
quit chan struct{}
ourName router.PeerName
domain string
gossip router.Gossip
entries Entries
isKnownPeer func(router.PeerName) bool
quit chan struct{}
}
func New(ourName router.PeerName, peers *router.Peers, domain string) *Nameserver {
ns := &Nameserver{
ourName: ourName,
domain: dns.Fqdn(domain),
peers: peers,
quit: make(chan struct{}),
func New(ourName router.PeerName, domain string, isKnownPeer func(router.PeerName) bool) *Nameserver {
return &Nameserver{
ourName: ourName,
domain: dns.Fqdn(domain),
isKnownPeer: isKnownPeer,
quit: make(chan struct{}),
}
if peers != nil {
peers.OnGC(ns.PeerGone)
}
return ns
}
func (n *Nameserver) SetGossip(gossip router.Gossip) {
@@ -147,12 +143,12 @@ func (n *Nameserver) ContainerDied(ident string) {
}
}
func (n *Nameserver) PeerGone(peer *router.Peer) {
func (n *Nameserver) PeerGone(peer router.PeerName) {
n.infof("peer %s gone", peer.String())
n.Lock()
defer n.Unlock()
n.entries.filter(func(e *Entry) bool {
return e.Origin != peer.Name
return e.Origin != peer
})
}
@@ -219,11 +215,9 @@ func (n *Nameserver) receiveGossip(msg []byte) (router.GossipData, router.Gossip
n.Lock()
defer n.Unlock()
if n.peers != nil {
gossip.Entries.filter(func(e *Entry) bool {
return n.peers.Fetch(e.Origin) != nil
})
}
gossip.Entries.filter(func(e *Entry) bool {
return n.isKnownPeer(e.Origin)
})
newEntries := n.entries.merge(gossip.Entries)
if len(newEntries) > 0 {
+8 -4
View File
@@ -17,13 +17,17 @@ import (
"github.com/weaveworks/weave/testing/gossip"
)
func makeNameserver(name router.PeerName) *Nameserver {
return New(name, "", func(router.PeerName) bool { return true })
}
func makeNetwork(size int) ([]*Nameserver, *gossip.TestRouter) {
gossipRouter := gossip.NewTestRouter(0.0)
nameservers := make([]*Nameserver, size)
for i := 0; i < size; i++ {
name, _ := router.PeerNameFromString(fmt.Sprintf("%02d:00:00:02:00:00", i))
nameserver := New(name, nil, "")
nameserver := makeNameserver(name)
nameserver.SetGossip(gossipRouter.Connect(nameserver.ourName, nameserver))
nameserver.Start()
nameservers[i] = nameserver
@@ -205,7 +209,7 @@ func testNameservers(t *testing.T) {
func TestContainerAndPeerDeath(t *testing.T) {
peername, err := router.PeerNameFromString("00:00:00:02:00:00")
require.Nil(t, err)
nameserver := New(peername, nil, "")
nameserver := makeNameserver(peername)
err = nameserver.AddEntry("hostname", "containerid", peername, address.Address(0))
require.Nil(t, err)
@@ -218,7 +222,7 @@ func TestContainerAndPeerDeath(t *testing.T) {
require.Nil(t, err)
require.Equal(t, []address.Address{0}, nameserver.Lookup("hostname"))
nameserver.PeerGone(&router.Peer{Name: peername})
nameserver.PeerGone(peername)
require.Equal(t, []address.Address{}, nameserver.Lookup("hostname"))
}
@@ -229,7 +233,7 @@ func TestTombstoneDeletion(t *testing.T) {
peername, err := router.PeerNameFromString("00:00:00:02:00:00")
require.Nil(t, err)
nameserver := New(peername, nil, "")
nameserver := makeNameserver(peername)
err = nameserver.AddEntry("hostname", "containerid", peername, address.Address(0))
require.Nil(t, err)
+5 -1
View File
@@ -264,7 +264,11 @@ func main() {
dnsserver *nameserver.DNSServer
)
if !noDNS {
ns = nameserver.New(router.Ourself.Peer.Name, router.Peers, dnsDomain)
isKnownPeer := func(name weave.PeerName) bool {
return router.Peers.Fetch(name) != nil
}
ns = nameserver.New(router.Ourself.Peer.Name, dnsDomain, isKnownPeer)
router.Peers.OnGC(func(peer *weave.Peer) { ns.PeerGone(peer.Name) })
ns.SetGossip(router.NewGossip("nameserver", ns))
observeContainers(ns)
ns.Start()