WritePrepare Txn: Cancel flush/compaction before destruction

Summary:
On WritePreparedTxnDB destruct there could be running compaction/flush holding a SnapshotChecker, which holds a pointer back to WritePreparedTxnDB. Make sure those jobs finished before destructing WritePreparedTxnDB.

This is caught by TransactionTest::SeqAdvanceTest.
Closes https://github.com/facebook/rocksdb/pull/2982

Differential Revision: D6002957

Pulled By: yiwu-arbug

fbshipit-source-id: f1e70390c9798d1bd7959f5c8e2a1c14100773c3
This commit is contained in:
Yi Wu 2017-10-06 20:53:52 -07:00 committed by Facebook Github Bot
parent ec6c5383d0
commit 17c6325e8a
2 changed files with 8 additions and 1 deletions

View File

@ -954,5 +954,12 @@ bool WritePreparedTxnDB::MaybeUpdateOldCommitMap(
return next_is_larger; return next_is_larger;
} }
WritePreparedTxnDB::~WritePreparedTxnDB() {
// At this point there could be running compaction/flush holding a
// SnapshotChecker, which holds a pointer back to WritePreparedTxnDB.
// Make sure those jobs finished before destructing WritePreparedTxnDB.
db_impl_->CancelAllBackgroundWork(true/*wait*/);
}
} // namespace rocksdb } // namespace rocksdb
#endif // ROCKSDB_LITE #endif // ROCKSDB_LITE

View File

@ -191,7 +191,7 @@ class WritePreparedTxnDB : public PessimisticTransactionDB {
Init(txn_db_options); Init(txn_db_options);
} }
virtual ~WritePreparedTxnDB() {} virtual ~WritePreparedTxnDB();
virtual Status Initialize( virtual Status Initialize(
const std::vector<size_t>& compaction_enabled_cf_indices, const std::vector<size_t>& compaction_enabled_cf_indices,