mirror of
https://github.com/libp2p/go-libp2p-peerstore.git
synced 2025-03-13 11:30:09 +08:00
Rename AddrManagerBadger -> BadgerAddrManager
This commit is contained in:
parent
8fba05add1
commit
d06a57e781
@ -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)
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
|
@ -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),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user