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-02 15:34:41 +0000 |
commit | 9d5cbaf72b8a797d3c729e5e245b9842b8b2f90c (patch) | |
tree | 2b4122777b2421255ed16c140e70db1ea7ae9223 /src | |
parent | 9fcca8acb9a8995e007b5c4c06e5349a57e274e6 (diff) | |
download | mongo-9d5cbaf72b8a797d3c729e5e245b9842b8b2f90c.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_engine_mock.h | 3 | ||||
-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 |
9 files changed, 38 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..9686085111d 100644 --- a/src/mongo/db/storage/storage_engine.h +++ b/src/mongo/db/storage/storage_engine.h @@ -423,6 +423,8 @@ public: */ virtual bool supportsOplogStones() const = 0; + virtual bool supportsResumableIndexBuilds() const = 0; + /** * Returns true if the storage engine supports deferring collection drops until the the storage * engine determines that the storage layer artifacts for the pending drops are no longer needed diff --git a/src/mongo/db/storage/storage_engine_impl.cpp b/src/mongo/db/storage/storage_engine_impl.cpp index 80c9a181a07..c353259901d 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" @@ -855,6 +856,13 @@ bool StorageEngineImpl::supportsOplogStones() const { return _engine->supportsOplogStones(); } +bool StorageEngineImpl::supportsResumableIndexBuilds() const { + return enableResumableIndexBuilds && supportsReadConcernMajority() && !isEphemeral() && + serverGlobalParams.featureCompatibility.isVersionInitialized() && + serverGlobalParams.featureCompatibility.getVersion() == + ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo46; +} + bool StorageEngineImpl::supportsPendingDrops() const { return supportsReadConcernMajority(); } diff --git a/src/mongo/db/storage/storage_engine_impl.h b/src/mongo/db/storage/storage_engine_impl.h index 70bc31830c3..a645a572e5c 100644 --- a/src/mongo/db/storage/storage_engine_impl.h +++ b/src/mongo/db/storage/storage_engine_impl.h @@ -155,6 +155,8 @@ public: bool supportsOplogStones() const final; + bool supportsResumableIndexBuilds() const final; + bool supportsPendingDrops() const final; void clearDropPendingState() final; diff --git a/src/mongo/db/storage/storage_engine_mock.h b/src/mongo/db/storage/storage_engine_mock.h index a4dfe3c677f..dddca9c832e 100644 --- a/src/mongo/db/storage/storage_engine_mock.h +++ b/src/mongo/db/storage/storage_engine_mock.h @@ -119,6 +119,9 @@ public: bool supportsOplogStones() const final { return false; } + bool supportsResumableIndexBuilds() const final { + return false; + } bool supportsPendingDrops() const final { return false; } 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 |