diff options
Diffstat (limited to 'src/mongo/db/catalog/multi_index_block.cpp')
-rw-r--r-- | src/mongo/db/catalog/multi_index_block.cpp | 7 |
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, |