summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/tenant_migration_recipient_service.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/tenant_migration_recipient_service.cpp')
-rw-r--r--src/mongo/db/repl/tenant_migration_recipient_service.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/mongo/db/repl/tenant_migration_recipient_service.cpp b/src/mongo/db/repl/tenant_migration_recipient_service.cpp
index 30c98b48af7..19f8a191489 100644
--- a/src/mongo/db/repl/tenant_migration_recipient_service.cpp
+++ b/src/mongo/db/repl/tenant_migration_recipient_service.cpp
@@ -525,14 +525,23 @@ TenantMigrationRecipientService::Instance::waitUntilMigrationReachesReturnAfterR
opCtx, returnAfterReachingTimestamp, donorRecipientOpTimePair.recipientOpTime));
}
_stopOrHangOnFailPoint(&fpBeforePersistingRejectReadsBeforeTimestamp, opCtx);
- uassertStatusOK(tenantMigrationRecipientEntryHelpers::updateStateDoc(opCtx, _stateDoc));
- auto writeOpTime = repl::ReplClientInfo::forClient(opCtx->getClient()).getLastOp();
+ auto lastOpBeforeUpdate = repl::ReplClientInfo::forClient(opCtx->getClient()).getLastOp();
+ uassertStatusOK(tenantMigrationRecipientEntryHelpers::updateStateDoc(opCtx, _stateDoc));
+ auto lastOpAfterUpdate = repl::ReplClientInfo::forClient(opCtx->getClient()).getLastOp();
auto replCoord = repl::ReplicationCoordinator::get(_serviceContext);
+ if (lastOpBeforeUpdate == lastOpAfterUpdate) {
+ // updateStateDoc was a no-op, but we still must ensure it's all-replicated.
+ lastOpAfterUpdate = uassertStatusOK(replCoord->getLatestWriteOpTime(opCtx));
+ LOGV2(6096900,
+ "Fixed write timestamp for recording rejectReadsBeforeTimestamp",
+ "newWriteOpTime"_attr = lastOpAfterUpdate);
+ }
+
WriteConcernOptions writeConcern(repl::ReplSetConfig::kConfigAllWriteConcernName,
WriteConcernOptions::SyncMode::NONE,
opCtx->getWriteConcern().wTimeout);
- uassertStatusOK(replCoord->awaitReplication(opCtx, writeOpTime, writeConcern).status);
+ uassertStatusOK(replCoord->awaitReplication(opCtx, lastOpAfterUpdate, writeConcern).status);
_stopOrHangOnFailPoint(&fpAfterWaitForRejectReadsBeforeTimestamp, opCtx);