summaryrefslogtreecommitdiff
path: root/src/mongo/db/index_builds_coordinator.cpp
diff options
context:
space:
mode:
authorJordi Olivares Provencio <jordi.olivares-provencio@mongodb.com>2022-02-22 14:03:15 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-02-22 14:53:09 +0000
commita0eb65c457a250baada836c0b6165e93449cd079 (patch)
tree148b6b9e645cbcb87ebfed7a9b76531583931519 /src/mongo/db/index_builds_coordinator.cpp
parente7a3d3c2b66a22a1303d664eaaad78d05ed42b7c (diff)
downloadmongo-a0eb65c457a250baada836c0b6165e93449cd079.tar.gz
SERVER-57432 Forbid yielding MODE_X/MODE_S locks
Diffstat (limited to 'src/mongo/db/index_builds_coordinator.cpp')
-rw-r--r--src/mongo/db/index_builds_coordinator.cpp14
1 files changed, 3 insertions, 11 deletions
diff --git a/src/mongo/db/index_builds_coordinator.cpp b/src/mongo/db/index_builds_coordinator.cpp
index a7a7b468cde..dfd59f9f620 100644
--- a/src/mongo/db/index_builds_coordinator.cpp
+++ b/src/mongo/db/index_builds_coordinator.cpp
@@ -1590,6 +1590,9 @@ void IndexBuildsCoordinator::createIndex(OperationContext* opCtx,
auto onInitFn = MultiIndexBlock::makeTimestampedIndexOnInitFn(opCtx, collection.get());
IndexBuildsManager::SetupOptions options;
options.indexConstraints = indexConstraints;
+ // As the caller has a MODE_X lock on the collection, we can safely assume they want to
+ // build the index in the foreground instead of yielding during element insertion.
+ options.method = IndexBuildMethod::kForeground;
uassertStatusOK(_indexBuildsManager.setUpIndexBuild(
opCtx, collection, {spec}, buildUUID, onInitFn, options));
} catch (DBException& ex) {
@@ -1618,17 +1621,6 @@ void IndexBuildsCoordinator::createIndex(OperationContext* opCtx,
});
uassertStatusOK(_indexBuildsManager.startBuildingIndex(opCtx, collection.get(), buildUUID));
- // Retry indexing records that failed key generation, but only if we are primary. Secondaries
- // rely on the primary's decision to commit as assurance that it has checked all key generation
- // errors on its behalf.
- auto replCoord = repl::ReplicationCoordinator::get(opCtx);
- if (replCoord->canAcceptWritesFor(opCtx, nss)) {
- uassertStatusOK(
- _indexBuildsManager.retrySkippedRecords(opCtx, buildUUID, collection.get()));
- }
- uassertStatusOK(
- _indexBuildsManager.checkIndexConstraintViolations(opCtx, collection.get(), buildUUID));
-
auto opObserver = opCtx->getServiceContext()->getOpObserver();
auto onCreateEachFn = [&](const BSONObj& spec) {
opObserver->onCreateIndex(opCtx, collection->ns(), collectionUUID, spec, fromMigrate);