diff options
author | Daniel Gottlieb <daniel.gottlieb@mongodb.com> | 2020-03-24 16:56:15 +1100 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-03-24 06:16:46 +0000 |
commit | 70c19c844d348774290fdadb9f9bbb0deb5301ad (patch) | |
tree | 72f9fef78ed9c5ee205d65830a6d991b762a5a51 | |
parent | b7d015ba4e8730ddcfcf7c5258b9ffa5cfb0949a (diff) | |
download | mongo-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.cpp | 39 | ||||
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h | 5 |
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); |