summaryrefslogtreecommitdiff
path: root/src
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-02 15:34:41 +0000
commit9d5cbaf72b8a797d3c729e5e245b9842b8b2f90c (patch)
tree2b4122777b2421255ed16c140e70db1ea7ae9223 /src
parent9fcca8acb9a8995e007b5c4c06e5349a57e274e6 (diff)
downloadmongo-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.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_engine_mock.h3
-rw-r--r--src/mongo/db/storage/storage_init.cpp4
-rw-r--r--src/mongo/db/storage/two_phase_index_build_knobs.idl7
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