rocksdb/utilities/transactions
Maysam Yabandeh 6f5e6445d9 WritePrepared Txn: fix smallest_prep atomicity issue
Summary:
We introduced smallest_prep optimization in this commit b225de7e10, which enables storing the smallest uncommitted sequence number along with the snapshot. This enables the readers that read from the snapshot to skip further checks and safely assumed the data is committed if its sequence number is less than smallest uncommitted when the snapshot was taken. The problem was that smallest uncommitted and the snapshot must be taken atomically, and the lack of atomicity had led to readers using a smallest uncommitted after the snapshot was taken and hence mistakenly skipping some data.
This patch fixes the problem by i) separating the process of removing of prepare entries from the AddCommitted function, ii) removing the prepare entires AFTER the committed sequence number is published, iii) getting smallest uncommitted (from the prepare list) BEFORE taking a snapshot. This guarantees that the smallest uncommitted that is accompanied with a snapshot is less than or equal of such number if it was obtained atomically.

Tested by running MySQLStyleTransactionTest/MySQLStyleTransactionTest.TransactionStressTest that was failing sporadically.
Closes https://github.com/facebook/rocksdb/pull/3703

Differential Revision: D7581934

Pulled By: maysamyabandeh

fbshipit-source-id: dc9d6f4fb477eba75d4d5927326905b548a96a32
2018-04-11 20:11:51 -07:00
..
optimistic_transaction_db_impl.cc Refactor PessimisticTransaction 2017-08-07 16:12:29 -07:00
optimistic_transaction_db_impl.h Make Optimistic Tx database stackable 2018-04-03 15:28:40 -07:00
optimistic_transaction_test.cc Make Optimistic Tx database stackable 2018-04-03 15:28:40 -07:00
optimistic_transaction.cc Update WritePrepared with the pseudo code 2017-08-16 16:57:47 -07:00
optimistic_transaction.h Update WritePrepared with the pseudo code 2017-08-16 16:57:47 -07:00
pessimistic_transaction_db.cc Fix some typos in comments and docs. 2018-03-08 10:27:25 -08:00
pessimistic_transaction_db.h WritePrepared Txn: smallest_prepare optimization 2018-04-02 20:27:41 -07:00
pessimistic_transaction.cc WritePrepared Txn: Duplicate Keys, Txn Part 2018-02-05 18:43:24 -08:00
pessimistic_transaction.h WritePrepared Txn: Duplicate Keys, Txn Part 2018-02-05 18:43:24 -08:00
snapshot_checker.cc WritePrepared Txn: Move DB class to its own file 2017-11-02 11:14:30 -07:00
transaction_base.cc Suppress unused warnings 2018-02-02 12:27:07 -08:00
transaction_base.h WritePrepared Txn: smallest_prepare optimization 2018-04-02 20:27:41 -07:00
transaction_db_mutex_impl.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
transaction_db_mutex_impl.h Change RocksDB License 2017-07-15 16:11:23 -07:00
transaction_lock_mgr.cc save redundant key lookup in map of locked keys 2018-02-20 17:44:44 -08:00
transaction_lock_mgr.h Added mechanism to track deadlock chain 2017-08-17 18:56:21 -07:00
transaction_test.cc WritePrepared Txn: make recoverable state visible after flush 2018-03-28 12:12:08 -07:00
transaction_test.h WritePrepared Txn: Fix bug with duplicate keys during recovery 2018-03-05 10:57:59 -08:00
transaction_util.cc WritePrepared Txn: ValidateSnapshot 2017-11-01 19:11:09 -07:00
transaction_util.h WritePrepared Txn: ValidateSnapshot 2017-11-01 19:11:09 -07:00
write_prepared_transaction_test.cc WritePrepared Txn: fix smallest_prep atomicity issue 2018-04-11 20:11:51 -07:00
write_prepared_txn_db.cc WritePrepared Txn: fix smallest_prep atomicity issue 2018-04-11 20:11:51 -07:00
write_prepared_txn_db.h WritePrepared Txn: fix smallest_prep atomicity issue 2018-04-11 20:11:51 -07:00
write_prepared_txn.cc WritePrepared Txn: fix smallest_prep atomicity issue 2018-04-11 20:11:51 -07:00
write_prepared_txn.h WritePrepared Txn: smallest_prepare optimization 2018-04-02 20:27:41 -07:00