提交 1f820dc2 作者: Mildred Ki'Lya

path/resolver.go: Handle timeout here

License: MIT
Signed-off-by: 's avatarMildred Ki'Lya <mildred-pub.git@mildred.fr>
上级 5808fe2e
...@@ -2,7 +2,6 @@ package merkledag ...@@ -2,7 +2,6 @@ package merkledag
import ( import (
"fmt" "fmt"
"time"
"gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context"
...@@ -77,6 +76,11 @@ func MakeLink(n *Node) (*Link, error) { ...@@ -77,6 +76,11 @@ func MakeLink(n *Node) (*Link, error) {
}, nil }, nil
} }
// GetCachedNode returns the MDAG Node that was cached, or nil
func (l *Link) GetCachedNode() *Node {
return l.Node
}
// GetNode returns the MDAG Node that this link points to // GetNode returns the MDAG Node that this link points to
func (l *Link) GetNode(ctx context.Context, serv DAGService) (*Node, error) { func (l *Link) GetNode(ctx context.Context, serv DAGService) (*Node, error) {
if l.Node != nil { if l.Node != nil {
...@@ -89,13 +93,8 @@ func (l *Link) GetNode(ctx context.Context, serv DAGService) (*Node, error) { ...@@ -89,13 +93,8 @@ func (l *Link) GetNode(ctx context.Context, serv DAGService) (*Node, error) {
// GetNodeAndCache return the MDAG Node that the link points to and store a // 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 // 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. // 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) { func (l *Link) GetNodeAndCache(ctx context.Context, serv DAGService) (*Node, error) {
if l.Node == nil { 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)) nd, err := serv.Get(ctx, key.Key(l.Hash))
if err != nil { if err != nil {
return nil, err return nil, err
......
...@@ -125,8 +125,14 @@ func (s *Resolver) ResolveLinks(ctx context.Context, ndd *merkledag.Node, names ...@@ -125,8 +125,14 @@ func (s *Resolver) ResolveLinks(ctx context.Context, ndd *merkledag.Node, names
return result, ErrNoLink{Name: name, Node: n} return result, ErrNoLink{Name: name, Node: n}
} }
if nlink.GetCachedNode() == nil {
var cancel context.CancelFunc
ctx, cancel = context.WithTimeout(ctx, time.Minute)
defer cancel()
}
var err error var err error
nd, err = nlink.GetNodeAndCache(ctx, s.DAG, time.Minute) nd, err = nlink.GetNodeAndCache(ctx, s.DAG)
if err != nil { if err != nil {
return append(result, nd), err return append(result, nd), err
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论