diff options
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/repl/session_update_tracker.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/s/session_catalog_migration_destination.cpp | 16 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/mongo/db/repl/session_update_tracker.cpp b/src/mongo/db/repl/session_update_tracker.cpp index 2d0ef6fc603..ec1575ea4c0 100644 --- a/src/mongo/db/repl/session_update_tracker.cpp +++ b/src/mongo/db/repl/session_update_tracker.cpp @@ -204,7 +204,7 @@ boost::optional<std::vector<OplogEntry>> SessionUpdateTracker::_updateSessionInf return {}; } - if (!entry.getObject2()) { + if (!entry.getObject2() || entry.getObject2()->isEmpty()) { return {}; } } diff --git a/src/mongo/db/s/session_catalog_migration_destination.cpp b/src/mongo/db/s/session_catalog_migration_destination.cpp index 36e37b27c84..7af9176b23d 100644 --- a/src/mongo/db/s/session_catalog_migration_destination.cpp +++ b/src/mongo/db/s/session_catalog_migration_destination.cpp @@ -55,6 +55,8 @@ namespace mongo { namespace { +MONGO_FAIL_POINT_DEFINE(interruptBeforeProcessingPrePostImageOriginatingOp); + const auto kOplogField = "oplog"; const WriteConcernOptions kMajorityWC(WriteConcernOptions::kMajority, WriteConcernOptions::SyncMode::UNSET, @@ -465,9 +467,21 @@ void SessionCatalogMigrationDestination::_retrieveSessionStateFromSource(Service lastOpTimeWaited = lastResult.oplogTime; } } + for (BSONArrayIteratorSorted oplogIter(oplogArray); oplogIter.more();) { + auto oplogEntry = oplogIter.next().Obj(); + interruptBeforeProcessingPrePostImageOriginatingOp.executeIf( + [&](const auto&) { + uasserted(6749200, + "Intentionally failing session migration before processing post/pre " + "image originating update oplog entry"); + }, + [&](const auto&) { + return !oplogEntry["preImageOpTime"].eoo() || + !oplogEntry["postImageOpTime"].eoo(); + }); try { - lastResult = processSessionOplog(oplogIter.next().Obj(), lastResult); + lastResult = processSessionOplog(oplogEntry, lastResult); } catch (const ExceptionFor<ErrorCodes::TransactionTooOld>&) { // This means that the server has a newer txnNumber than the oplog being // migrated, so just skip it |