Rename AddrManagerBadger -> BadgerAddrManager

This commit is contained in:
Cole Brown 2018-06-11 17:56:57 -04:00
parent 8fba05add1
commit d06a57e781
3 changed files with 60 additions and 56 deletions

View File

@ -12,7 +12,7 @@ import (
"bytes" "bytes"
) )
type AddrManagerBadger struct { type BadgerAddrManager struct {
DB *badger.DB DB *badger.DB
addrSubs map[peer.ID][]*addrSub addrSubs map[peer.ID][]*addrSub
} }
@ -22,7 +22,7 @@ type addrentry struct {
TTL time.Duration 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] subs := mgr.addrSubs[*p]
for _, sub := range subs { for _, sub := range subs {
for _, addr := range addrs { 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 { if err := mgr.DB.Close(); err != nil {
log.Error(err) log.Error(err)
} }
} }
func NewBadgerAddrManager(dataPath string) (*AddrManagerBadger, error) { func NewBadgerAddrManager(dataPath string) (*BadgerAddrManager, error) {
opts := badger.DefaultOptions opts := badger.DefaultOptions
opts.Dir = dataPath opts.Dir = dataPath
opts.ValueDir = dataPath opts.ValueDir = dataPath
@ -45,10 +45,10 @@ func NewBadgerAddrManager(dataPath string) (*AddrManagerBadger, error) {
if err != nil { if err != nil {
return nil, err 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) 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 { if ttl <= 0 {
log.Debugf("short circuiting AddAddrs with ttl %d", ttl) log.Debugf("short circuiting AddAddrs with ttl %d", ttl)
return return
@ -106,11 +106,11 @@ func (mgr *AddrManagerBadger) AddAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time
txn.Commit(nil) 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) 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) txn := mgr.DB.NewTransaction(true)
defer txn.Discard() defer txn.Discard()
@ -142,7 +142,7 @@ func (mgr *AddrManagerBadger) SetAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time
txn.Commit(nil) 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) prefix := []byte(p)
txn := mgr.DB.NewTransaction(true) txn := mgr.DB.NewTransaction(true)
defer txn.Discard() defer txn.Discard()
@ -181,7 +181,7 @@ func (mgr *AddrManagerBadger) UpdateAddrs(p peer.ID, oldTTL time.Duration, newTT
txn.Commit(nil) 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) txn := mgr.DB.NewTransaction(false)
defer txn.Discard() defer txn.Discard()
@ -220,7 +220,7 @@ func (mgr *AddrManagerBadger) Addrs(p peer.ID) []ma.Multiaddr {
return addrs 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) addrs := make(chan ma.Multiaddr)
// TODO: impl // TODO: impl
@ -228,7 +228,7 @@ func (mgr *AddrManagerBadger) AddrStream(ctx context.Context, p peer.ID) <-chan
return addrs return addrs
} }
func (mgr *AddrManagerBadger) ClearAddrs(p peer.ID) { func (mgr *BadgerAddrManager) ClearAddrs(p peer.ID) {
txn := mgr.DB.NewTransaction(true) txn := mgr.DB.NewTransaction(true)
defer txn.Discard() defer txn.Discard()
it := txn.NewIterator(badger.DefaultIteratorOptions) it := txn.NewIterator(badger.DefaultIteratorOptions)

View File

@ -7,6 +7,7 @@ import (
"github.com/libp2p/go-libp2p-peer" "github.com/libp2p/go-libp2p-peer"
ma "github.com/multiformats/go-multiaddr" ma "github.com/multiformats/go-multiaddr"
"os" "os"
"io/ioutil"
) )
func IDS(t *testing.T, ids string) peer.ID { 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) { func testAddresses(t *testing.T, m AddrBook) {
id1 := IDS(t, "QmcNstKuwBBoVTpSCSDrwzjgrRcaYXK833Psuz2EMHwyQN") id1 := IDS(t, "QmcNstKuwBBoVTpSCSDrwzjgrRcaYXK833Psuz2EMHwyQN")
id2 := IDS(t, "QmRmPL3FDZKE3Qiwv1RosLdwdvbvg17b2hB39QPScgWKKZ") 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)) 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) { func TestAddresses(t *testing.T) {
t.Log("AddrManager") t.Log("AddrManager")
mgr1 := AddrManager{} mgr1 := AddrManager{}
testAddresses(t, &mgr1) testAddresses(t, &mgr1)
t.Log("AddrManager") t.Log("BadgerAddrManager")
mgr2, closer2 := setupBadgerAddrManager(t)
mgr2, closer := setupBadgerAddrManager(t) defer closer2()
defer closer()
testAddresses(t, mgr2) testAddresses(t, mgr2)
} }
@ -152,27 +155,27 @@ func testAddressesExpire(t *testing.T, m AddrBook) {
testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2))
m.SetAddr(id1, ma11, time.Millisecond) 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{ma12, ma13}, m.Addrs(id1))
testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2))
m.SetAddr(id1, ma13, time.Millisecond) 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{ma12}, m.Addrs(id1))
testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2))
m.SetAddr(id2, ma24, time.Millisecond) 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{ma12}, m.Addrs(id1))
testHas(t, []ma.Multiaddr{ma25}, m.Addrs(id2)) testHas(t, []ma.Multiaddr{ma25}, m.Addrs(id2))
m.SetAddr(id2, ma25, time.Millisecond) 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, []ma.Multiaddr{ma12}, m.Addrs(id1))
testHas(t, nil, m.Addrs(id2)) testHas(t, nil, m.Addrs(id2))
m.SetAddr(id1, ma12, time.Millisecond) 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(id1))
testHas(t, nil, m.Addrs(id2)) testHas(t, nil, m.Addrs(id2))
} }
@ -182,9 +185,9 @@ func TestAddressesExpire(t *testing.T) {
m1 := &AddrManager{} m1 := &AddrManager{}
testAddressesExpire(t, m1) testAddressesExpire(t, m1)
t.Log("AddrManagerBadger") t.Log("BadgerAddrManager")
m2, closer := setupBadgerAddrManager(t) m2, closer2 := setupBadgerAddrManager(t)
defer closer() defer closer2()
testAddressesExpire(t, m2) testAddressesExpire(t, m2)
} }
@ -218,9 +221,9 @@ func TestClearWorks(t *testing.T) {
m1 := &AddrManager{} m1 := &AddrManager{}
testClearWorks(t, m1) testClearWorks(t, m1)
t.Log("AddrManagerBadger") t.Log("BadgerAddrManager")
m2, closer := setupBadgerAddrManager(t) m2, closer2 := setupBadgerAddrManager(t)
defer closer() defer closer2()
testClearWorks(t, m2) testClearWorks(t, m2)
} }
@ -241,9 +244,9 @@ func TestSetNegativeTTLClears(t *testing.T) {
m1 := &AddrManager{} m1 := &AddrManager{}
testSetNegativeTTLClears(t, m1) testSetNegativeTTLClears(t, m1)
t.Log("AddrManagerBadger") t.Log("BadgerAddrManager")
m2, closer := setupBadgerAddrManager(t) m2, closer2 := setupBadgerAddrManager(t)
defer closer() defer closer2()
testSetNegativeTTLClears(t, m2) 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{ma11, ma12}, m.Addrs(id1))
testHas(t, []ma.Multiaddr{ma21, ma22}, m.Addrs(id2)) 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{ma12}, m.Addrs(id1))
testHas(t, []ma.Multiaddr{ma21, ma22}, m.Addrs(id2)) 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{ma12}, m.Addrs(id1))
testHas(t, []ma.Multiaddr{ma21, ma22}, m.Addrs(id2)) 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{ma12}, m.Addrs(id1))
testHas(t, []ma.Multiaddr{ma22}, m.Addrs(id2)) testHas(t, []ma.Multiaddr{ma22}, m.Addrs(id2))
@ -296,9 +299,9 @@ func TestUpdateTTLs(t *testing.T) {
m1 := &AddrManager{} m1 := &AddrManager{}
testUpdateTTLs(t, m1) testUpdateTTLs(t, m1)
t.Log("AddrManagerBadger") t.Log("BadgerAddrManager")
m2, closer := setupBadgerAddrManager(t) m2, closer2 := setupBadgerAddrManager(t)
defer closer() defer closer2()
testUpdateTTLs(t, m2) testUpdateTTLs(t, m2)
} }
@ -313,9 +316,10 @@ func TestNilAddrsDontBreak(t *testing.T) {
m1 := &AddrManager{} m1 := &AddrManager{}
testNilAddrsDontBreak(t, m1) testNilAddrsDontBreak(t, m1)
t.Log("OK") t.Log("OK")
t.Log("AddrManagerBadger")
m2, closer := setupBadgerAddrManager(t) t.Log("BadgerAddrManager")
defer closer() m2, closer2 := setupBadgerAddrManager(t)
defer closer2()
testNilAddrsDontBreak(t, m2) testNilAddrsDontBreak(t, m2)
t.Log("OK") t.Log("OK")
} }

