summaryrefslogtreecommitdiff
path: root/src/mongo/db
diff options
context:
space:
mode:
authorGregory Noma <gregory.noma@gmail.com>2020-06-01 17:05:32 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-06-01 21:37:50 +0000
commit29e2a6737ef643bf663579c5c7b378a5c383c9b8 (patch)
treebcb5b2b5e59cc00610e89ff859b3d2f752542557 /src/mongo/db
parentd4db7598e6c5df02c2bd0778ee1a779f281cba0d (diff)
downloadmongo-29e2a6737ef643bf663579c5c7b378a5c383c9b8.tar.gz
SERVER-48413 Add evergreen builder for resumable index builds
Diffstat (limited to 'src/mongo/db')
-rw-r--r--src/mongo/db/index_builds_coordinator.cpp10
-rw-r--r--src/mongo/db/index_builds_coordinator.h2
-rw-r--r--src/mongo/db/storage/SConscript1
-rw-r--r--src/mongo/db/storage/storage_engine.h2
-rw-r--r--src/mongo/db/storage/storage_engine_impl.cpp8
-rw-r--r--src/mongo/db/storage/storage_engine_impl.h2
-rw-r--r--src/mongo/db/storage/storage_init.cpp4
-rw-r--r--src/mongo/db/storage/two_phase_index_build_knobs.idl7
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