mirror of
https://github.com/fluencelabs/go-libp2p-kad-dht
synced 2025-04-25 06:42:13 +00:00
fix providers code, cant use cids as lru keys
This commit is contained in:
parent
e00b3ca0a4
commit
1ac83501a2
@ -94,7 +94,7 @@ func (pm *ProviderManager) providersForKey(k *cid.Cid) ([]peer.ID, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (pm *ProviderManager) getProvSet(k *cid.Cid) (*providerSet, error) {
|
func (pm *ProviderManager) getProvSet(k *cid.Cid) (*providerSet, error) {
|
||||||
cached, ok := pm.providers.Get(k)
|
cached, ok := pm.providers.Get(k.KeyString())
|
||||||
if ok {
|
if ok {
|
||||||
return cached.(*providerSet), nil
|
return cached.(*providerSet), nil
|
||||||
}
|
}
|
||||||
@ -105,7 +105,7 @@ func (pm *ProviderManager) getProvSet(k *cid.Cid) (*providerSet, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(pset.providers) > 0 {
|
if len(pset.providers) > 0 {
|
||||||
pm.providers.Add(k, pset)
|
pm.providers.Add(k.KeyString(), pset)
|
||||||
}
|
}
|
||||||
|
|
||||||
return pset, nil
|
return pset, nil
|
||||||
@ -161,10 +161,10 @@ func readTimeValue(i interface{}) (time.Time, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (pm *ProviderManager) addProv(k *cid.Cid, p peer.ID) error {
|
func (pm *ProviderManager) addProv(k *cid.Cid, p peer.ID) error {
|
||||||
iprovs, ok := pm.providers.Get(k)
|
iprovs, ok := pm.providers.Get(k.KeyString())
|
||||||
if !ok {
|
if !ok {
|
||||||
iprovs = newProviderSet()
|
iprovs = newProviderSet()
|
||||||
pm.providers.Add(k, iprovs)
|
pm.providers.Add(k.KeyString(), iprovs)
|
||||||
}
|
}
|
||||||
provs := iprovs.(*providerSet)
|
provs := iprovs.(*providerSet)
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
@ -183,7 +183,7 @@ func writeProviderEntry(dstore ds.Datastore, k *cid.Cid, p peer.ID, t time.Time)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (pm *ProviderManager) deleteProvSet(k *cid.Cid) error {
|
func (pm *ProviderManager) deleteProvSet(k *cid.Cid) error {
|
||||||
pm.providers.Remove(k)
|
pm.providers.Remove(k.KeyString())
|
||||||
|
|
||||||
res, err := pm.dstore.Query(dsq.Query{
|
res, err := pm.dstore.Query(dsq.Query{
|
||||||
KeysOnly: true,
|
KeysOnly: true,
|
||||||
@ -277,13 +277,13 @@ func (pm *ProviderManager) run() {
|
|||||||
if time.Now().Sub(t) > ProvideValidity {
|
if time.Now().Sub(t) > ProvideValidity {
|
||||||
delete(provs.set, p)
|
delete(provs.set, p)
|
||||||
} else {
|
} else {
|
||||||
|
log.Error("filtered key: ", t)
|
||||||
filtered = append(filtered, p)
|
filtered = append(filtered, p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(filtered) > 0 {
|
provs.providers = filtered
|
||||||
provs.providers = filtered
|
if len(filtered) == 0 {
|
||||||
} else {
|
|
||||||
err := pm.deleteProvSet(k)
|
err := pm.deleteProvSet(k)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("error deleting provider set: ", err)
|
log.Error("error deleting provider set: ", err)
|
||||||
|
@ -5,8 +5,9 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
cid "github.com/ipfs/go-cid"
|
||||||
ds "github.com/ipfs/go-datastore"
|
ds "github.com/ipfs/go-datastore"
|
||||||
key "github.com/ipfs/go-key"
|
u "github.com/ipfs/go-ipfs-util"
|
||||||
peer "github.com/ipfs/go-libp2p-peer"
|
peer "github.com/ipfs/go-libp2p-peer"
|
||||||
context "golang.org/x/net/context"
|
context "golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
@ -15,7 +16,7 @@ func TestProviderManager(t *testing.T) {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
mid := peer.ID("testing")
|
mid := peer.ID("testing")
|
||||||
p := NewProviderManager(ctx, mid, ds.NewMapDatastore())
|
p := NewProviderManager(ctx, mid, ds.NewMapDatastore())
|
||||||
a := key.Key("test")
|
a := cid.NewCidV0(u.Hash([]byte("test")))
|
||||||
p.AddProvider(ctx, a, peer.ID("testingprovider"))
|
p.AddProvider(ctx, a, peer.ID("testingprovider"))
|
||||||
resp := p.GetProviders(ctx, a)
|
resp := p.GetProviders(ctx, a)
|
||||||
if len(resp) != 1 {
|
if len(resp) != 1 {
|
||||||
@ -35,15 +36,15 @@ func TestProvidersDatastore(t *testing.T) {
|
|||||||
defer p.proc.Close()
|
defer p.proc.Close()
|
||||||
|
|
||||||
friend := peer.ID("friend")
|
friend := peer.ID("friend")
|
||||||
var keys []key.Key
|
var cids []*cid.Cid
|
||||||
for i := 0; i < 100; i++ {
|
for i := 0; i < 100; i++ {
|
||||||
k := key.Key(fmt.Sprint(i))
|
c := cid.NewCidV0(u.Hash([]byte(fmt.Sprint(i))))
|
||||||
keys = append(keys, k)
|
cids = append(cids, c)
|
||||||
p.AddProvider(ctx, k, friend)
|
p.AddProvider(ctx, c, friend)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, k := range keys {
|
for _, c := range cids {
|
||||||
resp := p.GetProviders(ctx, k)
|
resp := p.GetProviders(ctx, c)
|
||||||
if len(resp) != 1 {
|
if len(resp) != 1 {
|
||||||
t.Fatal("Could not retrieve provider.")
|
t.Fatal("Could not retrieve provider.")
|
||||||
}
|
}
|
||||||
@ -56,7 +57,7 @@ func TestProvidersDatastore(t *testing.T) {
|
|||||||
func TestProvidersSerialization(t *testing.T) {
|
func TestProvidersSerialization(t *testing.T) {
|
||||||
dstore := ds.NewMapDatastore()
|
dstore := ds.NewMapDatastore()
|
||||||
|
|
||||||
k := key.Key("my key!")
|
k := cid.NewCidV0(u.Hash(([]byte("my key!"))))
|
||||||
p1 := peer.ID("peer one")
|
p1 := peer.ID("peer one")
|
||||||
p2 := peer.ID("peer two")
|
p2 := peer.ID("peer two")
|
||||||
pt1 := time.Now()
|
pt1 := time.Now()
|
||||||
@ -111,16 +112,16 @@ func TestProvidesExpire(t *testing.T) {
|
|||||||
p := NewProviderManager(ctx, mid, ds.NewMapDatastore())
|
p := NewProviderManager(ctx, mid, ds.NewMapDatastore())
|
||||||
|
|
||||||
peers := []peer.ID{"a", "b"}
|
peers := []peer.ID{"a", "b"}
|
||||||
var keys []key.Key
|
var cids []*cid.Cid
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
k := key.Key(i)
|
c := cid.NewCidV0(u.Hash([]byte(fmt.Sprint(i))))
|
||||||
keys = append(keys, k)
|
cids = append(cids, c)
|
||||||
p.AddProvider(ctx, k, peers[0])
|
p.AddProvider(ctx, c, peers[0])
|
||||||
p.AddProvider(ctx, k, peers[1])
|
p.AddProvider(ctx, c, peers[1])
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
out := p.GetProviders(ctx, keys[i])
|
out := p.GetProviders(ctx, cids[i])
|
||||||
if len(out) != 2 {
|
if len(out) != 2 {
|
||||||
t.Fatal("expected providers to still be there")
|
t.Fatal("expected providers to still be there")
|
||||||
}
|
}
|
||||||
@ -128,9 +129,9 @@ func TestProvidesExpire(t *testing.T) {
|
|||||||
|
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
out := p.GetProviders(ctx, keys[i])
|
out := p.GetProviders(ctx, cids[i])
|
||||||
if len(out) > 2 {
|
if len(out) > 0 {
|
||||||
t.Fatal("expected providers to be cleaned up")
|
t.Fatal("expected providers to be cleaned up, got: ", out)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user