diff --git a/namesys/namesys.go b/namesys/namesys.go index d2f4a3bf7a06..ca6d64ad0827 100644 --- a/namesys/namesys.go +++ b/namesys/namesys.go @@ -1,13 +1,15 @@ package namesys import ( + "context" "strings" "time" - context "context" path "github.com/ipfs/go-ipfs/path" + ds "gx/ipfs/QmRWDav6mzWseLWeYfVd5fvUKiVe9xNH29YfMF438fG364/go-datastore" routing "gx/ipfs/QmbkGVaN9W6RYJK4Ws5FvMKXKDqdRQ5snhtaa92qP6L8eU/go-libp2p-routing" + peer "gx/ipfs/QmfMmLGoKzCHDN7cGgk64PJr4iipzidDRME8HABSJqvmhC/go-libp2p-peer" ci "gx/ipfs/QmfWDLQjGjVe4fr5CoztYW2DYYjRysMJrFe1RCsXLPTf46/go-libp2p-crypto" ) @@ -87,9 +89,36 @@ func (ns *mpns) resolveOnce(ctx context.Context, name string) (path.Path, error) // Publish implements Publisher func (ns *mpns) Publish(ctx context.Context, name ci.PrivKey, value path.Path) error { - return ns.publishers["/ipns/"].Publish(ctx, name, value) + err := ns.publishers["/ipns/"].Publish(ctx, name, value) + if err != nil { + return err + } + ns.addToDHTCache(name, value, time.Now().Add(time.Hour*24)) + return nil +} + +func (ns *mpns) PublishWithEOL(ctx context.Context, name ci.PrivKey, value path.Path, eol time.Time) error { + err := ns.publishers["/ipns/"].PublishWithEOL(ctx, name, value, eol) + if err != nil { + return err + } + ns.addToDHTCache(name, value, eol) + return nil } -func (ns *mpns) PublishWithEOL(ctx context.Context, name ci.PrivKey, val path.Path, eol time.Time) error { - return ns.publishers["/ipns/"].PublishWithEOL(ctx, name, val, eol) +func (ns *mpns) addToDHTCache(key ci.PrivKey, value path.Path, eol time.Time) { + name, err := peer.IDFromPrivateKey(key) + if err != nil { + log.Error("while adding to cache, could not get peerid from private key") + } + + 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"]) + } + rr.cache.Add(name.Pretty(), cacheEntry{ + val: value, + eol: eol, + }) }