summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/initial_syncer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/initial_syncer.cpp')
-rw-r--r--src/mongo/db/repl/initial_syncer.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/mongo/db/repl/initial_syncer.cpp b/src/mongo/db/repl/initial_syncer.cpp
index 4660bf29f14..471bb84f034 100644
--- a/src/mongo/db/repl/initial_syncer.cpp
+++ b/src/mongo/db/repl/initial_syncer.cpp
@@ -1011,6 +1011,28 @@ void InitialSyncer::_rollbackCheckerCheckForRollbackCallback(
return;
}
+ // Set UUIDs for all non-replicated collections on secondaries. See comment in
+ // ReplicationCoordinatorExternalStateImpl::initializeReplSetStorage() for the explanation of
+ // why we do this and why it is not necessary for sharded clusters.
+ if (serverGlobalParams.clusterRole != ClusterRole::ShardServer &&
+ serverGlobalParams.clusterRole != ClusterRole::ConfigServer) {
+ const NamespaceString nss("admin", "system.version");
+ auto opCtx = makeOpCtx();
+ auto statusWithUUID = _storage->getCollectionUUID(opCtx.get(), nss);
+ if (!statusWithUUID.isOK()) {
+ onCompletionGuard->setResultAndCancelRemainingWork_inlock(lock,
+ statusWithUUID.getStatus());
+ return;
+ }
+ if (statusWithUUID.getValue()) {
+ auto schemaStatus = _storage->upgradeUUIDSchemaVersionNonReplicated(opCtx.get());
+ if (!schemaStatus.isOK()) {
+ onCompletionGuard->setResultAndCancelRemainingWork_inlock(lock, schemaStatus);
+ return;
+ }
+ }
+ }
+
// Success!
onCompletionGuard->setResultAndCancelRemainingWork_inlock(lock, _lastApplied);
}