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
						Felix Lange
					
				
			
			
				
	
			
			
			
						parent
						
							8db8d074e2
						
					
				
				
					commit
					d926bf2c7e
				
			| @@ -1313,8 +1313,8 @@ func TestTrieForkGC(t *testing.T) { | ||||
| 	} | ||||
| 	// Dereference all the recent tries and ensure no past trie is left in | ||||
| 	for i := 0; i < triesInMemory; i++ { | ||||
| 		chain.stateCache.TrieDB().Dereference(blocks[len(blocks)-1-i].Root(), common.Hash{}) | ||||
| 		chain.stateCache.TrieDB().Dereference(forks[len(blocks)-1-i].Root(), common.Hash{}) | ||||
| 		chain.stateCache.TrieDB().Dereference(blocks[len(blocks)-1-i].Root()) | ||||
| 		chain.stateCache.TrieDB().Dereference(forks[len(blocks)-1-i].Root()) | ||||
| 	} | ||||
| 	if len(chain.stateCache.TrieDB().Nodes()) > 0 { | ||||
| 		t.Fatalf("stale tries still alive after garbase collection") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user