diff options
author | Jordi Olivares Provencio <jordi.olivares-provencio@mongodb.com> | 2022-02-22 14:03:15 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-02-22 14:53:09 +0000 |
commit | a0eb65c457a250baada836c0b6165e93449cd079 (patch) | |
tree | 148b6b9e645cbcb87ebfed7a9b76531583931519 /src/mongo/db/index_builds_coordinator.cpp | |
parent | e7a3d3c2b66a22a1303d664eaaad78d05ed42b7c (diff) | |
download | mongo-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.cpp | 14 |
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); |