summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/multi_index_block.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/catalog/multi_index_block.cpp')
-rw-r--r--src/mongo/db/catalog/multi_index_block.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/mongo/db/catalog/multi_index_block.cpp b/src/mongo/db/catalog/multi_index_block.cpp
index 1ad98278b22..47fe26aa513 100644
--- a/src/mongo/db/catalog/multi_index_block.cpp
+++ b/src/mongo/db/catalog/multi_index_block.cpp
@@ -324,10 +324,13 @@ StatusWith<std::vector<BSONObj>> MultiIndexBlock::init(
collection->getIndexCatalog()->prepareInsertDeleteOptions(
opCtx, collection->ns(), descriptor, &index.options);
- // Index builds always relax constraints and check for violations at commit-time.
+ // Foreground index builds have to check for duplicates. Other index builds can relax
+ // constraints and check for violations at commit-time.
index.options.getKeysMode =
InsertDeleteOptions::ConstraintEnforcementMode::kRelaxConstraints;
- index.options.dupsAllowed = true;
+ index.options.dupsAllowed = _method == IndexBuildMethod::kForeground
+ ? !descriptor->unique() || _ignoreUnique
+ : true;
index.options.fromIndexBuilder = true;
LOGV2(20384,