Commit fb646c2c authored by Mildred Ki'Lya's avatar Mildred Ki'Lya

Remove usage of merkledag.Link.Node pointer outside of merkledag

This prepares for inclusion of IPLD where the Node pointer won't be there.

License: MIT
Signed-off-by: default avatarMildred Ki'Lya <mildred-pub.git@mildred.fr>
parent bfdc7966
...@@ -2,6 +2,7 @@ package merkledag ...@@ -2,6 +2,7 @@ package merkledag
import ( import (
"fmt" "fmt"
"time"
"gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context"
...@@ -85,6 +86,26 @@ func (l *Link) GetNode(ctx context.Context, serv DAGService) (*Node, error) { ...@@ -85,6 +86,26 @@ func (l *Link) GetNode(ctx context.Context, serv DAGService) (*Node, error) {
return serv.Get(ctx, key.Key(l.Hash)) return serv.Get(ctx, key.Key(l.Hash))
} }
// GetNodeAndCache return the MDAG Node that the link points to and store a
// pointer to that node along with the link to speed up further retrivals. A
// timeout is to be specified to avoid taking too much time.
func (l *Link) GetNodeAndCache(ctx context.Context, serv DAGService, timeout time.Duration) (*Node, error) {
if l.Node == nil {
if timeout != 0 {
var cancel context.CancelFunc
ctx, cancel = context.WithTimeout(ctx, time.Minute)
defer cancel()
}
nd, err := serv.Get(ctx, key.Key(l.Hash))
if err != nil {
return nil, err
}
l.Node = nd
}
return l.Node, nil
}
// AddNodeLink adds a link to another node. // AddNodeLink adds a link to another node.
func (n *Node) AddNodeLink(name string, that *Node) error { func (n *Node) AddNodeLink(name string, that *Node) error {
n.encoded = nil n.encoded = nil
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment