Repository navigation
Conversation
…#15511) Summary: In PessimisticTransaction::LockBatch(), the internal WriteBatch::Handler overrides PutCF, PutEntityCF, MergeCF, and DeleteCF to record and lock all keys before committing writes through TransactionDB::Write(). However, SingleDeleteCF was missing. As a result: 1. On the default column family, WriteBatch::Handler::SingleDeleteCF fell back to SingleDelete(key) (a no-op in Handler) and returned OK, so keys were not recorded or locked. A concurrent SingleDelete in TransactionDB::Write() could delete a key locked exclusively by an active transaction without waiting or timing out. 2. On any non-default column family, the base SingleDeleteCF returned InvalidArgument ("non-default column family and SingleDeleteCF not implemented"), causing valid batched SingleDelete writes on non-default column families to fail. This fix overrides SingleDeleteCF in LockBatch::Handler to record the key, matching the behavior of DeleteCF. Test Plan: - Added SingleDeleteBatchLocking unit test in utilities/transactions/transaction_test.cc. - Verified with standalone reproducer from meta#15511: - Batched SingleDelete on default CF times out when key is exclusively locked. - Batched SingleDelete on non-default CF succeeds and deletes the key.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #15511.
In
PessimisticTransaction::LockBatch(), RocksDB locks keys in a batch before writing them withTransactionDB::Write().SingleDeleteCFwas missing from this handler, which caused two bugs:SingleDeletecould delete a key while another transaction had it locked, without waiting for the lock.InvalidArgumenterror.This PR adds
SingleDeleteCFtoLockBatchso single deletes are locked just like normal deletes.Test Plan
SingleDeleteBatchLockinginutilities/transactions/transaction_test.cc.