Пример #1
0
        public ulong DeleteNodes(ulong root, IDbShrinkRepository _repo)
        {
            if (_repo.NodeIdExists(root) || root == 0)
            {
                return(0);
            }
            var node = TryGetNodeById(root, _repo);

            if (node is null)
            {
                return(0);
            }

            ulong nodesDeleted = 0;

            foreach (var childId in node.Children)
            {
                if (childId != 0)
                {
                    nodesDeleted += DeleteNodes(childId, _repo);
                }
            }

            DeleteNode(root, node, _repo);
            return(nodesDeleted + 1);
        }
Пример #2
0
        public ulong DeleteNodeId(ulong root, IDbShrinkRepository _repo)
        {
            if (!_repo.NodeIdExists(root) || root == 0)
            {
                return(0);
            }
            var node = TryGetNodeById(root, _repo);

            if (node is null)
            {
                throw new Exception($"Corrupted trie: found null node for nodeId {root}");
            }

            ulong nodeIdDeleted = 0;

            foreach (var childId in node.Children)
            {
                if (childId != 0)
                {
                    nodeIdDeleted += DeleteNodeId(childId, _repo);
                }
            }

            _repo.DeleteNodeId(root);

            return(nodeIdDeleted + 1);
        }
Пример #3
0
 public DbShrink(ISnapshotIndexRepository snapshotIndexRepository, IDbShrinkRepository repository)
 {
     _snapshotIndexRepository = snapshotIndexRepository;
     _repository    = repository;
     dbShrinkStatus = GetDbShrinkStatus();
     dbShrinkDepth  = GetDbShrinkDepth();
     oldestSnapshot = GetOldestSnapshotInDb();
 }
Пример #4
0
        // These methods are used for DbCompact only
        private IHashTrieNode?TryGetNodeById(ulong id, IDbShrinkRepository _repo)
        {
            if (id == 0)
            {
                return(null);
            }
            var _node = _lruCache.Get(id);

            if (_node == null)
            {
                _node = _repo.GetNodeById(id);
                if (_node != null)
                {
                    _lruCache.Add(id, _node);
                }
            }
            return(_node);
        }
Пример #5
0
 public ulong SaveNodeId(IDbShrinkRepository _repo)
 {
     return(_state.SaveNodeId(_repo));
 }
Пример #6
0
 public ulong DeleteSnapshot(IDbShrinkRepository _repo)
 {
     return(_state.DeleteNodes(_repo));
 }
Пример #7
0
 public ulong DeleteNodeId(IDbShrinkRepository _repo)
 {
     return(_state.DeleteNodeId(_repo));
 }
Пример #8
0
 public ulong DeleteNodes(IDbShrinkRepository _repo)
 {
     return(_trieMap.DeleteNodes(CurrentVersion, _repo));
 }
Пример #9
0
 public ulong SaveNodeId(IDbShrinkRepository _repo)
 {
     return(_trieMap.SaveNodeId(CurrentVersion, _repo));
 }
Пример #10
0
 private void DeleteNode(ulong id, IHashTrieNode node, IDbShrinkRepository _repo)
 {
     _lruCache.Remove(id);
     _repo.DeleteNode(id, node);
 }