diff options
Diffstat (limited to 'src/mongo/db/commands/validate.cpp')
-rw-r--r-- | src/mongo/db/commands/validate.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/mongo/db/commands/validate.cpp b/src/mongo/db/commands/validate.cpp index c1d787a49bb..bdde2c3156a 100644 --- a/src/mongo/db/commands/validate.cpp +++ b/src/mongo/db/commands/validate.cpp @@ -212,8 +212,25 @@ public: return CollectionValidation::ValidateMode::kForeground; }(); - auto repairMode = repair ? CollectionValidation::RepairMode::kRepair - : CollectionValidation::RepairMode::kNone; + auto repairMode = [&] { + switch (mode) { + case CollectionValidation::ValidateMode::kForeground: + case CollectionValidation::ValidateMode::kForegroundFull: + case CollectionValidation::ValidateMode::kForegroundFullIndexOnly: + // Foreground validation may not repair data while running as a replica set node + // because we do not have timestamps that are required to perform writes. + if (replCoord->isReplEnabled()) { + return CollectionValidation::RepairMode::kNone; + } + if (repair) { + return CollectionValidation::RepairMode::kFixErrors; + } + // Foreground validation will adjust multikey metadata by default. + return CollectionValidation::RepairMode::kAdjustMultikey; + default: + return CollectionValidation::RepairMode::kNone; + } + }(); if (repair) { opCtx->recoveryUnit()->setPrepareConflictBehavior( |