summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Mulrow <jack.mulrow@mongodb.com>2018-03-20 11:19:00 -0400
committerJack Mulrow <jack.mulrow@mongodb.com>2018-03-21 18:32:18 -0400
commitf0575e255effe2c2e9d909187c8ee73ab2431b29 (patch)
tree266a3b648dfc1f0a2a692942d0f68e2be7b6d2f6
parent965a04030e9f3f38f9cf3af846d5cf48a183e186 (diff)
downloadmongo-f0575e255effe2c2e9d909187c8ee73ab2431b29.tar.gz
SERVER-33971 Generate session sentinel oplog entry with wall clock time
(cherry picked from commit daa7dbf7e4564fc38b946416e3240caeb3c59b3a)
-rw-r--r--src/mongo/db/s/session_catalog_migration_source.cpp9
-rw-r--r--src/mongo/db/s/session_catalog_migration_source_test.cpp2
2 files changed, 8 insertions, 3 deletions
diff --git a/src/mongo/db/s/session_catalog_migration_source.cpp b/src/mongo/db/s/session_catalog_migration_source.cpp
index 4e295d8b990..77504342903 100644
--- a/src/mongo/db/s/session_catalog_migration_source.cpp
+++ b/src/mongo/db/s/session_catalog_migration_source.cpp
@@ -78,6 +78,7 @@ repl::OplogEntry makeOplogEntry(repl::OpTime opTime,
const BSONObj& oField,
const boost::optional<BSONObj>& o2Field,
const OperationSessionInfo& sessionInfo,
+ Date_t wallClockTime,
const boost::optional<StmtId>& statementId) {
return repl::OplogEntry(opTime, // optime
hash, // hash
@@ -90,7 +91,7 @@ repl::OplogEntry makeOplogEntry(repl::OpTime opTime,
o2Field, // o2
sessionInfo, // session info
boost::none, // upsert
- boost::none, // wall clock time
+ wallClockTime, // wall clock time
statementId, // statement id
boost::none, // optime of previous write within same transaction
boost::none, // pre-image optime
@@ -100,13 +101,14 @@ repl::OplogEntry makeOplogEntry(repl::OpTime opTime,
/**
* Creates a special "write history lost" sentinel oplog entry.
*/
-repl::OplogEntry makeSentinelOplogEntry(OperationSessionInfo sessionInfo) {
+repl::OplogEntry makeSentinelOplogEntry(OperationSessionInfo sessionInfo, Date_t wallClockTime) {
return makeOplogEntry({}, // optime
hashGenerator.nextInt64(), // hash
repl::OpTypeEnum::kNoop, // op type
{}, // o
Session::kDeadEndSentinel, // o2
sessionInfo, // session info
+ wallClockTime, // wall clock time
kIncompleteHistoryStmtId); // statement id
}
@@ -340,7 +342,8 @@ repl::OplogEntry SessionCatalogMigrationSource::SessionOplogIterator::getNext(
OperationSessionInfo sessionInfo;
sessionInfo.setSessionId(_record.getSessionId());
sessionInfo.setTxnNumber(_record.getTxnNum());
- auto oplog = makeSentinelOplogEntry(sessionInfo);
+ auto oplog = makeSentinelOplogEntry(
+ sessionInfo, opCtx->getServiceContext()->getFastClockSource()->now());
_writeHistoryIterator.reset();
diff --git a/src/mongo/db/s/session_catalog_migration_source_test.cpp b/src/mongo/db/s/session_catalog_migration_source_test.cpp
index f4940cfad40..dc2ae5677de 100644
--- a/src/mongo/db/s/session_catalog_migration_source_test.cpp
+++ b/src/mongo/db/s/session_catalog_migration_source_test.cpp
@@ -596,6 +596,8 @@ TEST_F(SessionCatalogMigrationSourceTest, ReturnsDeadEndSentinelForIncompleteHis
ASSERT_BSONOBJ_EQ(Session::kDeadEndSentinel, *oplog.getObject2());
ASSERT_TRUE(oplog.getStatementId());
ASSERT_EQ(kIncompleteHistoryStmtId, *oplog.getStatementId());
+ ASSERT_TRUE(oplog.getWallClockTime());
+ ASSERT_NE(Date_t{}, *oplog.getWallClockTime());
auto sessionInfo = oplog.getOperationSessionInfo();
ASSERT_TRUE(sessionInfo.getSessionId());