Skip to content

Commit

Permalink
Only cache non-leaf nodes.
Browse files Browse the repository at this point in the history
License: MIT
Signed-off-by: Kevin Atkinson <[email protected]>
  • Loading branch information
kevina committed Jul 6, 2016
1 parent 78620e9 commit 554da97
Showing 1 changed file with 9 additions and 10 deletions.
19 changes: 9 additions & 10 deletions merkledag/merkledag_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,28 +29,27 @@ func CloneNode(nd * Node) *Node {

func (ds *dagCache) Add(node *Node) (key.Key, error) {
key, err := ds.DAGService.Add(node)
if err != nil {
if err == nil && len(node.Links) > 0 {
ds.cache.Add(key, CloneNode(node))
//println("cache add", key.String())
return key, err
}
ds.cache.Add(key, CloneNode(node))
//println("cache add", key.String())
return key, err
}

// Get retrieves a node from the dagService, fetching the block in the BlockService
func (ds *dagCache) Get(ctx context.Context, k key.Key) (*Node, error) {
//return ds.DAGService.Get(ctx, k)
if node, ok := ds.cache.Get(k); ok {
//println("cache hit", k.String())
println("cache hit", k.String())
return CloneNode(node.(*Node)), nil
}
//println("cache miss", k.String())
node, err := ds.DAGService.Get(ctx, k)
if err != nil {
return nil, err
if err == nil && len(node.Links) > 0 {
println("cache miss", k.String())
ds.cache.Add(k, CloneNode(node))
}
ds.cache.Add(k, CloneNode(node))
return node, nil
return node, err
}

func (ds *dagCache) GetMany(ctx context.Context, keys []key.Key) <-chan *NodeOption {
Expand All @@ -75,7 +74,7 @@ func (ds *dagCache) GetMany(ctx context.Context, keys []key.Key) <-chan *NodeOpt
for n := range dags {
if n.Err == nil && n.Node != nil {
key, err := n.Node.Key()
if err == nil {
if err == nil && len(n.Node.Links) > 0 {
ds.cache.Add(key, CloneNode(n.Node))
}
}
Expand Down

0 comments on commit 554da97

Please sign in to comment.