@cryptotaxi247 / kubo / commits / d8ee7dffc

improves memory usage of add

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Nov 13, 2015 at 09:55 UTC d8ee7dffc3a05ab2b4ec12a21637a9f5240660cf
3 files changed +18 -3
core/coreunix/add.go
+1 -1
@@ -317,7 +317,7 @@ func (params *Adder) addDir(dir files.File) (*merkledag.Node, error) {
317
318 name := gopath.Base(file.FileName())
319
320 - if err := tree.AddNodeLink(name, node); err != nil {
320 + if err := tree.AddNodeLinkClean(name, node); err != nil {
321 return nil, err
322 }
323 }
merkledag/merkledag.go
+11 -2
@@ -20,6 +20,7 @@ type DAGService interface {
20 AddRecursive(*Node) error
21 Get(context.Context, key.Key) (*Node, error)
22 Remove(*Node) error
23 + RemoveRecursive(*Node) error
24
25 // GetDAG returns, in order, all the single leve child
26 // nodes of the passed in node.
@@ -107,10 +108,10 @@ func (n *dagService) Get(ctx context.Context, k key.Key) (*Node, error) {
108 }
109
110 // Remove deletes the given node and all of its children from the BlockService
110 -func (n *dagService) Remove(nd *Node) error {
111 +func (n *dagService) RemoveRecursive(nd *Node) error {
112 for _, l := range nd.Links {
113 if l.Node != nil {
113 - n.Remove(l.Node)
114 + n.RemoveRecursive(l.Node)
115 }
116 }
117 k, err := nd.Key()
@@ -120,6 +121,14 @@ func (n *dagService) Remove(nd *Node) error {
121 return n.Blocks.DeleteBlock(k)
122 }
123
124 +func (n *dagService) Remove(nd *Node) error {
125 + k, err := nd.Key()
126 + if err != nil {
127 + return err
128 + }
129 + return n.Blocks.DeleteBlock(k)
130 +}
131 +
132 // FetchGraph fetches all nodes that are children of the given node
133 func FetchGraph(ctx context.Context, root *Node, serv DAGService) error {
134 return EnumerateChildrenAsync(ctx, serv, root, key.NewKeySet())
merkledag/utils/utils.go
+6
@@ -40,6 +40,8 @@ func addLink(ctx context.Context, ds dag.DAGService, root *dag.Node, childname s
40 return nil, err
41 }
42
43 + _ = ds.Remove(root)
44 +
45 // ensure no link with that name already exists
46 _ = root.RemoveNodeLink(childname) // ignore error, only option is ErrNotFound
47
@@ -83,6 +85,8 @@ func insertNodeAtPath(ctx context.Context, ds dag.DAGService, root *dag.Node, pa
85 return nil, err
86 }
87
88 + _ = ds.Remove(root)
89 +
90 _ = root.RemoveNodeLink(path[0])
91 err = root.AddNodeLinkClean(path[0], ndprime)
92 if err != nil {
@@ -133,6 +137,8 @@ func rmLink(ctx context.Context, ds dag.DAGService, root *dag.Node, path []strin
137 return nil, err
138 }
139
140 + _ = ds.Remove(root)
141 +
142 _ = root.RemoveNodeLink(path[0])
143 err = root.AddNodeLinkClean(path[0], nnode)
144 if err != nil {