diff options
-rw-r--r-- | src/mongo/db/catalog/index_builds_manager.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/catalog/index_builds_manager.h | 3 | ||||
-rw-r--r-- | src/mongo/db/index_builds_coordinator.cpp | 15 |
3 files changed, 19 insertions, 7 deletions
diff --git a/src/mongo/db/catalog/index_builds_manager.cpp b/src/mongo/db/catalog/index_builds_manager.cpp index ee6112a0569..82172e4b0cf 100644 --- a/src/mongo/db/catalog/index_builds_manager.cpp +++ b/src/mongo/db/catalog/index_builds_manager.cpp @@ -199,9 +199,11 @@ StatusWith<std::pair<long long, long long>> IndexBuildsManager::startBuildingInd return std::make_pair(numRecords, dataSize); } -Status IndexBuildsManager::drainBackgroundWrites(OperationContext* opCtx, - const UUID& buildUUID, - RecoveryUnit::ReadSource readSource) { +Status IndexBuildsManager::drainBackgroundWrites( + OperationContext* opCtx, + const UUID& buildUUID, + RecoveryUnit::ReadSource readSource, + IndexBuildInterceptor::DrainYieldPolicy drainYieldPolicy) { auto builder = _getBuilder(buildUUID); return builder->drainBackgroundWrites(opCtx, readSource); diff --git a/src/mongo/db/catalog/index_builds_manager.h b/src/mongo/db/catalog/index_builds_manager.h index f686efd38c0..0e0a393ec69 100644 --- a/src/mongo/db/catalog/index_builds_manager.h +++ b/src/mongo/db/catalog/index_builds_manager.h @@ -120,7 +120,8 @@ public: */ Status drainBackgroundWrites(OperationContext* opCtx, const UUID& buildUUID, - RecoveryUnit::ReadSource readSource); + RecoveryUnit::ReadSource readSource, + IndexBuildInterceptor::DrainYieldPolicy drainYieldPolicy); /** * Persists information in the index catalog entry to reflect the successful completion of the diff --git a/src/mongo/db/index_builds_coordinator.cpp b/src/mongo/db/index_builds_coordinator.cpp index 7b0a1b17559..411cc02c06f 100644 --- a/src/mongo/db/index_builds_coordinator.cpp +++ b/src/mongo/db/index_builds_coordinator.cpp @@ -1114,7 +1114,10 @@ void IndexBuildsCoordinator::_buildIndex( Lock::CollectionLock collLock(opCtx, dbAndUUID, MODE_IS); uassertStatusOK(_indexBuildsManager.drainBackgroundWrites( - opCtx, replState->buildUUID, RecoveryUnit::ReadSource::kUnset)); + opCtx, + replState->buildUUID, + RecoveryUnit::ReadSource::kUnset, + IndexBuildInterceptor::DrainYieldPolicy::kYield)); } if (MONGO_unlikely(hangAfterIndexBuildFirstDrain.shouldFail())) { @@ -1128,7 +1131,10 @@ void IndexBuildsCoordinator::_buildIndex( Lock::CollectionLock collLock(opCtx, dbAndUUID, MODE_S); uassertStatusOK(_indexBuildsManager.drainBackgroundWrites( - opCtx, replState->buildUUID, RecoveryUnit::ReadSource::kUnset)); + opCtx, + replState->buildUUID, + RecoveryUnit::ReadSource::kUnset, + IndexBuildInterceptor::DrainYieldPolicy::kNoYield)); } if (MONGO_unlikely(hangAfterIndexBuildSecondDrain.shouldFail())) { @@ -1191,7 +1197,10 @@ void IndexBuildsCoordinator::_buildIndex( // Perform the third and final drain after releasing a shared lock and reacquiring an // exclusive lock on the database. uassertStatusOK(_indexBuildsManager.drainBackgroundWrites( - opCtx, replState->buildUUID, RecoveryUnit::ReadSource::kUnset)); + opCtx, + replState->buildUUID, + RecoveryUnit::ReadSource::kUnset, + IndexBuildInterceptor::DrainYieldPolicy::kNoYield)); // Index constraint checking phase. uassertStatusOK( |