mirror of
https://github.com/ipfs/kubo.git
synced 2025-07-01 10:49:24 +08:00
Merge pull request #3509 from ipfs/fix/namesys/dht-cache-panic
namesys: fix case where there is no cache
This commit is contained in:
@ -107,6 +107,16 @@ func (ns *mpns) PublishWithEOL(ctx context.Context, name ci.PrivKey, value path.
|
||||
}
|
||||
|
||||
func (ns *mpns) addToDHTCache(key ci.PrivKey, value path.Path, eol time.Time) {
|
||||
rr, ok := ns.resolvers["dht"].(*routingResolver)
|
||||
if !ok {
|
||||
// should never happen, purely for sanity
|
||||
log.Panicf("unexpected type %T as DHT resolver.", ns.resolvers["dht"])
|
||||
}
|
||||
if rr.cache == nil {
|
||||
// resolver has no caching
|
||||
return
|
||||
}
|
||||
|
||||
var err error
|
||||
value, err = path.ParsePath(value.String())
|
||||
if err != nil {
|
||||
@ -120,11 +130,6 @@ func (ns *mpns) addToDHTCache(key ci.PrivKey, value path.Path, eol time.Time) {
|
||||
return
|
||||
}
|
||||
|
||||
rr, ok := ns.resolvers["dht"].(*routingResolver)
|
||||
if !ok {
|
||||
// should never happen, purely for sanity
|
||||
log.Panicf("unexpected type %T as DHT resolver.", ns.resolvers["dht"])
|
||||
}
|
||||
if time.Now().Add(DefaultResolverCacheTTL).Before(eol) {
|
||||
eol = time.Now().Add(DefaultResolverCacheTTL)
|
||||
}
|
||||
|
@ -7,6 +7,11 @@ import (
|
||||
context "context"
|
||||
|
||||
path "github.com/ipfs/go-ipfs/path"
|
||||
offroute "github.com/ipfs/go-ipfs/routing/offline"
|
||||
"github.com/ipfs/go-ipfs/unixfs"
|
||||
|
||||
ds "gx/ipfs/QmRWDav6mzWseLWeYfVd5fvUKiVe9xNH29YfMF438fG364/go-datastore"
|
||||
ci "gx/ipfs/QmfWDLQjGjVe4fr5CoztYW2DYYjRysMJrFe1RCsXLPTf46/go-libp2p-crypto"
|
||||
)
|
||||
|
||||
type mockResolver struct {
|
||||
@ -69,3 +74,19 @@ func TestNamesysResolution(t *testing.T) {
|
||||
testResolution(t, r, "/ipns/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD", 2, "/ipns/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n", ErrResolveRecursion)
|
||||
testResolution(t, r, "/ipns/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD", 3, "/ipns/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy", ErrResolveRecursion)
|
||||
}
|
||||
|
||||
func TestPublishWithCache0(t *testing.T) {
|
||||
dst := ds.NewMapDatastore()
|
||||
priv, _, err := ci.GenerateKeyPair(ci.RSA, 1024)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
routing := offroute.NewOfflineRouter(dst, priv)
|
||||
|
||||
nsys := NewNameSystem(routing, dst, 0)
|
||||
p, err := path.ParsePath(unixfs.EmptyDirNode().Cid().String())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
nsys.Publish(context.Background(), priv, p)
|
||||
}
|
||||
|
Reference in New Issue
Block a user