diff options
author | Gregory Noma <gregory.noma@gmail.com> | 2020-06-01 17:05:32 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-06-01 21:37:50 +0000 |
commit | 29e2a6737ef643bf663579c5c7b378a5c383c9b8 (patch) | |
tree | bcb5b2b5e59cc00610e89ff859b3d2f752542557 /src | |
parent | d4db7598e6c5df02c2bd0778ee1a779f281cba0d (diff) | |
download | mongo-29e2a6737ef643bf663579c5c7b378a5c383c9b8.tar.gz |
SERVER-48413 Add evergreen builder for resumable index builds
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/index_builds_coordinator.cpp | 10 | ||||
-rw-r--r-- | src/mongo/db/index_builds_coordinator.h | 2 | ||||
-rw-r--r-- | src/mongo/db/storage/SConscript | 1 | ||||
-rw-r--r-- | src/mongo/db/storage/storage_engine.h | 2 | ||||
-rw-r--r-- | src/mongo/db/storage/storage_engine_impl.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/storage/storage_engine_impl.h | 2 | ||||
-rw-r--r-- | src/mongo/db/storage/storage_init.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/storage/two_phase_index_build_knobs.idl | 7 |
8 files changed, 35 insertions, 1 deletions
diff --git a/src/mongo/db/index_builds_coordinator.cpp b/src/mongo/db/index_builds_coordinator.cpp index 5d083373387..fb1527d1158 100644 --- a/src/mongo/db/index_builds_coordinator.cpp +++ b/src/mongo/db/index_builds_coordinator.cpp @@ -2580,4 +2580,14 @@ std::vector<BSONObj> IndexBuildsCoordinator::normalizeIndexSpecs( }); return normalSpecs; } + +bool IndexBuildsCoordinator::supportsResumableIndexBuilds() const { + auto serviceContext = getGlobalServiceContext(); + invariant(serviceContext); + + auto storageEngine = serviceContext->getStorageEngine(); + invariant(storageEngine); + + return storageEngine->supportsResumableIndexBuilds(); +} } // namespace mongo diff --git a/src/mongo/db/index_builds_coordinator.h b/src/mongo/db/index_builds_coordinator.h index fa843e73a1c..db8040fd227 100644 --- a/src/mongo/db/index_builds_coordinator.h +++ b/src/mongo/db/index_builds_coordinator.h @@ -446,6 +446,8 @@ public: std::shared_ptr<ReplIndexBuildState> replState, IndexBuildAction signal) = 0; + bool supportsResumableIndexBuilds() const; + private: /** * Registers an index build so that the rest of the system can discover it. diff --git a/src/mongo/db/storage/SConscript b/src/mongo/db/storage/SConscript index 4d5f1ef273b..7d2bc4aba98 100644 --- a/src/mongo/db/storage/SConscript +++ b/src/mongo/db/storage/SConscript @@ -520,6 +520,7 @@ env.Library( '$BUILD_DIR/mongo/db/logical_clock', '$BUILD_DIR/mongo/db/storage/storage_repair_observer', '$BUILD_DIR/mongo/db/catalog/collection_catalog_helper', + 'two_phase_index_build_knobs_idl', ], ) diff --git a/src/mongo/db/storage/storage_engine.h b/src/mongo/db/storage/storage_engine.h index 8d7df601b5a..75ade54103f 100644 --- a/src/mongo/db/storage/storage_engine.h +++ b/src/mongo/db/storage/storage_engine.h @@ -430,6 +430,8 @@ public: */ virtual bool supportsPendingDrops() const = 0; + virtual bool supportsResumableIndexBuilds() const = 0; + /** * Returns a set of drop pending idents inside the storage engine. */ diff --git a/src/mongo/db/storage/storage_engine_impl.cpp b/src/mongo/db/storage/storage_engine_impl.cpp index 80c9a181a07..bd0318aa798 100644 --- a/src/mongo/db/storage/storage_engine_impl.cpp +++ b/src/mongo/db/storage/storage_engine_impl.cpp @@ -46,6 +46,7 @@ #include "mongo/db/storage/kv/kv_engine.h" #include "mongo/db/storage/kv/temporary_kv_record_store.h" #include "mongo/db/storage/storage_repair_observer.h" +#include "mongo/db/storage/two_phase_index_build_knobs_gen.h" #include "mongo/db/unclean_shutdown.h" #include "mongo/logv2/log.h" #include "mongo/stdx/unordered_map.h" @@ -859,6 +860,13 @@ bool StorageEngineImpl::supportsPendingDrops() const { return supportsReadConcernMajority(); } +bool StorageEngineImpl::supportsResumableIndexBuilds() const { + return enableResumableIndexBuilds && supportsReadConcernMajority() && !isEphemeral() && + serverGlobalParams.featureCompatibility.isVersionInitialized() && + serverGlobalParams.featureCompatibility.getVersion() == + ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo46; +} + void StorageEngineImpl::clearDropPendingState() { _dropPendingIdentReaper.clearDropPendingState(); } diff --git a/src/mongo/db/storage/storage_engine_impl.h b/src/mongo/db/storage/storage_engine_impl.h index 70bc31830c3..af4170d3245 100644 --- a/src/mongo/db/storage/storage_engine_impl.h +++ b/src/mongo/db/storage/storage_engine_impl.h @@ -157,6 +157,8 @@ public: bool supportsPendingDrops() const final; + bool supportsResumableIndexBuilds() const final; + void clearDropPendingState() final; SnapshotManager* getSnapshotManager() const final; diff --git a/src/mongo/db/storage/storage_init.cpp b/src/mongo/db/storage/storage_init.cpp index 1da860e1e0d..a00940b5d2d 100644 --- a/src/mongo/db/storage/storage_init.cpp +++ b/src/mongo/db/storage/storage_init.cpp @@ -69,7 +69,9 @@ public: << "supportsSnapshotReadConcern" << engine->supportsReadConcernSnapshot() << "readOnly" << storageGlobalParams.readOnly << "persistent" << !engine->isEphemeral() << "backupCursorOpen" - << backupCursorHooks->isBackupCursorOpen()); + << backupCursorHooks->isBackupCursorOpen() + << "supportsResumableIndexBuilds" + << engine->supportsResumableIndexBuilds()); } } storageSSS; diff --git a/src/mongo/db/storage/two_phase_index_build_knobs.idl b/src/mongo/db/storage/two_phase_index_build_knobs.idl index 2dd6bed23e9..11c4203b399 100644 --- a/src/mongo/db/storage/two_phase_index_build_knobs.idl +++ b/src/mongo/db/storage/two_phase_index_build_knobs.idl @@ -52,3 +52,10 @@ server_parameters: default: 3 validator: gte: 0 + + enableResumableIndexBuilds: + description: "Support for using resumable index builds." + set_at: startup + cpp_vartype: bool + cpp_varname: "enableResumableIndexBuilds" + default: false |