View File

@ -10,7 +10,7 @@ import (
type PeerstoreBadger struct { type PeerstoreBadger struct {
*keybook *keybook
*metrics *metrics
*AddrManagerBadger *BadgerAddrManager
ds map[string]interface{} ds map[string]interface{}
dslock sync.Mutex dslock sync.Mutex
@ -27,20 +27,20 @@ func NewPeerstoreBadger(dataPath string) *PeerstoreBadger {
return &PeerstoreBadger{ return &PeerstoreBadger{
keybook: newKeybook(), keybook: newKeybook(),
metrics: NewMetrics(), metrics: NewMetrics(),
AddrManagerBadger: mgr, BadgerAddrManager: mgr,
ds: make(map[string]interface{}), ds: make(map[string]interface{}),
} }
} }
func (ps *PeerstoreBadger) Close() error { func (ps *PeerstoreBadger) Close() error {
ps.AddrManagerBadger.Close() ps.BadgerAddrManager.Close()
return nil return nil
} }
func (ps *PeerstoreBadger) PeerInfo(p peer.ID) PeerInfo { func (ps *PeerstoreBadger) PeerInfo(p peer.ID) PeerInfo {
return PeerInfo{ return PeerInfo{
ID: p, ID: p,
Addrs: ps.AddrManagerBadger.Addrs(p), Addrs: ps.BadgerAddrManager.Addrs(p),
} }
} }