From de5c0ceff0857ee3ee4be85785b3253c0ef98c28 Mon Sep 17 00:00:00 2001 From: rht Date: Sun, 23 Aug 2015 22:12:23 +0700 Subject: [PATCH] Localize the scope of context.WithCancel for every DAG.Get Instead put it inside of DAG.Get. The fix is applied only in the case when the context.WithCancel before a DAG.Get is also used later on in the scope. License: MIT Signed-off-by: rht --- core/commands/ls.go | 6 +----- core/commands/object.go | 7 +------ core/commands/unixfs/ls.go | 6 +----- core/corehttp/gateway_handler.go | 6 ++---- core/coreunix/metadata.go | 13 +++---------- importer/trickle/trickledag.go | 5 +---- ipnsfs/dir.go | 5 +---- merkledag/merkledag.go | 2 ++ merkledag/traverse/traverse.go | 6 +----- merkledag/utils/utils.go | 3 +-- path/resolver.go | 2 -- pin/pin.go | 3 +-- unixfs/mod/dagmodifier.go | 5 +---- 13 files changed, 16 insertions(+), 53 deletions(-) diff --git a/core/commands/ls.go b/core/commands/ls.go index 01408e2da..f44d505ce 100644 --- a/core/commands/ls.go +++ b/core/commands/ls.go @@ -6,8 +6,6 @@ import ( "io" "text/tabwriter" - context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context" - cmds "github.com/ipfs/go-ipfs/commands" core "github.com/ipfs/go-ipfs/core" merkledag "github.com/ipfs/go-ipfs/merkledag" @@ -80,9 +78,7 @@ it contains, with the following format: Links: make([]LsLink, len(dagnode.Links)), } for j, link := range dagnode.Links { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - link.Node, err = link.GetNode(ctx, node.DAG) + link.Node, err = link.GetNode(req.Context(), node.DAG) if err != nil { res.SetError(err, cmds.ErrNormal) return diff --git a/core/commands/object.go b/core/commands/object.go index bb066a740..126169ad8 100644 --- a/core/commands/object.go +++ b/core/commands/object.go @@ -9,10 +9,8 @@ import ( "io/ioutil" "strings" "text/tabwriter" - "time" mh "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash" - context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context" key "github.com/ipfs/go-ipfs/blocks/key" cmds "github.com/ipfs/go-ipfs/commands" @@ -480,14 +478,11 @@ resulting object hash. return } - ctx, cancel := context.WithTimeout(req.Context(), time.Second*30) - rnode, err := nd.DAG.Get(ctx, rhash) + rnode, err := nd.DAG.Get(req.Context(), rhash) if err != nil { res.SetError(err, cmds.ErrNormal) - cancel() return } - cancel() action := req.Arguments()[1] diff --git a/core/commands/unixfs/ls.go b/core/commands/unixfs/ls.go index 2cd7e7686..482518a69 100644 --- a/core/commands/unixfs/ls.go +++ b/core/commands/unixfs/ls.go @@ -7,8 +7,6 @@ import ( "sort" "text/tabwriter" - context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context" - cmds "github.com/ipfs/go-ipfs/commands" core "github.com/ipfs/go-ipfs/core" path "github.com/ipfs/go-ipfs/path" @@ -110,9 +108,7 @@ size is the IPFS link size. links := make([]LsLink, len(merkleNode.Links)) output.Objects[hash].Links = links for i, link := range merkleNode.Links { - getCtx, cancel := context.WithCancel(ctx) - defer cancel() - link.Node, err = link.GetNode(getCtx, node.DAG) + link.Node, err = link.GetNode(ctx, node.DAG) if err != nil { res.SetError(err, cmds.ErrNormal) return diff --git a/core/corehttp/gateway_handler.go b/core/corehttp/gateway_handler.go index 154db3b53..fccc10d0d 100644 --- a/core/corehttp/gateway_handler.go +++ b/core/corehttp/gateway_handler.go @@ -367,8 +367,7 @@ func (i *gatewayHandler) putHandler(w http.ResponseWriter, r *http.Request) { } } - err = i.node.DAG.AddRecursive(newnode) - if err != nil { + if err := i.node.DAG.AddRecursive(newnode); err != nil { webError(w, "Could not add recursively new node", err, http.StatusInternalServerError) return } @@ -439,8 +438,7 @@ func (i *gatewayHandler) deleteHandler(w http.ResponseWriter, r *http.Request) { } } - err = i.node.DAG.AddRecursive(newnode) - if err != nil { + if err := i.node.DAG.AddRecursive(newnode); err != nil { webError(w, "Could not add recursively new node", err, http.StatusInternalServerError) return } diff --git a/core/coreunix/metadata.go b/core/coreunix/metadata.go index 426bdf2e1..e3f392aad 100644 --- a/core/coreunix/metadata.go +++ b/core/coreunix/metadata.go @@ -1,8 +1,6 @@ package coreunix import ( - context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context" - key "github.com/ipfs/go-ipfs/blocks/key" core "github.com/ipfs/go-ipfs/core" dag "github.com/ipfs/go-ipfs/merkledag" @@ -12,9 +10,7 @@ import ( func AddMetadataTo(n *core.IpfsNode, skey string, m *ft.Metadata) (string, error) { ukey := key.B58KeyDecode(skey) - ctx, cancel := context.WithCancel(n.Context()) - defer cancel() - nd, err := n.DAG.Get(ctx, ukey) + nd, err := n.DAG.Get(n.Context(), ukey) if err != nil { return "", err } @@ -26,8 +22,7 @@ func AddMetadataTo(n *core.IpfsNode, skey string, m *ft.Metadata) (string, error } mdnode.Data = mdata - err = mdnode.AddNodeLinkClean("file", nd) - if err != nil { + if err := mdnode.AddNodeLinkClean("file", nd); err != nil { return "", err } @@ -42,9 +37,7 @@ func AddMetadataTo(n *core.IpfsNode, skey string, m *ft.Metadata) (string, error func Metadata(n *core.IpfsNode, skey string) (*ft.Metadata, error) { ukey := key.B58KeyDecode(skey) - ctx, cancel := context.WithCancel(n.Context()) - defer cancel() - nd, err := n.DAG.Get(ctx, ukey) + nd, err := n.DAG.Get(n.Context(), ukey) if err != nil { return nil, err } diff --git a/importer/trickle/trickledag.go b/importer/trickle/trickledag.go index 7dbdd18f3..1b37e1d1d 100644 --- a/importer/trickle/trickledag.go +++ b/importer/trickle/trickledag.go @@ -2,7 +2,6 @@ package trickle import ( "errors" - "time" context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context" @@ -268,9 +267,7 @@ func verifyTDagRec(nd *dag.Node, depth, direct, layerRepeat int, ds dag.DAGServi } for i := 0; i < len(nd.Links); i++ { - ctx, cancel := context.WithTimeout(context.TODO(), time.Minute) - defer cancel() - child, err := nd.Links[i].GetNode(ctx, ds) + child, err := nd.Links[i].GetNode(context.TODO(), ds) if err != nil { return err } diff --git a/ipnsfs/dir.go b/ipnsfs/dir.go index ba203bd92..a7e264f96 100644 --- a/ipnsfs/dir.go +++ b/ipnsfs/dir.go @@ -139,10 +139,7 @@ func (d *Directory) childDir(name string) (*Directory, error) { func (d *Directory) childFromDag(name string) (*dag.Node, error) { for _, lnk := range d.node.Links { if lnk.Name == name { - ctx, cancel := context.WithCancel(d.ctx) - defer cancel() - - return lnk.GetNode(ctx, d.fs.dserv) + return lnk.GetNode(d.ctx, d.fs.dserv) } } diff --git a/merkledag/merkledag.go b/merkledag/merkledag.go index bf8dc1310..c93b5a23b 100644 --- a/merkledag/merkledag.go +++ b/merkledag/merkledag.go @@ -93,6 +93,8 @@ func (n *dagService) Get(ctx context.Context, k key.Key) (*Node, error) { if n == nil { return nil, fmt.Errorf("dagService is nil") } + ctx, cancel := context.WithCancel(ctx) + defer cancel() b, err := n.Blocks.GetBlock(ctx, k) if err != nil { diff --git a/merkledag/traverse/traverse.go b/merkledag/traverse/traverse.go index b00307364..aa71ad2f2 100644 --- a/merkledag/traverse/traverse.go +++ b/merkledag/traverse/traverse.go @@ -3,7 +3,6 @@ package traverse import ( "errors" - "time" "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context" @@ -67,10 +66,7 @@ func (t *traversal) callFunc(next State) error { func (t *traversal) getNode(link *mdag.Link) (*mdag.Node, error) { getNode := func(l *mdag.Link) (*mdag.Node, error) { - ctx, cancel := context.WithTimeout(context.TODO(), time.Minute) - defer cancel() - - next, err := l.GetNode(ctx, t.opts.DAG) + next, err := l.GetNode(context.TODO(), t.opts.DAG) if err != nil { return nil, err } diff --git a/merkledag/utils/utils.go b/merkledag/utils/utils.go index a7e87f052..b073d4bf7 100644 --- a/merkledag/utils/utils.go +++ b/merkledag/utils/utils.go @@ -52,8 +52,7 @@ func addLink(ctx context.Context, ds dag.DAGService, root *dag.Node, childname s return nil, err } - _, err = ds.Add(root) - if err != nil { + if _, err := ds.Add(root); err != nil { return nil, err } return root, nil diff --git a/path/resolver.go b/path/resolver.go index 5740e829e..275d2b7d4 100644 --- a/path/resolver.go +++ b/path/resolver.go @@ -87,8 +87,6 @@ func (s *Resolver) ResolvePathComponents(ctx context.Context, fpath Path) ([]*me } log.Debug("Resolve dag get.") - ctx, cancel := context.WithCancel(ctx) - defer cancel() nd, err := s.DAG.Get(ctx, key.Key(h)) if err != nil { return nil, err diff --git a/pin/pin.go b/pin/pin.go index 8f2d4b820..3d51b7a06 100644 --- a/pin/pin.go +++ b/pin/pin.go @@ -106,8 +106,7 @@ func (p *pinner) Pin(ctx context.Context, node *mdag.Node, recurse bool) error { p.recursePin.AddBlock(k) } else { - _, err := p.dserv.Get(ctx, k) - if err != nil { + if _, err := p.dserv.Get(ctx, k); err != nil { return err } diff --git a/unixfs/mod/dagmodifier.go b/unixfs/mod/dagmodifier.go index 6ea761989..8d97bddfc 100644 --- a/unixfs/mod/dagmodifier.go +++ b/unixfs/mod/dagmodifier.go @@ -459,9 +459,6 @@ func dagTruncate(ctx context.Context, nd *mdag.Node, size uint64, ds mdag.DAGSer var modified *mdag.Node ndata := new(ft.FSNode) for i, lnk := range nd.Links { - _ctx, cancel := context.WithCancel(ctx) - defer cancel() - child, err := lnk.GetNode(ctx, ds) if err != nil { return nil, err @@ -474,7 +471,7 @@ func dagTruncate(ctx context.Context, nd *mdag.Node, size uint64, ds mdag.DAGSer // found the child we want to cut if size < cur+childsize { - nchild, err := dagTruncate(_ctx, child, size-cur, ds) + nchild, err := dagTruncate(ctx, child, size-cur, ds) if err != nil { return nil, err }