@cryptotaxi247 / kubo / commits / de5c0ceff

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 <rhtbot@gmail.com>

rht committed Aug 23, 2015 at 22:12 UTC de5c0ceff0857ee3ee4be85785b3253c0ef98c28
13 files changed +16 -53
core/commands/ls.go
+1 -5
@@ -6,8 +6,6 @@ import (
6 "io"
7 "text/tabwriter"
8
9 - context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
10 -
9 cmds "github.com/ipfs/go-ipfs/commands"
10 core "github.com/ipfs/go-ipfs/core"
11 merkledag "github.com/ipfs/go-ipfs/merkledag"
@@ -80,9 +78,7 @@ it contains, with the following format:
78 Links: make([]LsLink, len(dagnode.Links)),
79 }
80 for j, link := range dagnode.Links {
83 - ctx, cancel := context.WithCancel(req.Context())
84 - defer cancel()
85 - link.Node, err = link.GetNode(ctx, node.DAG)
81 + link.Node, err = link.GetNode(req.Context(), node.DAG)
82 if err != nil {
83 res.SetError(err, cmds.ErrNormal)
84 return
core/commands/object.go
+1 -6
@@ -9,10 +9,8 @@ import (
9 "io/ioutil"
10 "strings"
11 "text/tabwriter"
12 - "time"
12
13 mh "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash"
15 - context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
14
15 key "github.com/ipfs/go-ipfs/blocks/key"
16 cmds "github.com/ipfs/go-ipfs/commands"
@@ -480,14 +478,11 @@ resulting object hash.
478 return
479 }
480
483 - ctx, cancel := context.WithTimeout(req.Context(), time.Second*30)
484 - rnode, err := nd.DAG.Get(ctx, rhash)
481 + rnode, err := nd.DAG.Get(req.Context(), rhash)
482 if err != nil {
483 res.SetError(err, cmds.ErrNormal)
487 - cancel()
484 return
485 }
490 - cancel()
486
487 action := req.Arguments()[1]
488
core/commands/unixfs/ls.go
+1 -5
@@ -7,8 +7,6 @@ import (
7 "sort"
8 "text/tabwriter"
9
10 - context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
11 -
10 cmds "github.com/ipfs/go-ipfs/commands"
11 core "github.com/ipfs/go-ipfs/core"
12 path "github.com/ipfs/go-ipfs/path"
@@ -110,9 +108,7 @@ size is the IPFS link size.
108 links := make([]LsLink, len(merkleNode.Links))
109 output.Objects[hash].Links = links
110 for i, link := range merkleNode.Links {
113 - getCtx, cancel := context.WithCancel(ctx)
114 - defer cancel()
115 - link.Node, err = link.GetNode(getCtx, node.DAG)
111 + link.Node, err = link.GetNode(ctx, node.DAG)
112 if err != nil {
113 res.SetError(err, cmds.ErrNormal)
114 return
core/corehttp/gateway_handler.go
+2 -4
@@ -367,8 +367,7 @@ func (i *gatewayHandler) putHandler(w http.ResponseWriter, r *http.Request) {
367 }
368 }
369
370 - err = i.node.DAG.AddRecursive(newnode)
371 - if err != nil {
370 + if err := i.node.DAG.AddRecursive(newnode); err != nil {
371 webError(w, "Could not add recursively new node", err, http.StatusInternalServerError)
372 return
373 }
@@ -439,8 +438,7 @@ func (i *gatewayHandler) deleteHandler(w http.ResponseWriter, r *http.Request) {
438 }
439 }
440
442 - err = i.node.DAG.AddRecursive(newnode)
443 - if err != nil {
441 + if err := i.node.DAG.AddRecursive(newnode); err != nil {
442 webError(w, "Could not add recursively new node", err, http.StatusInternalServerError)
443 return
444 }
core/coreunix/metadata.go
+3 -10
@@ -1,8 +1,6 @@
1 package coreunix
2
3 import (
4 - context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
5 -
4 key "github.com/ipfs/go-ipfs/blocks/key"
5 core "github.com/ipfs/go-ipfs/core"
6 dag "github.com/ipfs/go-ipfs/merkledag"
@@ -12,9 +10,7 @@ import (
10 func AddMetadataTo(n *core.IpfsNode, skey string, m *ft.Metadata) (string, error) {
11 ukey := key.B58KeyDecode(skey)
12
15 - ctx, cancel := context.WithCancel(n.Context())
16 - defer cancel()
17 - nd, err := n.DAG.Get(ctx, ukey)
13 + nd, err := n.DAG.Get(n.Context(), ukey)
14 if err != nil {
15 return "", err
16 }
@@ -26,8 +22,7 @@ func AddMetadataTo(n *core.IpfsNode, skey string, m *ft.Metadata) (string, error
22 }
23
24 mdnode.Data = mdata
29 - err = mdnode.AddNodeLinkClean("file", nd)
30 - if err != nil {
25 + if err := mdnode.AddNodeLinkClean("file", nd); err != nil {
26 return "", err
27 }
28
@@ -42,9 +37,7 @@ func AddMetadataTo(n *core.IpfsNode, skey string, m *ft.Metadata) (string, error
37 func Metadata(n *core.IpfsNode, skey string) (*ft.Metadata, error) {
38 ukey := key.B58KeyDecode(skey)
39
45 - ctx, cancel := context.WithCancel(n.Context())
46 - defer cancel()
47 - nd, err := n.DAG.Get(ctx, ukey)
40 + nd, err := n.DAG.Get(n.Context(), ukey)
41 if err != nil {
42 return nil, err
43 }
importer/trickle/trickledag.go
+1 -4
@@ -2,7 +2,6 @@ package trickle
2
3 import (
4 "errors"
5 - "time"
5
6 context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
7
@@ -268,9 +267,7 @@ func verifyTDagRec(nd *dag.Node, depth, direct, layerRepeat int, ds dag.DAGServi
267 }
268
269 for i := 0; i < len(nd.Links); i++ {
271 - ctx, cancel := context.WithTimeout(context.TODO(), time.Minute)
272 - defer cancel()
273 - child, err := nd.Links[i].GetNode(ctx, ds)
270 + child, err := nd.Links[i].GetNode(context.TODO(), ds)
271 if err != nil {
272 return err
273 }
ipnsfs/dir.go
+1 -4
@@ -139,10 +139,7 @@ func (d *Directory) childDir(name string) (*Directory, error) {
139 func (d *Directory) childFromDag(name string) (*dag.Node, error) {
140 for _, lnk := range d.node.Links {
141 if lnk.Name == name {
142 - ctx, cancel := context.WithCancel(d.ctx)
143 - defer cancel()
144 -
145 - return lnk.GetNode(ctx, d.fs.dserv)
142 + return lnk.GetNode(d.ctx, d.fs.dserv)
143 }
144 }
145
merkledag/merkledag.go
+2
@@ -93,6 +93,8 @@ func (n *dagService) Get(ctx context.Context, k key.Key) (*Node, error) {
93 if n == nil {
94 return nil, fmt.Errorf("dagService is nil")
95 }
96 + ctx, cancel := context.WithCancel(ctx)
97 + defer cancel()
98
99 b, err := n.Blocks.GetBlock(ctx, k)
100 if err != nil {
merkledag/traverse/traverse.go
+1 -5
@@ -3,7 +3,6 @@ package traverse
3
4 import (
5 "errors"
6 - "time"
6
7 "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
8
@@ -67,10 +66,7 @@ func (t *traversal) callFunc(next State) error {
66 func (t *traversal) getNode(link *mdag.Link) (*mdag.Node, error) {
67
68 getNode := func(l *mdag.Link) (*mdag.Node, error) {
70 - ctx, cancel := context.WithTimeout(context.TODO(), time.Minute)
71 - defer cancel()
72 -
73 - next, err := l.GetNode(ctx, t.opts.DAG)
69 + next, err := l.GetNode(context.TODO(), t.opts.DAG)
70 if err != nil {
71 return nil, err
72 }
merkledag/utils/utils.go
+1 -2
@@ -52,8 +52,7 @@ func addLink(ctx context.Context, ds dag.DAGService, root *dag.Node, childname s
52 return nil, err
53 }
54
55 - _, err = ds.Add(root)
56 - if err != nil {
55 + if _, err := ds.Add(root); err != nil {
56 return nil, err
57 }
58 return root, nil
path/resolver.go
-2
@@ -87,8 +87,6 @@ func (s *Resolver) ResolvePathComponents(ctx context.Context, fpath Path) ([]*me
87 }
88
89 log.Debug("Resolve dag get.")
90 - ctx, cancel := context.WithCancel(ctx)
91 - defer cancel()
90 nd, err := s.DAG.Get(ctx, key.Key(h))
91 if err != nil {
92 return nil, err
pin/pin.go
+1 -2
@@ -106,8 +106,7 @@ func (p *pinner) Pin(ctx context.Context, node *mdag.Node, recurse bool) error {
106
107 p.recursePin.AddBlock(k)
108 } else {
109 - _, err := p.dserv.Get(ctx, k)
110 - if err != nil {
109 + if _, err := p.dserv.Get(ctx, k); err != nil {
110 return err
111 }
112
unixfs/mod/dagmodifier.go
+1 -4
@@ -459,9 +459,6 @@ func dagTruncate(ctx context.Context, nd *mdag.Node, size uint64, ds mdag.DAGSer
459 var modified *mdag.Node
460 ndata := new(ft.FSNode)
461 for i, lnk := range nd.Links {
462 - _ctx, cancel := context.WithCancel(ctx)
463 - defer cancel()
464 -
462 child, err := lnk.GetNode(ctx, ds)
463 if err != nil {
464 return nil, err
@@ -474,7 +471,7 @@ func dagTruncate(ctx context.Context, nd *mdag.Node, size uint64, ds mdag.DAGSer
471
472 // found the child we want to cut
473 if size < cur+childsize {
477 - nchild, err := dagTruncate(_ctx, child, size-cur, ds)
474 + nchild, err := dagTruncate(ctx, child, size-cur, ds)
475 if err != nil {
476 return nil, err
477 }