summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2019-10-22 20:18:48 +0000
committerevergreen <evergreen@mongodb.com>2019-10-22 20:18:48 +0000
commit75ae384743271ffeccbf5719475008029295785f (patch)
tree835e10d40273199e447bdbfd9026982b0fa12ddd
parentb6f1f7f3c3455425d6169e9f9222eb4b9291697a (diff)
downloadmongo-75ae384743271ffeccbf5719475008029295785f.tar.gz
SERVER-44121 IndexBuildsManager::drainBackgroundWrites() accepts drain yield policy
-rw-r--r--src/mongo/db/catalog/index_builds_manager.cpp8
-rw-r--r--src/mongo/db/catalog/index_builds_manager.h3
-rw-r--r--src/mongo/db/index_builds_coordinator.cpp15
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(