_get_compactify_hashX_history_ops
This commit is contained in:
parent
8a2517aa36
commit
d323edd252
1 changed files with 19 additions and 15 deletions
|
@ -1271,6 +1271,23 @@ class BlockchainProcessorService(BlockchainService):
|
||||||
status = sha256(history.encode())
|
status = sha256(history.encode())
|
||||||
self.db.prefix_db.hashX_mempool_status.stage_put((hashX,), (status,))
|
self.db.prefix_db.hashX_mempool_status.stage_put((hashX,), (status,))
|
||||||
|
|
||||||
|
def _get_compactify_hashX_history_ops(self, height: int, hashX: bytes):
|
||||||
|
if height > self.env.reorg_limit: # compactify existing history
|
||||||
|
hist_txs = b''
|
||||||
|
# accumulate and delete all of the tx histories between height 1 and current - reorg_limit
|
||||||
|
for k, hist in self.db.prefix_db.hashX_history.iterate(
|
||||||
|
start=(hashX, 1), stop=(hashX, height - self.env.reorg_limit),
|
||||||
|
deserialize_key=False, deserialize_value=False):
|
||||||
|
hist_txs += hist
|
||||||
|
self.db.prefix_db.stage_raw_delete(k, hist)
|
||||||
|
if hist_txs:
|
||||||
|
# add the accumulated histories onto the existing compacted history at height 0
|
||||||
|
key = self.db.prefix_db.hashX_history.pack_key(hashX, 0)
|
||||||
|
existing = self.db.prefix_db.get(key)
|
||||||
|
if existing is not None:
|
||||||
|
self.db.prefix_db.stage_raw_delete(key, existing)
|
||||||
|
self.db.prefix_db.stage_raw_put(key, (existing or b'') + hist_txs)
|
||||||
|
|
||||||
def advance_block(self, block: Block):
|
def advance_block(self, block: Block):
|
||||||
height = self.height + 1
|
height = self.height + 1
|
||||||
# print("advance ", height)
|
# print("advance ", height)
|
||||||
|
@ -1364,24 +1381,11 @@ class BlockchainProcessorService(BlockchainService):
|
||||||
self.db.prefix_db.stage_raw_delete(k, v)
|
self.db.prefix_db.stage_raw_delete(k, v)
|
||||||
|
|
||||||
for hashX, new_history in self.hashXs_by_tx.items():
|
for hashX, new_history in self.hashXs_by_tx.items():
|
||||||
|
# TODO: combine this with compaction so that we only read the history once
|
||||||
self._get_update_hashX_status_ops(
|
self._get_update_hashX_status_ops(
|
||||||
hashX, [(self.pending_transactions[tx_num], height) for tx_num in new_history]
|
hashX, [(self.pending_transactions[tx_num], height) for tx_num in new_history]
|
||||||
)
|
)
|
||||||
if height > self.env.reorg_limit: # compactify existing history
|
self._get_compactify_hashX_history_ops(height, hashX)
|
||||||
hist_txs = b''
|
|
||||||
# accumulate and delete all of the tx histories between height 1 and current - reorg_limit
|
|
||||||
for k, hist in self.db.prefix_db.hashX_history.iterate(
|
|
||||||
start=(hashX, 1), stop=(hashX, height - self.env.reorg_limit),
|
|
||||||
deserialize_key=False, deserialize_value=False):
|
|
||||||
hist_txs += hist
|
|
||||||
self.db.prefix_db.stage_raw_delete(k, hist)
|
|
||||||
if hist_txs:
|
|
||||||
# add the accumulated histories onto the existing compacted history at height 0
|
|
||||||
key = self.db.prefix_db.hashX_history.pack_key(hashX, 0)
|
|
||||||
existing = self.db.prefix_db.get(key)
|
|
||||||
if existing is not None:
|
|
||||||
self.db.prefix_db.stage_raw_delete(key, existing)
|
|
||||||
self.db.prefix_db.stage_raw_put(key, (existing or b'') + hist_txs)
|
|
||||||
if not new_history:
|
if not new_history:
|
||||||
continue
|
continue
|
||||||
self.db.prefix_db.hashX_history.stage_put(key_args=(hashX, height), value_args=(new_history,))
|
self.db.prefix_db.hashX_history.stage_put(key_args=(hashX, height), value_args=(new_history,))
|
||||||
|
|
Loading…
Reference in a new issue