From c7c2e8e99072d214c4a27daf3b0fcbe1b385c7f1 Mon Sep 17 00:00:00 2001 From: Nick Johnson Date: Fri, 23 Sep 2016 07:01:48 +0800 Subject: [PATCH] Add trie caching for misses --- trie/trie.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/trie/trie.go b/trie/trie.go index a530e7b2a3..6f64a67182 100644 --- a/trie/trie.go +++ b/trie/trie.go @@ -410,11 +410,16 @@ func (t *Trie) resolve(n node, prefix, suffix []byte) (node, error) { } func (t *Trie) resolveHash(n hashNode, prefix, suffix []byte) (node, error) { - if v, ok := globalCache.Get(n); ok { - return v, nil + var v node = nil + var ok bool + if v, ok = globalCache.Get(n); !ok { + enc, err := t.db.Get(n) + if err == nil && enc != nil { + v = mustDecodeNode(n, enc) + } + globalCache.Put(n, v) } - enc, err := t.db.Get(n) - if err != nil || enc == nil { + if v == nil { return nil, &MissingNodeError{ RootHash: t.originalRoot, NodeHash: common.BytesToHash(n), @@ -423,11 +428,7 @@ func (t *Trie) resolveHash(n hashNode, prefix, suffix []byte) (node, error) { SuffixLen: len(suffix), } } - dec := mustDecodeNode(n, enc) - if dec != nil { - globalCache.Put(n, dec) - } - return dec, nil + return v, nil } // Root returns the root hash of the trie.