public void Dispatcher_will_try_to_clear_memory_the_soonest_possible() { TrieNode trieNode1 = new TrieNode(NodeType.Leaf, new byte[0]); trieNode1.ResolveKey(null !, true); TrieNode trieNode2 = new TrieNode(NodeType.Leaf, new byte[1]); trieNode2.ResolveKey(null !, true); TrieNode trieNode3 = new TrieNode(NodeType.Leaf, new byte[2]); trieNode3.ResolveKey(null !, true); TrieNode trieNode4 = new TrieNode(NodeType.Leaf, new byte[3]); trieNode4.ResolveKey(null !, true); TrieStore trieStore = new TrieStore(new MemDb(), new MemoryLimit(512), No.Persistence, _logManager); trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1)); trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2)); trieStore.FinishBlockCommit(TrieType.State, 1234, trieNode2); trieStore.CommitNode(1235, new NodeCommitInfo(trieNode3)); trieStore.CommitNode(1235, new NodeCommitInfo(trieNode4)); trieStore.MemoryUsedByDirtyCache.Should().Be( trieNode1.GetMemorySize(false) + trieNode2.GetMemorySize(false) + trieNode3.GetMemorySize(false) + trieNode4.GetMemorySize(false)); }
public void Memory_with_two_nodes_is_correct() { TrieNode trieNode1 = new TrieNode(NodeType.Leaf, TestItem.KeccakA); TrieNode trieNode2 = new TrieNode(NodeType.Leaf, TestItem.KeccakB); TrieStore trieStore = new TrieStore(new MemDb(), new TestPruningStrategy(true), No.Persistence, _logManager); trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1)); trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2)); trieStore.MemoryUsedByDirtyCache.Should().Be( trieNode1.GetMemorySize(false) + trieNode2.GetMemorySize(false)); }
public void Prunning_off_cache_should_not_change_commit_node() { TrieNode trieNode = new TrieNode(NodeType.Leaf, Keccak.Zero); TrieNode trieNode2 = new TrieNode(NodeType.Branch, TestItem.KeccakA); TrieNode trieNode3 = new TrieNode(NodeType.Branch, TestItem.KeccakB); TrieStore trieStore = new TrieStore(new MemDb(), No.Pruning, No.Persistence, _logManager); trieStore.CommitNode(1234, new NodeCommitInfo(trieNode)); trieStore.FinishBlockCommit(TrieType.State, 1234, trieNode); trieStore.CommitNode(124, new NodeCommitInfo(trieNode2)); trieStore.CommitNode(11234, new NodeCommitInfo(trieNode3)); trieStore.MemoryUsedByDirtyCache.Should().Be(0); }
public void Memory_with_one_node_is_288() { TrieNode trieNode = new TrieNode(NodeType.Leaf, Keccak.Zero); // 56B TrieStore trieStore = new TrieStore(new MemDb(), new TestPruningStrategy(true), No.Persistence, _logManager); trieStore.CommitNode(1234, new NodeCommitInfo(trieNode)); trieStore.MemoryUsedByDirtyCache.Should().Be( trieNode.GetMemorySize(false)); }
public void Memory_with_two_times_two_nodes_is_correct() { TrieNode trieNode1 = new TrieNode(NodeType.Leaf, TestItem.KeccakA); TrieNode trieNode2 = new TrieNode(NodeType.Leaf, TestItem.KeccakB); TrieNode trieNode3 = new TrieNode(NodeType.Leaf, TestItem.KeccakA); TrieNode trieNode4 = new TrieNode(NodeType.Leaf, TestItem.KeccakB); TrieStore trieStore = new TrieStore(new MemDb(), new TestPruningStrategy(true), No.Persistence, _logManager); trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1)); trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2)); trieStore.FinishBlockCommit(TrieType.State, 1234, trieNode2); trieStore.CommitNode(1235, new NodeCommitInfo(trieNode3)); trieStore.CommitNode(1235, new NodeCommitInfo(trieNode4)); // depending on whether the node gets resolved it gives different values here in debugging and run // needs some attention trieStore.MemoryUsedByDirtyCache.Should().BeLessOrEqualTo( trieNode1.GetMemorySize(false) + trieNode2.GetMemorySize(false)); }
public void Rlp_is_cloned_when_cloning() { TrieStore trieStore = new TrieStore(new MemDb(), NullLogManager.Instance); TrieNode leaf1 = new TrieNode(NodeType.Leaf); leaf1.Key = new HexPrefix(true, Bytes.FromHexString("abc")); leaf1.Value = new byte[111]; leaf1.ResolveKey(trieStore, false); leaf1.Seal(); trieStore.CommitNode(0, new NodeCommitInfo(leaf1)); TrieNode leaf2 = new TrieNode(NodeType.Leaf); leaf2.Key = new HexPrefix(true, Bytes.FromHexString("abd")); leaf2.Value = new byte[222]; leaf2.ResolveKey(trieStore, false); leaf2.Seal(); trieStore.CommitNode(0, new NodeCommitInfo(leaf2)); TrieNode trieNode = new TrieNode(NodeType.Branch); trieNode.SetChild(1, leaf1); trieNode.SetChild(2, leaf2); trieNode.ResolveKey(trieStore, true); byte[] rlp = trieNode.FullRlp; TrieNode restoredBranch = new TrieNode(NodeType.Branch, rlp); TrieNode clone = restoredBranch.Clone(); var restoredLeaf1 = clone.GetChild(trieStore, 1); restoredLeaf1.Should().NotBeNull(); restoredLeaf1.ResolveNode(trieStore); restoredLeaf1.Value.Should().BeEquivalentTo(leaf1.Value); }
public void Dispatcher_will_save_to_db_everything_from_snapshot_blocks() { TrieNode a = new TrieNode(NodeType.Leaf, new byte[0]); // 192B a.ResolveKey(NullTrieNodeResolver.Instance, true); MemDb memDb = new MemDb(); TrieStore trieStore = new TrieStore(memDb, new MemoryLimit(16.MB()), new ConstantInterval(4), _logManager); trieStore.CommitNode(0, new NodeCommitInfo(a)); trieStore.FinishBlockCommit(TrieType.State, 0, a); trieStore.FinishBlockCommit(TrieType.State, 1, a); trieStore.FinishBlockCommit(TrieType.State, 2, a); trieStore.FinishBlockCommit(TrieType.State, 3, a); trieStore.FinishBlockCommit(TrieType.State, 4, a); memDb[a.Keccak !.Bytes].Should().NotBeNull();
public void Dispatcher_will_always_try_to_clear_memory() { TrieStore trieStore = new TrieStore(new MemDb(), new MemoryLimit(512), No.Persistence, _logManager); for (int i = 0; i < 1024; i++) { for (int j = 0; j < 1 + i % 3; j++) { TrieNode trieNode = new TrieNode(NodeType.Leaf, new byte[0]); // 192B trieNode.ResolveKey(NullTrieNodeResolver.Instance, true); trieStore.CommitNode(i, new NodeCommitInfo(trieNode)); } TrieNode fakeRoot = new TrieNode(NodeType.Leaf, new byte[0]); // 192B fakeRoot.ResolveKey(NullTrieNodeResolver.Instance, true); trieStore.FinishBlockCommit(TrieType.State, i, fakeRoot); } trieStore.MemoryUsedByDirtyCache.Should().BeLessThan(512 * 2); }