Skip to content

Commit d9098d6

Browse files
authored
Optimize add missing files (#19630)
* Optimize add missing files. * Update poetry.lock * Update poetry.lock * Update pyproject.toml * Redo lock file. * Lint. * Fix test. * Checkpoint. * Change reference. * Change branch. * Fix lock file.
1 parent 8c96c1a commit d9098d6

File tree

2 files changed

+21
-26
lines changed

2 files changed

+21
-26
lines changed

chia/data_layer/data_store.py

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import chia_rs.datalayer
2020
import zstd
2121
from chia_rs.datalayer import (
22+
DeltaFileCache,
2223
DeltaReader,
2324
KeyAlreadyPresentError,
2425
KeyId,
@@ -1632,27 +1633,21 @@ async def get_nodes_for_file(
16321633
node_hash: bytes32,
16331634
store_id: bytes32,
16341635
deltas_only: bool,
1635-
merkle_blob: MerkleBlob,
1636-
hash_to_index: dict[bytes32, TreeIndex],
1637-
existing_hashes: set[bytes32],
1636+
delta_file_cache: DeltaFileCache,
16381637
tree_nodes: list[SerializedNode],
16391638
) -> None:
16401639
if deltas_only:
1641-
if node_hash in existing_hashes:
1640+
if delta_file_cache.seen_previous_hash(node_hash):
16421641
return
16431642

1644-
raw_index = hash_to_index[node_hash]
1645-
raw_node = merkle_blob.get_raw_node(raw_index)
1643+
raw_index = delta_file_cache.get_index(node_hash)
1644+
raw_node = delta_file_cache.get_raw_node(raw_index)
16461645

16471646
if isinstance(raw_node, chia_rs.datalayer.InternalNode):
1648-
left_hash = merkle_blob.get_hash_at_index(raw_node.left)
1649-
right_hash = merkle_blob.get_hash_at_index(raw_node.right)
1650-
await self.get_nodes_for_file(
1651-
root, left_hash, store_id, deltas_only, merkle_blob, hash_to_index, existing_hashes, tree_nodes
1652-
)
1653-
await self.get_nodes_for_file(
1654-
root, right_hash, store_id, deltas_only, merkle_blob, hash_to_index, existing_hashes, tree_nodes
1655-
)
1647+
left_hash = delta_file_cache.get_hash_at_index(raw_node.left)
1648+
right_hash = delta_file_cache.get_hash_at_index(raw_node.right)
1649+
await self.get_nodes_for_file(root, left_hash, store_id, deltas_only, delta_file_cache, tree_nodes)
1650+
await self.get_nodes_for_file(root, right_hash, store_id, deltas_only, delta_file_cache, tree_nodes)
16561651
tree_nodes.append(SerializedNode(False, bytes(left_hash), bytes(right_hash)))
16571652
elif isinstance(raw_node, chia_rs.datalayer.LeafNode):
16581653
tree_nodes.append(
@@ -1703,20 +1698,20 @@ async def write_tree_to_file(
17031698
if node_hash == bytes32.zeros:
17041699
return
17051700

1706-
merkle_blob = await self.get_merkle_blob(store_id=store_id, root_hash=root.node_hash)
1707-
hash_to_index = merkle_blob.get_hashes_indexes()
1708-
if root.generation == 0:
1709-
existing_hashes = set()
1710-
else:
1701+
with log_exceptions(log=log, message="Error while getting merkle blob"):
1702+
root_path = self.get_merkle_path(store_id=store_id, root_hash=root.node_hash)
1703+
delta_file_cache = DeltaFileCache(root_path)
1704+
1705+
if root.generation > 0:
17111706
previous_root = await self.get_tree_root(store_id=store_id, generation=root.generation - 1)
1712-
previous_merkle_blob = await self.get_merkle_blob(store_id=store_id, root_hash=previous_root.node_hash)
1713-
previous_hashes_indexes = previous_merkle_blob.get_hashes_indexes()
1714-
existing_hashes = {hash for hash in previous_hashes_indexes.keys()}
1707+
if previous_root.node_hash is not None:
1708+
with log_exceptions(log=log, message="Error while getting previous merkle blob"):
1709+
previous_root_path = self.get_merkle_path(store_id=store_id, root_hash=previous_root.node_hash)
1710+
delta_file_cache.load_previous_hashes(previous_root_path)
1711+
17151712
tree_nodes: list[SerializedNode] = []
17161713

1717-
await self.get_nodes_for_file(
1718-
root, node_hash, store_id, deltas_only, merkle_blob, hash_to_index, existing_hashes, tree_nodes
1719-
)
1714+
await self.get_nodes_for_file(root, node_hash, store_id, deltas_only, delta_file_cache, tree_nodes)
17201715
kv_ids = (
17211716
KeyOrValueId.from_bytes(raw_id)
17221717
for node in tree_nodes

poetry.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ typing-extensions = "*"
832832
type = "git"
833833
url = "https://github.com/chia-network/chia_rs"
834834
reference = "long_lived/initial_datalayer"
835-
resolved_reference = "151269e9f85bd2c87640dab05c9778e20ee19a56"
835+
resolved_reference = "281ec6467174896e6a0b1909378c5975ed5a02bb"
836836
subdirectory = "wheel/"
837837

838838
[[package]]

0 commit comments

Comments
 (0)