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); }
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); }
public DbShrink(ISnapshotIndexRepository snapshotIndexRepository, IDbShrinkRepository repository) { _snapshotIndexRepository = snapshotIndexRepository; _repository = repository; dbShrinkStatus = GetDbShrinkStatus(); dbShrinkDepth = GetDbShrinkDepth(); oldestSnapshot = GetOldestSnapshotInDb(); }
// 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); }
public ulong SaveNodeId(IDbShrinkRepository _repo) { return(_state.SaveNodeId(_repo)); }
public ulong DeleteSnapshot(IDbShrinkRepository _repo) { return(_state.DeleteNodes(_repo)); }
public ulong DeleteNodeId(IDbShrinkRepository _repo) { return(_state.DeleteNodeId(_repo)); }
public ulong DeleteNodes(IDbShrinkRepository _repo) { return(_trieMap.DeleteNodes(CurrentVersion, _repo)); }
public ulong SaveNodeId(IDbShrinkRepository _repo) { return(_trieMap.SaveNodeId(CurrentVersion, _repo)); }
private void DeleteNode(ulong id, IHashTrieNode node, IDbShrinkRepository _repo) { _lruCache.Remove(id); _repo.DeleteNode(id, node); }