コード例 #1
0
        public void PruneElements(IEnumerable <KeyValuePair <UInt256, IEnumerable <int> > > blockTxIndices)
        {
            using (var handle = this.cursorCache.TakeItem())
            {
                var cursor = handle.Item;

                foreach (var keyPair in blockTxIndices)
                {
                    var blockHash = keyPair.Key;
                    var txIndices = keyPair.Value;

                    using (var jetTx = cursor.jetSession.BeginTransaction())
                    {
                        int blockIndex;
                        if (!TryGetBlockIndex(cursor, blockHash, out blockIndex))
                        {
                            continue;
                        }

                        var pruningCursor = new MerkleTreePruningCursor(blockIndex, cursor);

                        // prune the transactions
                        foreach (var index in txIndices)
                        {
                            var cachedCursor = new CachedMerkleTreePruningCursor <BlockTxNode>(pruningCursor);
                            MerkleTree.PruneNode(cachedCursor, index);
                        }

                        jetTx.CommitLazy();
                    }
                }
            }
        }
コード例 #2
0
        public void PruneElements(IEnumerable<KeyValuePair<UInt256, IEnumerable<int>>> blockTxIndices)
        {
            using (var snapshot = db.GetSnapshot())
            {
                var readOptions = new ReadOptions { Snapshot = snapshot };
                using (var iterator = db.NewIterator(readOptions))
                {
                    foreach (var keyPair in blockTxIndices)
                    {
                        var blockHash = keyPair.Key;
                        var txIndices = keyPair.Value;

                        var pruningCursor = new LevelDbMerkleTreePruningCursor(blockHash, iterator);

                        // prune the transactions
                        foreach (var index in txIndices)
                        {
                            var cachedCursor = new CachedMerkleTreePruningCursor<BlockTxNode>(pruningCursor);
                            MerkleTree.PruneNode(cachedCursor, index);
                        }

                        var writeBatch = pruningCursor.CreateWriteBatch();
                        try
                        {
                            db.Write(new WriteOptions(), writeBatch);
                        }
                        finally
                        {
                            writeBatch.Dispose();
                        }
                    }
                }
            }
        }
コード例 #3
0
        public void PruneElements(IEnumerable <KeyValuePair <UInt256, IEnumerable <int> > > blockTxIndices)
        {
            using (var snapshot = db.GetSnapshot())
            {
                var readOptions = new ReadOptions {
                    Snapshot = snapshot
                };
                using (var iterator = db.NewIterator(readOptions))
                {
                    foreach (var keyPair in blockTxIndices)
                    {
                        var blockHash = keyPair.Key;
                        var txIndices = keyPair.Value;

                        var pruningCursor = new LevelDbMerkleTreePruningCursor(blockHash, iterator);

                        // prune the transactions
                        foreach (var index in txIndices)
                        {
                            var cachedCursor = new CachedMerkleTreePruningCursor <BlockTxNode>(pruningCursor);
                            MerkleTree.PruneNode(cachedCursor, index);
                        }

                        var writeBatch = pruningCursor.CreateWriteBatch();
                        try
                        {
                            db.Write(new WriteOptions(), writeBatch);
                        }
                        finally
                        {
                            writeBatch.Dispose();
                        }
                    }
                }
            }
        }
コード例 #4
0
        public void PruneElements(IEnumerable<KeyValuePair<UInt256, IEnumerable<int>>> blockTxIndices)
        {
            using (var handle = this.cursorCache.TakeItem())
            {
                var cursor = handle.Item;

                foreach (var keyPair in blockTxIndices)
                {
                    var blockHash = keyPair.Key;
                    var txIndices = keyPair.Value;

                    using (var jetTx = cursor.jetSession.BeginTransaction())
                    {
                        int blockIndex;
                        if (!TryGetBlockIndex(cursor, blockHash, out blockIndex))
                            continue;

                        var pruningCursor = new MerkleTreePruningCursor(blockIndex, cursor);

                        // prune the transactions
                        foreach (var index in txIndices)
                        {
                            var cachedCursor = new CachedMerkleTreePruningCursor<BlockTxNode>(pruningCursor);
                            MerkleTree.PruneNode(cachedCursor, index);
                        }

                        jetTx.CommitLazy();
                    }
                }
            }
        }
コード例 #5
0
        public void PruneElements(IEnumerable<KeyValuePair<UInt256, IEnumerable<int>>> blockTxIndices)
        {
            foreach (var keyPair in blockTxIndices)
            {
                var blockHash = keyPair.Key;
                var txIndices = keyPair.Value;

                using (var txn = this.jetInstance.BeginTransaction())
                using (var cursor = txn.CreateCursor(blocksTableId))
                {
                    var pruningCursor = new MerkleTreePruningCursor(blockHash, txn, blocksTableId, cursor);
                    var cachedCursor = new CachedMerkleTreePruningCursor(pruningCursor);

                    // prune the transactions
                    foreach (var index in txIndices)
                        MerkleTree.PruneNode(cachedCursor, index);

                    cursor.Dispose();
                    txn.Commit();
                }
            }
        }