summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorAbdul Qadeer <abdul.qadeer@mongodb.com>2022-08-09 11:53:22 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-08-09 15:39:36 +0000
commit0d3499eef76a29bc28015113dd4cc7cb412abf27 (patch)
tree1a1216716ef2d96ac6314c407565a756b79533a3 /src/mongo
parentabdedd367e2f331816354563f8ae95f6bb35c51d (diff)
downloadmongo-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.cpp2
-rw-r--r--src/mongo/db/s/session_catalog_migration_destination.cpp16
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