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:
parent
ec6c5383d0
commit
17c6325e8a
@ -954,5 +954,12 @@ bool WritePreparedTxnDB::MaybeUpdateOldCommitMap(
|
||||
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
|
||||
#endif // ROCKSDB_LITE
|
||||
|
@ -191,7 +191,7 @@ class WritePreparedTxnDB : public PessimisticTransactionDB {
|
||||
Init(txn_db_options);
|
||||
}
|
||||
|
||||
virtual ~WritePreparedTxnDB() {}
|
||||
virtual ~WritePreparedTxnDB();
|
||||
|
||||
virtual Status Initialize(
|
||||
const std::vector<size_t>& compaction_enabled_cf_indices,
|
||||
|
Loading…
x
Reference in New Issue
Block a user