From 6b9fb2f181e428bb521640d9459ee2adcfe1dc2e Mon Sep 17 00:00:00 2001 From: Pere Diaz Bou Date: Mon, 15 Sep 2025 12:27:32 +0200 Subject: [PATCH] core/mvcc: fix locks in logical log --- core/mvcc/database/mod.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/mvcc/database/mod.rs b/core/mvcc/database/mod.rs index 9807f4b12..40bfba642 100644 --- a/core/mvcc/database/mod.rs +++ b/core/mvcc/database/mod.rs @@ -434,6 +434,7 @@ impl StateTransition for CommitStateMachine { #[tracing::instrument(fields(state = ?self.state), skip(self, mvcc_store), level = Level::DEBUG)] fn step(&mut self, mvcc_store: &Self::Context) -> Result> { + tracing::trace!("step(state={:?})", self.state); match &self.state { CommitState::Initial => { let end_ts = mvcc_store.get_timestamp(); @@ -846,7 +847,7 @@ impl StateTransition for CommitStateMachine { return Ok(TransitionResult::Continue); } CommitState::BeginCommitLogicalLog { end_ts, log_record } => { - if mvcc_store.storage.is_logical_log() { + if mvcc_store.storage.is_logical_log() && !mvcc_store.is_exclusive_tx(&self.tx_id) { // logical log needs to be serialized let locked = self.commit_coordinator.pager_commit_lock.write(); if !locked { @@ -875,6 +876,7 @@ impl StateTransition for CommitStateMachine { if mvcc_store.storage.is_logical_log() { self.commit_coordinator.pager_commit_lock.unlock(); } + self.pager.end_tx(false, &self.connection)?; self.state = CommitState::CommitEnd { end_ts: *end_ts }; return Ok(TransitionResult::Continue); } @@ -892,7 +894,7 @@ impl StateTransition for CommitStateMachine { if mvcc_store.is_exclusive_tx(&self.tx_id) { mvcc_store.release_exclusive_tx(&self.tx_id); } - tracing::trace!("logged(tx_id={}, )", self.tx_id); + tracing::trace!("logged(tx_id={}, end_ts={})", self.tx_id, *end_ts); self.finalize(mvcc_store)?; Ok(TransitionResult::Done(())) }