summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Wlodarek <gregory.wlodarek@mongodb.com>2019-05-20 10:41:02 -0400
committerGregory Wlodarek <gregory.wlodarek@mongodb.com>2019-05-20 15:45:51 -0400
commitad2b5ce357ad424355f364c4c4cb6c2acae84be1 (patch)
tree4d7c5b77035f5d3cadf551a8c131b45a52772e53
parent542d00d1a3a23d608f0a6e991684ea010cbc62ae (diff)
downloadmongo-ad2b5ce357ad424355f364c4c4cb6c2acae84be1.tar.gz
SERVER-41009 TimestampMonitor and getOldestActiveTimestamp shouldn't conflict with PBWM lock
-rw-r--r--src/mongo/db/storage/kv/kv_storage_engine.cpp3
-rw-r--r--src/mongo/db/transaction_participant.cpp3
2 files changed, 6 insertions, 0 deletions
diff --git a/src/mongo/db/storage/kv/kv_storage_engine.cpp b/src/mongo/db/storage/kv/kv_storage_engine.cpp
index fe1ea716d72..4b55155450c 100644
--- a/src/mongo/db/storage/kv/kv_storage_engine.cpp
+++ b/src/mongo/db/storage/kv/kv_storage_engine.cpp
@@ -845,6 +845,9 @@ void KVStorageEngine::TimestampMonitor::startup() {
uOpCtx = client->makeOperationContext();
opCtx = uOpCtx.get();
}
+
+ ShouldNotConflictWithSecondaryBatchApplicationBlock shouldNotConflictBlock(
+ opCtx->lockState());
Lock::GlobalLock lock(opCtx, MODE_IS);
// The checkpoint timestamp is not cached in mongod and needs to be fetched with a
diff --git a/src/mongo/db/transaction_participant.cpp b/src/mongo/db/transaction_participant.cpp
index 548453ab45a..0260a0509f5 100644
--- a/src/mongo/db/transaction_participant.cpp
+++ b/src/mongo/db/transaction_participant.cpp
@@ -349,6 +349,9 @@ TransactionParticipant::getOldestActiveTimestamp(Timestamp stableTimestamp) {
auto opCtx = cc().makeOperationContext();
auto nss = NamespaceString::kSessionTransactionsTableNamespace;
auto deadline = Date_t::now() + Milliseconds(100);
+
+ ShouldNotConflictWithSecondaryBatchApplicationBlock shouldNotConflictBlock(
+ opCtx->lockState());
Lock::DBLock dbLock(opCtx.get(), nss.db(), MODE_IS, deadline);
Lock::CollectionLock collLock(opCtx.get(), nss, MODE_IS, deadline);