diff options
author | Eric Milkie <milkie@10gen.com> | 2017-11-08 14:55:45 -0500 |
---|---|---|
committer | Eric Milkie <milkie@10gen.com> | 2017-11-09 08:33:31 -0500 |
commit | 9a7ab2468ec94462890395cc591cd629d1dd9f7c (patch) | |
tree | 7b4ae36d6d1aa1aad74bfddc527d0a6789e03d7f | |
parent | 1b41f97e03fcbf0201f791b7b5dd510cc7435cc6 (diff) | |
download | mongo-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.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp | 2 |
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() { |