diff options
author | Jack Mulrow <jack.mulrow@mongodb.com> | 2017-07-24 15:52:16 -0400 |
---|---|---|
committer | Jack Mulrow <jack.mulrow@mongodb.com> | 2017-07-31 14:18:29 -0400 |
commit | 0a55ace0a362a5944fedbaec2d95b2d7cda750d6 (patch) | |
tree | fe13ddca99d37111ec5f7f32fc66146d82106d5f /src/mongo/db/session.cpp | |
parent | f305e8262eb4403e2ca1aaf7a5fa9adf9a80fdc7 (diff) | |
download | mongo-0a55ace0a362a5944fedbaec2d95b2d7cda750d6.tar.gz |
SERVER-30262 Update session info during batch apply in secondaries
Diffstat (limited to 'src/mongo/db/session.cpp')
-rw-r--r-- | src/mongo/db/session.cpp | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/mongo/db/session.cpp b/src/mongo/db/session.cpp index 0811996eb8f..242d549ed0a 100644 --- a/src/mongo/db/session.cpp +++ b/src/mongo/db/session.cpp @@ -63,15 +63,15 @@ boost::optional<SessionTxnRecord> loadSessionRecord(OperationContext* opCtx, return SessionTxnRecord::parse(ctx, result); } -/** - * Update the txnNum of the session record. Will create a new entry if the record with - * corresponding sessionId does not exist. - */ -void updateSessionRecordTxnNum(OperationContext* opCtx, - const LogicalSessionId& sessionId, - const TxnNumber& txnNum) { +} // namespace + +Session::Session(LogicalSessionId sessionId) : _sessionId(std::move(sessionId)) {} + +void Session::updateSessionRecord(OperationContext* opCtx, + const LogicalSessionId& sessionId, + const TxnNumber& txnNum, + const Timestamp& ts) { repl::UnreplicatedWritesBlock doNotReplicateWrites(opCtx); - Timestamp zeroTs; AutoGetCollection autoColl(opCtx, NamespaceString::kSessionTransactionsTableNamespace, MODE_IX); uassert(40526, @@ -86,7 +86,7 @@ void updateSessionRecordTxnNum(OperationContext* opCtx, updateRequest.setUpdates(BSON("$set" << BSON(SessionTxnRecord::kTxnNumFieldName << txnNum << SessionTxnRecord::kLastWriteOpTimeTsFieldName - << zeroTs))); + << ts))); updateRequest.setUpsert(true); auto updateResult = update(opCtx, autoColl.getDb(), updateRequest); @@ -95,10 +95,6 @@ void updateSessionRecordTxnNum(OperationContext* opCtx, updateResult.numDocsModified >= 1 || !updateResult.upserted.isEmpty()); } -} // namespace - -Session::Session(LogicalSessionId sessionId) : _sessionId(std::move(sessionId)) {} - void Session::begin(OperationContext* opCtx, const TxnNumber& txnNumber) { invariant(!opCtx->lockState()->isLocked()); invariant(!opCtx->lockState()->inAWriteUnitOfWork()); @@ -109,7 +105,7 @@ void Session::begin(OperationContext* opCtx, const TxnNumber& txnNumber) { // Previous read failed to retrieve the txn record, which means it does not exist yet, // so create a new entry. if (!_txnRecord) { - updateSessionRecordTxnNum(opCtx, _sessionId, txnNumber); + updateSessionRecord(opCtx, _sessionId, txnNumber, Timestamp()); _txnRecord.emplace(); _txnRecord->setSessionId(_sessionId); @@ -129,7 +125,7 @@ void Session::begin(OperationContext* opCtx, const TxnNumber& txnNumber) { _txnRecord->getTxnNum() <= txnNumber); if (txnNumber > _txnRecord->getTxnNum()) { - updateSessionRecordTxnNum(opCtx, _sessionId, txnNumber); + updateSessionRecord(opCtx, _sessionId, txnNumber, Timestamp()); _txnRecord->setTxnNum(txnNumber); _txnRecord->setLastWriteOpTimeTs(Timestamp()); } |