コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
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));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
ファイル: TrieNodeTests.cs プロジェクト: uzbekdev1/nethermind
        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);
        }
コード例 #7
0
        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();
コード例 #8
0
        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);
        }