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
}