diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2017-10-25 11:42:55 -0400 |
---|---|---|
committer | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2017-10-26 12:59:12 -0400 |
commit | b5d1d9c4c0cfe0886cc65ef20327c51d79877a27 (patch) | |
tree | 48dc74c38abea56c62bbf4f6c4dd07d7af697c34 /src/mongo/db/op_observer_impl.cpp | |
parent | 7220059b0cbaf88807db96059695082d47655d5f (diff) | |
download | mongo-b5d1d9c4c0cfe0886cc65ef20327c51d79877a27.tar.gz |
SERVER-31281 Use separate wallclock time to track the last use of a transaction
Diffstat (limited to 'src/mongo/db/op_observer_impl.cpp')
-rw-r--r-- | src/mongo/db/op_observer_impl.cpp | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/mongo/db/op_observer_impl.cpp b/src/mongo/db/op_observer_impl.cpp index 5621f9da8a2..6da9b7f9599 100644 --- a/src/mongo/db/op_observer_impl.cpp +++ b/src/mongo/db/op_observer_impl.cpp @@ -77,13 +77,17 @@ void onWriteOpCompleted(OperationContext* opCtx, const NamespaceString& nss, Session* session, std::vector<StmtId> stmtIdsWritten, - const repl::OpTime& lastStmtIdWriteOpTime) { + const repl::OpTime& lastStmtIdWriteOpTime, + Date_t lastStmtIdWriteDate) { if (lastStmtIdWriteOpTime.isNull()) return; if (session) { - session->onWriteOpCompletedOnPrimary( - opCtx, *opCtx->getTxnNumber(), std::move(stmtIdsWritten), lastStmtIdWriteOpTime); + session->onWriteOpCompletedOnPrimary(opCtx, + *opCtx->getTxnNumber(), + std::move(stmtIdsWritten), + lastStmtIdWriteOpTime, + lastStmtIdWriteDate); } } @@ -304,8 +308,10 @@ void OpObserverImpl::onInserts(OperationContext* opCtx, bool fromMigrate) { Session* const session = opCtx->getTxnNumber() ? OperationContextSession::get(opCtx) : nullptr; - const auto opTimeList = repl::logInsertOps( - opCtx, nss, uuid, session, begin, end, fromMigrate, getWallClockTimeForOpLog(opCtx)); + const auto lastWriteDate = getWallClockTimeForOpLog(opCtx); + + const auto opTimeList = + repl::logInsertOps(opCtx, nss, uuid, session, begin, end, fromMigrate, lastWriteDate); auto css = CollectionShardingState::get(opCtx, nss.ns()); @@ -319,7 +325,7 @@ void OpObserverImpl::onInserts(OperationContext* opCtx, } } - auto lastOpTime = opTimeList.empty() ? repl::OpTime() : opTimeList.back(); + const auto lastOpTime = opTimeList.empty() ? repl::OpTime() : opTimeList.back(); if (nss.coll() == "system.js") { Scope::storedFuncMod(opCtx); } else if (nss.coll() == DurableViewCatalog::viewsCollectionName()) { @@ -339,7 +345,7 @@ void OpObserverImpl::onInserts(OperationContext* opCtx, return stmt.stmtId; }); - onWriteOpCompleted(opCtx, nss, session, stmtIdsWritten, lastOpTime); + onWriteOpCompleted(opCtx, nss, session, stmtIdsWritten, lastOpTime, lastWriteDate); } void OpObserverImpl::onUpdate(OperationContext* opCtx, const OplogUpdateEntryArgs& args) { @@ -389,8 +395,12 @@ void OpObserverImpl::onUpdate(OperationContext* opCtx, const OplogUpdateEntryArg SessionCatalog::get(opCtx)->invalidateSessions(opCtx, args.updatedDoc); } - onWriteOpCompleted( - opCtx, args.nss, session, std::vector<StmtId>{args.stmtId}, opTime.writeOpTime); + onWriteOpCompleted(opCtx, + args.nss, + session, + std::vector<StmtId>{args.stmtId}, + opTime.writeOpTime, + opTime.wallClockTime); } auto OpObserverImpl::aboutToDelete(OperationContext* opCtx, @@ -434,7 +444,8 @@ void OpObserverImpl::onDelete(OperationContext* opCtx, SessionCatalog::get(opCtx)->invalidateSessions(opCtx, deleteState.documentKey); } - onWriteOpCompleted(opCtx, nss, session, std::vector<StmtId>{stmtId}, opTime.writeOpTime); + onWriteOpCompleted( + opCtx, nss, session, std::vector<StmtId>{stmtId}, opTime.writeOpTime, opTime.wallClockTime); } void OpObserverImpl::onInternalOpMessage(OperationContext* opCtx, |