From 2ea1798d6e45e780c08914727a181281cc11d28a Mon Sep 17 00:00:00 2001 From: Jussi Saurio Date: Sun, 14 Sep 2025 19:19:06 +0300 Subject: [PATCH] mvcc: end commit state machine early when write set is empty --- core/mvcc/database/mod.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/mvcc/database/mod.rs b/core/mvcc/database/mod.rs index 08548a94b..efc91f6e5 100644 --- a/core/mvcc/database/mod.rs +++ b/core/mvcc/database/mod.rs @@ -482,6 +482,20 @@ impl StateTransition for CommitStateMachine { .extend(tx.write_set.iter().map(|v| *v.value())); self.write_set .sort_by(|a, b| a.table_id.cmp(&b.table_id).then(a.row_id.cmp(&b.row_id))); + if self.write_set.is_empty() { + if mvcc_store.is_exclusive_tx(&self.tx_id) { + mvcc_store.release_exclusive_tx(&self.tx_id); + self.commit_coordinator.pager_commit_lock.unlock(); + // FIXME: this function isnt re-entrant + self.pager + .io + .block(|| self.pager.end_tx(false, &self.connection))?; + } else { + self.pager.end_read_tx()?; + } + self.finalize(mvcc_store)?; + return Ok(TransitionResult::Done(())); + } self.state = CommitState::BeginPagerTxn { end_ts }; Ok(TransitionResult::Continue) }