trie: cache collapsed tries node, not rlp blobs (#16876)
The current trie memory database/cache that we do pruning on stores trie nodes as binary rlp encoded blobs, and also stores the node relationships/references for GC purposes. However, most of the trie nodes (everything apart from a value node) is in essence just a collection of references. This PR switches out the RLP encoded trie blobs with the collapsed-but-not-serialized trie nodes. This permits most of the references to be recovered from within the node data structure, avoiding the need to track them a second time (expensive memory wise).
This commit is contained in:
committed by
Felix Lange
parent
8db8d074e2
commit
d926bf2c7e
@ -433,12 +433,10 @@ func (t *Trie) resolveHash(n hashNode, prefix []byte) (node, error) {
|
||||
cacheMissCounter.Inc(1)
|
||||
|
||||
hash := common.BytesToHash(n)
|
||||
|
||||
enc, err := t.db.Node(hash)
|
||||
if err != nil || enc == nil {
|
||||
return nil, &MissingNodeError{NodeHash: hash, Path: prefix}
|
||||
if node := t.db.node(hash, t.cachegen); node != nil {
|
||||
return node, nil
|
||||
}
|
||||
return mustDecodeNode(n, enc, t.cachegen), nil
|
||||
return nil, &MissingNodeError{NodeHash: hash, Path: prefix}
|
||||
}
|
||||
|
||||
// Root returns the root hash of the trie.
|
||||
|
Reference in New Issue
Block a user