diff --git a/addr_manager_badger.go b/addr_manager_badger.go index e118066..0a612d6 100644 --- a/addr_manager_badger.go +++ b/addr_manager_badger.go @@ -12,7 +12,7 @@ import ( "bytes" ) -type AddrManagerBadger struct { +type BadgerAddrManager struct { DB *badger.DB addrSubs map[peer.ID][]*addrSub } @@ -22,7 +22,7 @@ type addrentry struct { TTL time.Duration } -func (mgr *AddrManagerBadger) sendSubscriptionUpdates(p *peer.ID, addrs []ma.Multiaddr) { +func (mgr *BadgerAddrManager) sendSubscriptionUpdates(p *peer.ID, addrs []ma.Multiaddr) { subs := mgr.addrSubs[*p] for _, sub := range subs { for _, addr := range addrs { @@ -31,13 +31,13 @@ func (mgr *AddrManagerBadger) sendSubscriptionUpdates(p *peer.ID, addrs []ma.Mul } } -func (mgr *AddrManagerBadger) Close() { +func (mgr *BadgerAddrManager) Close() { if err := mgr.DB.Close(); err != nil { log.Error(err) } } -func NewBadgerAddrManager(dataPath string) (*AddrManagerBadger, error) { +func NewBadgerAddrManager(dataPath string) (*BadgerAddrManager, error) { opts := badger.DefaultOptions opts.Dir = dataPath opts.ValueDir = dataPath @@ -45,10 +45,10 @@ func NewBadgerAddrManager(dataPath string) (*AddrManagerBadger, error) { if err != nil { return nil, err } - return &AddrManagerBadger{DB: db}, nil + return &BadgerAddrManager{DB: db}, nil } -func (mgr *AddrManagerBadger) AddAddr(p peer.ID, addr ma.Multiaddr, ttl time.Duration) { +func (mgr *BadgerAddrManager) AddAddr(p peer.ID, addr ma.Multiaddr, ttl time.Duration) { mgr.AddAddrs(p, []ma.Multiaddr{addr}, ttl) } @@ -90,7 +90,7 @@ func addAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Duration, txn *badger.Tx } } -func (mgr *AddrManagerBadger) AddAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Duration) { +func (mgr *BadgerAddrManager) AddAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Duration) { if ttl <= 0 { log.Debugf("short circuiting AddAddrs with ttl %d", ttl) return @@ -106,11 +106,11 @@ func (mgr *AddrManagerBadger) AddAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time txn.Commit(nil) } -func (mgr *AddrManagerBadger) SetAddr(p peer.ID, addr ma.Multiaddr, ttl time.Duration) { +func (mgr *BadgerAddrManager) SetAddr(p peer.ID, addr ma.Multiaddr, ttl time.Duration) { mgr.SetAddrs(p, []ma.Multiaddr{addr}, ttl) } -func (mgr *AddrManagerBadger) SetAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Duration) { +func (mgr *BadgerAddrManager) SetAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Duration) { txn := mgr.DB.NewTransaction(true) defer txn.Discard() @@ -142,7 +142,7 @@ func (mgr *AddrManagerBadger) SetAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time txn.Commit(nil) } -func (mgr *AddrManagerBadger) UpdateAddrs(p peer.ID, oldTTL time.Duration, newTTL time.Duration) { +func (mgr *BadgerAddrManager) UpdateAddrs(p peer.ID, oldTTL time.Duration, newTTL time.Duration) { prefix := []byte(p) txn := mgr.DB.NewTransaction(true) defer txn.Discard() @@ -181,7 +181,7 @@ func (mgr *AddrManagerBadger) UpdateAddrs(p peer.ID, oldTTL time.Duration, newTT txn.Commit(nil) } -func (mgr *AddrManagerBadger) Addrs(p peer.ID) []ma.Multiaddr { +func (mgr *BadgerAddrManager) Addrs(p peer.ID) []ma.Multiaddr { txn := mgr.DB.NewTransaction(false) defer txn.Discard() @@ -220,7 +220,7 @@ func (mgr *AddrManagerBadger) Addrs(p peer.ID) []ma.Multiaddr { return addrs } -func (mgr *AddrManagerBadger) AddrStream(ctx context.Context, p peer.ID) <-chan ma.Multiaddr { +func (mgr *BadgerAddrManager) AddrStream(ctx context.Context, p peer.ID) <-chan ma.Multiaddr { addrs := make(chan ma.Multiaddr) // TODO: impl @@ -228,7 +228,7 @@ func (mgr *AddrManagerBadger) AddrStream(ctx context.Context, p peer.ID) <-chan return addrs } -func (mgr *AddrManagerBadger) ClearAddrs(p peer.ID) { +func (mgr *BadgerAddrManager) ClearAddrs(p peer.ID) { txn := mgr.DB.NewTransaction(true) defer txn.Discard() it := txn.NewIterator(badger.DefaultIteratorOptions) diff --git a/addr_manager_test.go b/addr_manager_test.go index e41e965..ae9c724 100644 --- a/addr_manager_test.go +++ b/addr_manager_test.go @@ -7,6 +7,7 @@ import ( "github.com/libp2p/go-libp2p-peer" ma "github.com/multiformats/go-multiaddr" "os" + "io/ioutil" ) func IDS(t *testing.T, ids string) peer.ID { @@ -49,6 +50,22 @@ func testHas(t *testing.T, exp, act []ma.Multiaddr) { } } +func setupBadgerAddrManager(t *testing.T) (*BadgerAddrManager, func ()) { + dataPath, err := ioutil.TempDir(os.TempDir(), "badger") + if err != nil { + t.Fatal(err) + } + mgr, err := NewBadgerAddrManager(dataPath) + if err != nil { + t.Fatal(err) + } + closer := func () { + mgr.Close() + os.RemoveAll(dataPath) + } + return mgr, closer +} + func testAddresses(t *testing.T, m AddrBook) { id1 := IDS(t, "QmcNstKuwBBoVTpSCSDrwzjgrRcaYXK833Psuz2EMHwyQN") id2 := IDS(t, "QmRmPL3FDZKE3Qiwv1RosLdwdvbvg17b2hB39QPScgWKKZ") @@ -99,28 +116,14 @@ func testAddresses(t *testing.T, m AddrBook) { testHas(t, []ma.Multiaddr{ma51, ma52, ma53, ma54, ma55}, m.Addrs(id5)) } -func setupBadgerAddrManager(t *testing.T) (*AddrManagerBadger, func ()) { - dataPath := os.TempDir() - mgr, err := NewBadgerAddrManager(dataPath) - if err != nil { - t.Fatal(err) - } - closer := func () { - mgr.Close() - os.RemoveAll(dataPath) - } - return mgr, closer -} - func TestAddresses(t *testing.T) { t.Log("AddrManager") mgr1 := AddrManager{} testAddresses(t, &mgr1) - t.Log("AddrManager") - - mgr2, closer := setupBadgerAddrManager(t) - defer closer() + t.Log("BadgerAddrManager") + mgr2, closer2 := setupBadgerAddrManager(t) + defer closer2() testAddresses(t, mgr2) } @@ -152,27 +155,27 @@ func testAddressesExpire(t *testing.T, m AddrBook) { testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) m.SetAddr(id1, ma11, time.Millisecond) - <-time.After(time.Millisecond) + <-time.After(time.Millisecond * 2) testHas(t, []ma.Multiaddr{ma12, ma13}, m.Addrs(id1)) testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) m.SetAddr(id1, ma13, time.Millisecond) - <-time.After(time.Millisecond) + <-time.After(time.Millisecond * 2) testHas(t, []ma.Multiaddr{ma12}, m.Addrs(id1)) testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) m.SetAddr(id2, ma24, time.Millisecond) - <-time.After(time.Millisecond) + <-time.After(time.Millisecond * 2) testHas(t, []ma.Multiaddr{ma12}, m.Addrs(id1)) testHas(t, []ma.Multiaddr{ma25}, m.Addrs(id2)) m.SetAddr(id2, ma25, time.Millisecond) - <-time.After(time.Millisecond) + <-time.After(time.Millisecond * 2) testHas(t, []ma.Multiaddr{ma12}, m.Addrs(id1)) testHas(t, nil, m.Addrs(id2)) m.SetAddr(id1, ma12, time.Millisecond) - <-time.After(time.Millisecond) + <-time.After(time.Millisecond * 2) testHas(t, nil, m.Addrs(id1)) testHas(t, nil, m.Addrs(id2)) } @@ -182,9 +185,9 @@ func TestAddressesExpire(t *testing.T) { m1 := &AddrManager{} testAddressesExpire(t, m1) - t.Log("AddrManagerBadger") - m2, closer := setupBadgerAddrManager(t) - defer closer() + t.Log("BadgerAddrManager") + m2, closer2 := setupBadgerAddrManager(t) + defer closer2() testAddressesExpire(t, m2) } @@ -218,9 +221,9 @@ func TestClearWorks(t *testing.T) { m1 := &AddrManager{} testClearWorks(t, m1) - t.Log("AddrManagerBadger") - m2, closer := setupBadgerAddrManager(t) - defer closer() + t.Log("BadgerAddrManager") + m2, closer2 := setupBadgerAddrManager(t) + defer closer2() testClearWorks(t, m2) } @@ -241,9 +244,9 @@ func TestSetNegativeTTLClears(t *testing.T) { m1 := &AddrManager{} testSetNegativeTTLClears(t, m1) - t.Log("AddrManagerBadger") - m2, closer := setupBadgerAddrManager(t) - defer closer() + t.Log("BadgerAddrManager") + m2, closer2 := setupBadgerAddrManager(t) + defer closer2() testSetNegativeTTLClears(t, m2) } @@ -275,7 +278,7 @@ func testUpdateTTLs(t *testing.T, m AddrBook) { testHas(t, []ma.Multiaddr{ma11, ma12}, m.Addrs(id1)) testHas(t, []ma.Multiaddr{ma21, ma22}, m.Addrs(id2)) - time.Sleep(time.Second) + time.Sleep(1200 * time.Millisecond) testHas(t, []ma.Multiaddr{ma12}, m.Addrs(id1)) testHas(t, []ma.Multiaddr{ma21, ma22}, m.Addrs(id2)) @@ -285,7 +288,7 @@ func testUpdateTTLs(t *testing.T, m AddrBook) { testHas(t, []ma.Multiaddr{ma12}, m.Addrs(id1)) testHas(t, []ma.Multiaddr{ma21, ma22}, m.Addrs(id2)) - time.Sleep(time.Second) + time.Sleep(1200 * time.Millisecond) testHas(t, []ma.Multiaddr{ma12}, m.Addrs(id1)) testHas(t, []ma.Multiaddr{ma22}, m.Addrs(id2)) @@ -296,9 +299,9 @@ func TestUpdateTTLs(t *testing.T) { m1 := &AddrManager{} testUpdateTTLs(t, m1) - t.Log("AddrManagerBadger") - m2, closer := setupBadgerAddrManager(t) - defer closer() + t.Log("BadgerAddrManager") + m2, closer2 := setupBadgerAddrManager(t) + defer closer2() testUpdateTTLs(t, m2) } @@ -313,9 +316,10 @@ func TestNilAddrsDontBreak(t *testing.T) { m1 := &AddrManager{} testNilAddrsDontBreak(t, m1) t.Log("OK") - t.Log("AddrManagerBadger") - m2, closer := setupBadgerAddrManager(t) - defer closer() + + t.Log("BadgerAddrManager") + m2, closer2 := setupBadgerAddrManager(t) + defer closer2() testNilAddrsDontBreak(t, m2) t.Log("OK") } diff --git a/peerstore_badger.go b/peerstore_badger.go index 55b585e..859edcc 100644 --- a/peerstore_badger.go +++ b/peerstore_badger.go @@ -10,7 +10,7 @@ import ( type PeerstoreBadger struct { *keybook *metrics - *AddrManagerBadger + *BadgerAddrManager ds map[string]interface{} dslock sync.Mutex @@ -27,20 +27,20 @@ func NewPeerstoreBadger(dataPath string) *PeerstoreBadger { return &PeerstoreBadger{ keybook: newKeybook(), metrics: NewMetrics(), - AddrManagerBadger: mgr, + BadgerAddrManager: mgr, ds: make(map[string]interface{}), } } func (ps *PeerstoreBadger) Close() error { - ps.AddrManagerBadger.Close() + ps.BadgerAddrManager.Close() return nil } func (ps *PeerstoreBadger) PeerInfo(p peer.ID) PeerInfo { return PeerInfo{ ID: p, - Addrs: ps.AddrManagerBadger.Addrs(p), + Addrs: ps.BadgerAddrManager.Addrs(p), } }