summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorAbdul Qadeer <abdul.qadeer@mongodb.com>2022-08-02 14:27:38 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-08-04 16:24:48 +0000
commit89bc2f7533ecf43dd57c413b40066928e4c24e24 (patch)
treeb80b31325c4986573fbd3f35eea3f76007555637 /src/mongo
parentc500300c081eab9bbf42dccff05a0588cfc59821 (diff)
downloadmongo-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.cpp3
-rw-r--r--src/mongo/db/s/session_catalog_migration_destination.cpp15
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