diff options
author | Abdul Qadeer <abdul.qadeer@mongodb.com> | 2022-08-02 14:27:38 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-08-04 16:24:48 +0000 |
commit | 89bc2f7533ecf43dd57c413b40066928e4c24e24 (patch) | |
tree | b80b31325c4986573fbd3f35eea3f76007555637 /src/mongo | |
parent | c500300c081eab9bbf42dccff05a0588cfc59821 (diff) | |
download | mongo-89bc2f7533ecf43dd57c413b40066928e4c24e24.tar.gz |
SERVER-67492 Skip updating txn table for op=n when o2 is empty
(cherry picked from commit 3f6c0845204161336f052d3665817ad5adc1a1b5)
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/repl/session_update_tracker.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/s/session_catalog_migration_destination.cpp | 15 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/mongo/db/repl/session_update_tracker.cpp b/src/mongo/db/repl/session_update_tracker.cpp index 87c12cf5463..aa5f55e01e5 100644 --- a/src/mongo/db/repl/session_update_tracker.cpp +++ b/src/mongo/db/repl/session_update_tracker.cpp @@ -34,6 +34,7 @@ #include "mongo/db/repl/session_update_tracker.h" #include "mongo/db/namespace_string.h" +#include "mongo/db/ops/write_ops_retryability.h" #include "mongo/db/repl/oplog_entry.h" #include "mongo/db/server_options.h" #include "mongo/db/session.h" @@ -212,7 +213,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 f00a2215460..07339c079a1 100644 --- a/src/mongo/db/s/session_catalog_migration_destination.cpp +++ b/src/mongo/db/s/session_catalog_migration_destination.cpp @@ -58,6 +58,8 @@ namespace mongo { namespace { +MONGO_FAIL_POINT_DEFINE(interruptBeforeProcessingPrePostImageOriginatingOp); + const auto kOplogField = "oplog"; const WriteConcernOptions kMajorityWC(WriteConcernOptions::kMajority, WriteConcernOptions::SyncMode::UNSET, @@ -491,10 +493,19 @@ 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["needsRetryImage"].eoo(); }); try { - lastResult = processSessionOplog( - oplogIter.next().Obj(), lastResult, service, _cancellationToken); + lastResult = + processSessionOplog(oplogEntry, lastResult, service, _cancellationToken); } catch (const ExceptionFor<ErrorCodes::TransactionTooOld>&) { // This means that the server has a newer txnNumber than the oplog being // migrated, so just skip it |