Skip to content

release-26.1: kvcoord: force split batch in txnWriteBuffer for mid txn flush#162031

Merged
yuzefovich merged 1 commit intocockroachdb:release-26.1from
yuzefovich:blathers/backport-release-26.1-161972
Jan 29, 2026
Merged

release-26.1: kvcoord: force split batch in txnWriteBuffer for mid txn flush#162031
yuzefovich merged 1 commit intocockroachdb:release-26.1from
yuzefovich:blathers/backport-release-26.1-161972

Conversation

@yuzefovich
Copy link
Member

@yuzefovich yuzefovich commented Jan 29, 2026

Backport 1/1 commits from #161972 on behalf of @yuzefovich.


We just found a case where - if a BatchRequest with a CPut forces the txn write buffer to flush (e.g. because of buffer size limit) - we could lose some buffered writes in case that CPut's condition failed the evaluation. This was the case since we could have included the CPut into the same batch as all buffered writes, and the ConditionFailedError would make us discard the whole batch, whereas the higher level (i.e. SQL) could have discarded that error by using savepoints. To prevent this from happening we'll now require a separate batch for the buffered writes for all mid-txn flushes. Additionally, even in the end-txn flush batch case we now require a separate batch if a CPut is found.

Fixes: #161722.

Release note (bug fix): Previously, if buffered writes were enabled (which is a public preview feature, off by default), multi-stmt explicit txns that use SAVEPOINTs to recover from certain errors (like duplicate key value violations) could lose the writes that were performed before the savepoint was created in rare cases. The bug has been present since the buffered writes feature was added in 25.2 and is now fixed.


Release justification: bug fix.

We just found a case where - if a BatchRequest with a CPut forces the
txn write buffer to flush (e.g. because of buffer size limit) - we could
lose some buffered writes in case that CPut's condition failed the
evaluation. This was the case since we could have included the CPut into
the same batch as all buffered writes, and the ConditionFailedError
would make us discard the whole batch, whereas the higher level (i.e.
SQL) could have discarded that error by using savepoints. To prevent this
from happening we'll now require a separate batch for the buffered writes
for all mid-txn flushes. Additionally, even in the end-txn flush batch
case we now require a separate batch if a CPut is found.

Release note (bug fix): Previously, if buffered writes were enabled
(which is a public preview feature, off by default), multi-stmt explicit
txns that use SAVEPOINTs to recover from certain errors (like duplicate
key value violations) could lose the writes that were performed _before_
the savepoint was created in rare cases. The bug has been present since
the buffered writes feature was added in 25.2 and is now fixed.
@yuzefovich yuzefovich force-pushed the blathers/backport-release-26.1-161972 branch from 1207cdf to 7cb2aa5 Compare January 29, 2026 18:58
@yuzefovich yuzefovich requested a review from a team as a code owner January 29, 2026 18:58
@blathers-crl blathers-crl bot added blathers-backport This is a backport that Blathers created automatically. O-robot Originated from a bot. labels Jan 29, 2026
@blathers-crl
Copy link

blathers-crl bot commented Jan 29, 2026

Thanks for opening a backport.

Before merging, please confirm that the change does not break backwards compatibility and otherwise complies with the backport policy. Include a brief release justification in the PR description explaining why the backport is appropriate. All backports must be reviewed by the TL for the owning area. While the stricter LTS policy does not yet apply, please exercise judgment and consider gating non-critical changes behind a disabled-by-default feature flag when appropriate.

@blathers-crl blathers-crl bot added backport Label PR's that are backports to older release branches T-sql-queries SQL Queries Team labels Jan 29, 2026
@cockroach-teamcity
Copy link
Member

This change is Reviewable

@yuzefovich yuzefovich merged commit c281b60 into cockroachdb:release-26.1 Jan 29, 2026
18 checks passed
@yuzefovich yuzefovich deleted the blathers/backport-release-26.1-161972 branch January 29, 2026 19:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport Label PR's that are backports to older release branches blathers-backport This is a backport that Blathers created automatically. O-robot Originated from a bot. T-sql-queries SQL Queries Team v26.1.1

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants