summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Milkie <milkie@10gen.com>2017-11-08 14:55:45 -0500
committerEric Milkie <milkie@10gen.com>2017-11-09 08:33:31 -0500
commit9a7ab2468ec94462890395cc591cd629d1dd9f7c (patch)
tree7b4ae36d6d1aa1aad74bfddc527d0a6789e03d7f
parent1b41f97e03fcbf0201f791b7b5dd510cc7435cc6 (diff)
downloadmongo-9a7ab2468ec94462890395cc591cd629d1dd9f7c.tar.gz
SERVER-31882 start a transaction when beginning a UnitOfWork
In order to avoid implicitly starting a transaction under a hot mutex for vectored inserts, this commit explicitly starts a transaction when beginUnitOfWork is called.
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp2
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp2
2 files changed, 3 insertions, 1 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
index 4000740b2a0..1995e1ffa64 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
@@ -1671,7 +1671,7 @@ void WiredTigerRecordStore::cappedTruncateAfter(OperationContext* opCtx,
Status WiredTigerRecordStore::oplogDiskLocRegister(OperationContext* opCtx,
const Timestamp& opTime) {
- // This starts a new transaction and gives it a timestamp.
+ // This labels the current transaction with a timestamp.
// This is required for oplog visibility to work correctly, as WiredTiger uses the transaction
// list to determine where there are holes in the oplog.
return opCtx->recoveryUnit()->setTimestamp(SnapshotName(opTime));
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
index 8be67c449a5..67ddcb9d93d 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
@@ -119,6 +119,8 @@ void WiredTigerRecoveryUnit::beginUnitOfWork(OperationContext* opCtx) {
invariant(!_areWriteUnitOfWorksBanned);
invariant(!_inUnitOfWork);
_inUnitOfWork = true;
+ // Begin a new transaction, if one is not already started.
+ getSession();
}
void WiredTigerRecoveryUnit::commitUnitOfWork() {