summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/collection_cloner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/collection_cloner.cpp')
-rw-r--r--src/mongo/db/repl/collection_cloner.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mongo/db/repl/collection_cloner.cpp b/src/mongo/db/repl/collection_cloner.cpp
index 0066240cc2f..fe1cc4b34a2 100644
--- a/src/mongo/db/repl/collection_cloner.cpp
+++ b/src/mongo/db/repl/collection_cloner.cpp
@@ -29,6 +29,8 @@
#define MONGO_LOGV2_DEFAULT_COMPONENT ::mongo::logv2::LogComponent::kReplicationInitialSync
+#include "mongo/db/index/index_descriptor_fwd.h"
+#include "mongo/db/service_context.h"
#include "mongo/platform/basic.h"
#include "mongo/base/string_data.h"
@@ -206,8 +208,20 @@ BaseCloner::AfterStageBehavior CollectionCloner::listIndexesStage() {
"source"_attr = getSource());
}
+ const auto storageEngine = getGlobalServiceContext()->getStorageEngine();
// Parse the index specs into their respective state, ready or unfinished.
for (auto&& spec : indexSpecs) {
+ // Sanitize storage engine options to remove options which might not apply to this node. See
+ // SERVER-68122.
+ if (auto storageEngineElem = spec.getField(IndexDescriptor::kStorageEngineFieldName)) {
+ auto sanitizedStorageEngineOpts =
+ storageEngine->getSanitizedStorageOptionsForSecondaryReplication(
+ storageEngineElem.embeddedObject());
+ fassert(6812200, sanitizedStorageEngineOpts);
+ spec = spec.addFields(BSON(IndexDescriptor::kStorageEngineFieldName
+ << sanitizedStorageEngineOpts.getValue()));
+ }
+
if (spec.hasField("clustered")) {
invariant(_collectionOptions.clusteredIndex);
invariant(spec.getBoolField("clustered") == true);