diff options
Diffstat (limited to 'src/mongo/db')
-rw-r--r-- | src/mongo/db/commands/shutdown_d.cpp | 9 | ||||
-rw-r--r-- | src/mongo/db/index_builds_coordinator.cpp | 10 | ||||
-rw-r--r-- | src/mongo/db/index_builds_coordinator.h | 7 |
3 files changed, 26 insertions, 0 deletions
diff --git a/src/mongo/db/commands/shutdown_d.cpp b/src/mongo/db/commands/shutdown_d.cpp index b6d8154c999..67e5572125d 100644 --- a/src/mongo/db/commands/shutdown_d.cpp +++ b/src/mongo/db/commands/shutdown_d.cpp @@ -34,7 +34,9 @@ #include <string> #include "mongo/db/commands/shutdown.h" +#include "mongo/db/index_builds_coordinator.h" #include "mongo/db/repl/replication_coordinator.h" +#include "mongo/util/log.h" namespace mongo { namespace { @@ -61,6 +63,13 @@ public: timeoutSecs = cmdObj["timeoutSecs"].numberLong(); } + if (!force) { + auto indexBuildsCoord = IndexBuildsCoordinator::get(opCtx); + auto numIndexBuilds = indexBuildsCoord->getActiveIndexBuildCount(opCtx); + log() << "Index builds in progress while processing shutdown command: " + << numIndexBuilds; + } + try { repl::ReplicationCoordinator::get(opCtx)->stepDown( opCtx, force, Seconds(timeoutSecs), Seconds(120)); diff --git a/src/mongo/db/index_builds_coordinator.cpp b/src/mongo/db/index_builds_coordinator.cpp index eda59265217..8779a50c857 100644 --- a/src/mongo/db/index_builds_coordinator.cpp +++ b/src/mongo/db/index_builds_coordinator.cpp @@ -694,6 +694,16 @@ bool containsUniqueIndexes(const std::vector<BSONObj>& specs) { } } // namespace +std::size_t IndexBuildsCoordinator::getActiveIndexBuildCount(OperationContext* opCtx) { + auto indexBuilds = _getIndexBuilds(); + // We use forEachIndexBuild() to log basic details on the current index builds and don't intend + // to modify any of the index builds, hence the no-op. + auto onIndexBuild = [](std::shared_ptr<ReplIndexBuildState> replState) {}; + forEachIndexBuild(indexBuilds, "index build still running: "_sd, onIndexBuild); + + return indexBuilds.size(); +} + void IndexBuildsCoordinator::onStepUp(OperationContext* opCtx) { log() << "IndexBuildsCoordinator::onStepUp - this node is stepping up to primary"; diff --git a/src/mongo/db/index_builds_coordinator.h b/src/mongo/db/index_builds_coordinator.h index 042c172ebca..99f0772b507 100644 --- a/src/mongo/db/index_builds_coordinator.h +++ b/src/mongo/db/index_builds_coordinator.h @@ -247,6 +247,13 @@ public: bool abortIndexBuildByBuildUUIDNoWait(OperationContext* opCtx, const UUID& buildUUID, const std::string& reason); + /** + * Returns number of index builds in process. + * + * Invoked when the node is processing a shutdown command, an admin command that is + * used to shut down the server gracefully. + */ + std::size_t getActiveIndexBuildCount(OperationContext* opCtx); /** * Invoked when the node enters the primary state. |