From ff48a05166abadf6be48e950e39535925eba33c7 Mon Sep 17 00:00:00 2001 From: Peter Zhang Date: Mon, 7 Jul 2025 20:32:17 +0800 Subject: [PATCH] copy from middle to previous and afterward tx seqs instead of only from the first seq --- node/storage/src/log_store/log_manager.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/node/storage/src/log_store/log_manager.rs b/node/storage/src/log_store/log_manager.rs index 6e2f934..f873076 100644 --- a/node/storage/src/log_store/log_manager.rs +++ b/node/storage/src/log_store/log_manager.rs @@ -273,7 +273,7 @@ impl LogStoreWrite for LogManager { bail!("unexpected tx!"); } } - let maybe_same_data_tx_seq = self.tx_store.put_tx(tx.clone())?.first().cloned(); + let same_data_tx_seqs = self.tx_store.put_tx(tx.clone())?; // TODO(zz): Should we validate received tx? self.append_subtree_list( tx.seq, @@ -289,9 +289,11 @@ impl LogStoreWrite for LogManager { // Drop the lock because `copy_tx_data` will lock again. drop(merkle); - if let Some(old_tx_seq) = maybe_same_data_tx_seq { + for old_tx_seq in same_data_tx_seqs { if self.check_tx_completed(old_tx_seq)? { + // copy and finalize once, then stop self.copy_tx_and_finalize(old_tx_seq, vec![tx.seq])?; + break; } } metrics::PUT_TX.update_since(start_time); @@ -315,7 +317,7 @@ impl LogStoreWrite for LogManager { .get_tx_seq_list_by_data_root(&tx.data_merkle_root)?; // Check if there are other same-root transaction not finalized. if same_root_seq_list.first() == Some(&tx_seq) { - self.copy_tx_and_finalize(tx_seq, same_root_seq_list[1..].to_vec())?; + self.copy_tx_and_finalize(tx_seq, same_root_seq_list)?; } self.tx_store.finalize_tx(tx_seq)?; Ok(()) @@ -352,7 +354,7 @@ impl LogStoreWrite for LogManager { .get_tx_seq_list_by_data_root(&tx.data_merkle_root)?; // Check if there are other same-root transaction not finalized. if same_root_seq_list.first() == Some(&tx_seq) { - self.copy_tx_and_finalize(tx_seq, same_root_seq_list[1..].to_vec())?; + self.copy_tx_and_finalize(tx_seq, same_root_seq_list)?; } metrics::FINALIZE_TX_WITH_HASH.update_since(start_time); Ok(true)