diff options
author | Abdul Qadeer <abdul.qadeer@mongodb.com> | 2022-08-09 11:53:22 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-08-09 15:39:36 +0000 |
commit | 0d3499eef76a29bc28015113dd4cc7cb412abf27 (patch) | |
tree | 1a1216716ef2d96ac6314c407565a756b79533a3 /src/mongo | |
parent | abdedd367e2f331816354563f8ae95f6bb35c51d (diff) | |
download | mongo-0d3499eef76a29bc28015113dd4cc7cb412abf27.tar.gz |
SERVER-67492 Skip updating txn table for op=n when o2 is empty
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 |