summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gottlieb <daniel.gottlieb@mongodb.com>2020-03-24 16:56:15 +1100
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-03-24 06:16:46 +0000
commit70c19c844d348774290fdadb9f9bbb0deb5301ad (patch)
tree72f9fef78ed9c5ee205d65830a6d991b762a5a51
parentb7d015ba4e8730ddcfcf7c5258b9ffa5cfb0949a (diff)
downloadmongo-70c19c844d348774290fdadb9f9bbb0deb5301ad.tar.gz
SERVER-47006 Implement a downgrade floor between 4.4 and 4.2
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp39
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h5
2 files changed, 29 insertions, 15 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
index 4044e5481e5..a393905d2fc 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
@@ -135,9 +135,8 @@ bool WiredTigerFileVersion::shouldDowngrade(bool readOnly,
if (!serverGlobalParams.featureCompatibility.isVersionInitialized()) {
// If the FCV document hasn't been read, trust the WT compatibility. MongoD will
// downgrade to the same compatibility it discovered on startup.
- return _startupVersion == StartupVersion::IS_42 ||
- _startupVersion == StartupVersion::IS_40 || _startupVersion == StartupVersion::IS_36 ||
- _startupVersion == StartupVersion::IS_34;
+ return _startupVersion == StartupVersion::IS_44_FCV_42 ||
+ _startupVersion == StartupVersion::IS_42;
}
if (serverGlobalParams.featureCompatibility.getVersion() !=
@@ -166,22 +165,18 @@ bool WiredTigerFileVersion::shouldDowngrade(bool readOnly,
std::string WiredTigerFileVersion::getDowngradeString() {
if (!serverGlobalParams.featureCompatibility.isVersionInitialized()) {
- invariant(_startupVersion != StartupVersion::IS_44);
+ invariant(_startupVersion != StartupVersion::IS_44_FCV_44);
switch (_startupVersion) {
- case StartupVersion::IS_34:
- return "compatibility=(release=2.9)";
- case StartupVersion::IS_36:
- return "compatibility=(release=3.0)";
- case StartupVersion::IS_40:
- return "compatibility=(release=3.1)";
+ case StartupVersion::IS_44_FCV_42:
+ return "compatibility=(release=3.3)";
case StartupVersion::IS_42:
- return "compatibility=(release=3.2)";
+ return "compatibility=(release=3.3)";
default:
MONGO_UNREACHABLE;
}
}
- return "compatibility=(release=3.2)";
+ return "compatibility=(release=3.3)";
}
using std::set;
@@ -1017,12 +1012,28 @@ void WiredTigerKVEngine::appendGlobalStats(BSONObjBuilder& b) {
}
void WiredTigerKVEngine::_openWiredTiger(const std::string& path, const std::string& wtOpenConfig) {
- std::string configStr = wtOpenConfig + ",compatibility=(require_min=\"3.1.0\")";
-
+ // MongoDB 4.4 will always run in compatibility version 10.0.
+ std::string configStr = wtOpenConfig + ",compatibility=(require_min=\"10.0.0\")";
auto wtEventHandler = _eventHandler.getWtEventHandler();
int ret = wiredtiger_open(path.c_str(), wtEventHandler, configStr.c_str(), &_conn);
if (!ret) {
+ _fileVersion = {WiredTigerFileVersion::StartupVersion::IS_44_FCV_44};
+ return;
+ }
+
+ // MongoDB 4.4 doing clean shutdown in FCV 4.2 will use compatibility version 3.3.
+ configStr = wtOpenConfig + ",compatibility=(require_min=\"3.3.0\")";
+ ret = wiredtiger_open(path.c_str(), wtEventHandler, configStr.c_str(), &_conn);
+ if (!ret) {
+ _fileVersion = {WiredTigerFileVersion::StartupVersion::IS_44_FCV_42};
+ return;
+ }
+
+ // MongoDB 4.2 uses compatibility version 3.2.
+ configStr = wtOpenConfig + ",compatibility=(require_min=\"3.2.0\")";
+ ret = wiredtiger_open(path.c_str(), wtEventHandler, configStr.c_str(), &_conn);
+ if (!ret) {
_fileVersion = {WiredTigerFileVersion::StartupVersion::IS_42};
return;
}
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h
index 35d34b32d9e..9ae3015e8cd 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h
@@ -59,7 +59,10 @@ class WiredTigerEngineRuntimeConfigParameter;
class WiredTigerMaxCacheOverflowSizeGBParameter;
struct WiredTigerFileVersion {
- enum class StartupVersion { IS_34, IS_36, IS_40, IS_42, IS_44 };
+ // MongoDB 4.4+ will not open on datafiles left behind by 4.2.5 and earlier. MongoDB 4.4
+ // shutting down in FCV 4.2 will leave data files that 4.2.6+ will understand
+ // (IS_44_FCV_42). MongoDB 4.2.x always writes out IS_42.
+ enum class StartupVersion { IS_42, IS_44_FCV_42, IS_44_FCV_44 };
StartupVersion _startupVersion;
bool shouldDowngrade(bool readOnly, bool repairMode, bool hasRecoveryTimestamp);