mirror of
https://github.com/libp2p/go-libp2p-peerstore.git
synced 2026-08-22 15:33:27 +08:00
Merge branch 'txndatastore' into ttldatastore
This commit is contained in:
@@ -55,7 +55,7 @@ type cacheEntry struct {
|
||||
// NewAddrBook initializes a new address book given a
|
||||
// Datastore instance, a context for managing the TTL manager,
|
||||
// and the interval at which the TTL manager should sweep the Datastore.
|
||||
func NewAddrBook(ctx context.Context, store ds.TxnDatastore, opts PeerstoreOpts) (*dsAddrBook, error) {
|
||||
func NewAddrBook(ctx context.Context, store ds.TxnDatastore, opts Options) (*dsAddrBook, error) {
|
||||
if _, ok := store.(ds.TTLDatastore); !ok {
|
||||
return nil, ErrTTLDatastore
|
||||
}
|
||||
@@ -184,13 +184,12 @@ func (mgr *dsAddrBook) setAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Durati
|
||||
return err
|
||||
}
|
||||
|
||||
// Successful. Update cache and broadcast event.
|
||||
// Update was successful, so broadcast event only for new addresses.
|
||||
for i, _ := range keys {
|
||||
if !existed[i] {
|
||||
mgr.subsManager.BroadcastAddr(p, addrs[i])
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -392,7 +391,8 @@ func (mgr *dsAddrBook) PeersWithAddrs() peer.IDSlice {
|
||||
return peer.IDSlice{}
|
||||
}
|
||||
|
||||
ids, i := make(peer.IDSlice, len(idset)), 0
|
||||
ids := make(peer.IDSlice, len(idset))
|
||||
i := 0
|
||||
for id := range idset {
|
||||
pid, _ := peer.IDB58Decode(id)
|
||||
ids[i] = pid
|
||||
|
||||
@@ -170,7 +170,7 @@ func badgerStore(t testing.TB) (ds.TxnDatastore, func()) {
|
||||
return ds, closer
|
||||
}
|
||||
|
||||
func peerstoreFactory(tb testing.TB, opts PeerstoreOpts) pt.PeerstoreFactory {
|
||||
func peerstoreFactory(tb testing.TB, opts Options) pt.PeerstoreFactory {
|
||||
return func() (pstore.Peerstore, func()) {
|
||||
ds, closeFunc := badgerStore(tb)
|
||||
|
||||
@@ -183,7 +183,7 @@ func peerstoreFactory(tb testing.TB, opts PeerstoreOpts) pt.PeerstoreFactory {
|
||||
}
|
||||
}
|
||||
|
||||
func addressBookFactory(tb testing.TB, opts PeerstoreOpts) pt.AddrBookFactory {
|
||||
func addressBookFactory(tb testing.TB, opts Options) pt.AddrBookFactory {
|
||||
return func() (pstore.AddrBook, func()) {
|
||||
ds, closeDB := badgerStore(tb)
|
||||
|
||||
|
||||
@@ -11,11 +11,12 @@ import (
|
||||
)
|
||||
|
||||
// Configuration object for the peerstore.
|
||||
type PeerstoreOpts struct {
|
||||
type Options struct {
|
||||
// The size of the in-memory cache. A value of 0 or lower disables the cache.
|
||||
CacheSize uint
|
||||
|
||||
// Sweep interval to expire entries when TTL is not managed by underlying datastore.
|
||||
// Sweep interval to expire entries, only used when TTL is *not* natively managed
|
||||
// by the underlying datastore.
|
||||
TTLInterval time.Duration
|
||||
|
||||
// Number of times to retry transactional writes.
|
||||
@@ -26,8 +27,8 @@ type PeerstoreOpts struct {
|
||||
// * Cache size: 1024
|
||||
// * TTL sweep interval: 1 second
|
||||
// * WriteRetries: 5
|
||||
func DefaultOpts() PeerstoreOpts {
|
||||
return PeerstoreOpts{
|
||||
func DefaultOpts() Options {
|
||||
return Options{
|
||||
CacheSize: 1024,
|
||||
TTLInterval: time.Second,
|
||||
WriteRetries: 5,
|
||||
@@ -35,7 +36,7 @@ func DefaultOpts() PeerstoreOpts {
|
||||
}
|
||||
|
||||
// NewPeerstore creates a peerstore backed by the provided persistent datastore.
|
||||
func NewPeerstore(ctx context.Context, store ds.TxnDatastore, opts PeerstoreOpts) (pstore.Peerstore, error) {
|
||||
func NewPeerstore(ctx context.Context, store ds.TxnDatastore, opts Options) (pstore.Peerstore, error) {
|
||||
addrBook, err := NewAddrBook(ctx, store, opts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -162,10 +162,8 @@ func (mab *memoryAddrBook) UpdateAddrs(p peer.ID, oldTTL time.Duration, newTTL t
|
||||
}
|
||||
|
||||
exp := time.Now().Add(newTTL)
|
||||
// TODO: RK - Shorthand.
|
||||
for i := range addrs {
|
||||
aexp := &addrs[i]
|
||||
if oldTTL == aexp.TTL {
|
||||
if aexp := &addrs[i]; oldTTL == aexp.TTL {
|
||||
aexp.TTL = newTTL
|
||||
aexp.Expires = exp
|
||||
}
|
||||
|
||||
@@ -154,25 +154,25 @@ func testUpdateTTLs(m pstore.AddrBook) func(t *testing.T) {
|
||||
testHas(t, addrs2, m.Addrs(ids[1]))
|
||||
|
||||
// Will only affect addrs1[0].
|
||||
m.UpdateAddrs(ids[0], time.Hour, time.Second)
|
||||
m.UpdateAddrs(ids[0], time.Hour, 100*time.Microsecond)
|
||||
|
||||
// No immediate effect.
|
||||
testHas(t, addrs1, m.Addrs(ids[0]))
|
||||
testHas(t, addrs2, m.Addrs(ids[1]))
|
||||
|
||||
// After a wait, addrs[0] is gone.
|
||||
time.Sleep(3000 * time.Millisecond)
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
testHas(t, addrs1[1:2], m.Addrs(ids[0]))
|
||||
testHas(t, addrs2, m.Addrs(ids[1]))
|
||||
|
||||
// Will only affect addrs2[0].
|
||||
m.UpdateAddrs(ids[1], time.Hour, time.Second)
|
||||
m.UpdateAddrs(ids[1], time.Hour, 100*time.Microsecond)
|
||||
|
||||
// No immediate effect.
|
||||
testHas(t, addrs1[1:2], m.Addrs(ids[0]))
|
||||
testHas(t, addrs2, m.Addrs(ids[1]))
|
||||
|
||||
time.Sleep(3000 * time.Millisecond)
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
|
||||
// First addrs is gone in both.
|
||||
testHas(t, addrs1[1:], m.Addrs(ids[0]))
|
||||
@@ -209,28 +209,28 @@ func testAddressesExpire(m pstore.AddrBook) func(t *testing.T) {
|
||||
testHas(t, addrs1, m.Addrs(ids[0]))
|
||||
testHas(t, addrs2, m.Addrs(ids[1]))
|
||||
|
||||
m.SetAddr(ids[0], addrs1[0], time.Millisecond)
|
||||
<-time.After(time.Millisecond * 5)
|
||||
m.SetAddr(ids[0], addrs1[0], 100*time.Microsecond)
|
||||
<-time.After(100 * time.Millisecond)
|
||||
testHas(t, addrs1[1:3], m.Addrs(ids[0]))
|
||||
testHas(t, addrs2, m.Addrs(ids[1]))
|
||||
|
||||
m.SetAddr(ids[0], addrs1[2], time.Millisecond)
|
||||
<-time.After(time.Millisecond * 5)
|
||||
m.SetAddr(ids[0], addrs1[2], 100*time.Microsecond)
|
||||
<-time.After(100 * time.Millisecond)
|
||||
testHas(t, addrs1[1:2], m.Addrs(ids[0]))
|
||||
testHas(t, addrs2, m.Addrs(ids[1]))
|
||||
|
||||
m.SetAddr(ids[1], addrs2[0], time.Millisecond)
|
||||
<-time.After(time.Millisecond * 5)
|
||||
m.SetAddr(ids[1], addrs2[0], 100*time.Microsecond)
|
||||
<-time.After(100 * time.Millisecond)
|
||||
testHas(t, addrs1[1:2], m.Addrs(ids[0]))
|
||||
testHas(t, addrs2[1:], m.Addrs(ids[1]))
|
||||
|
||||
m.SetAddr(ids[1], addrs2[1], time.Millisecond)
|
||||
<-time.After(time.Millisecond * 5)
|
||||
m.SetAddr(ids[1], addrs2[1], 100*time.Microsecond)
|
||||
<-time.After(100 * time.Millisecond)
|
||||
testHas(t, addrs1[1:2], m.Addrs(ids[0]))
|
||||
testHas(t, nil, m.Addrs(ids[1]))
|
||||
|
||||
m.SetAddr(ids[0], addrs1[1], time.Millisecond)
|
||||
<-time.After(time.Millisecond * 5)
|
||||
m.SetAddr(ids[0], addrs1[1], 100*time.Microsecond)
|
||||
<-time.After(100 * time.Millisecond)
|
||||
testHas(t, nil, m.Addrs(ids[0]))
|
||||
testHas(t, nil, m.Addrs(ids[1]))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user