diff --git a/documentation/sphinx/source/release-notes/release-notes-630.rst b/documentation/sphinx/source/release-notes/release-notes-630.rst index b53a527578..d266a9db36 100644 --- a/documentation/sphinx/source/release-notes/release-notes-630.rst +++ b/documentation/sphinx/source/release-notes/release-notes-630.rst @@ -8,6 +8,7 @@ Release Notes ===== * Fix an issue where ``fdbcli --exec 'exclude no_wait ...'`` would incorrectly report that processes can safely be removed from the cluster. `(PR #3566) `_ +* When a configuration key is changed, it will always be included in ``status json`` output, even the value is reverted back to the default value. `(PR #3610) `_ 6.3.4 ===== diff --git a/fdbclient/DatabaseConfiguration.cpp b/fdbclient/DatabaseConfiguration.cpp index 6021052c36..814e8b112f 100644 --- a/fdbclient/DatabaseConfiguration.cpp +++ b/fdbclient/DatabaseConfiguration.cpp @@ -562,25 +562,21 @@ void DatabaseConfiguration::fromKeyValues(Standalone> raw setDefaultReplicationPolicy(); } -bool DatabaseConfiguration::isOverridden(const std::string& key) const { +bool DatabaseConfiguration::isOverridden(std::string key) const { + key = configKeysPrefix.toString() + key; + + if (mutableConfiguration.present() && mutableConfiguration.get().find(key) != mutableConfiguration.get().end()) { + return true; + } + + const int keyLen = key.size(); for (auto iter = rawConfiguration.begin(); iter != rawConfiguration.end(); ++iter) { - auto confKey = iter->key.removePrefix(configKeysPrefix).toString(); - if (key == confKey) { + const auto& rawConfKey = iter->key; + if (keyLen == rawConfKey.size() && + strncmp(key.c_str(), reinterpret_cast(rawConfKey.begin()), keyLen) == 0) { return true; } } - if (!mutableConfiguration.present()) { - return false; - } - - for (auto iter = mutableConfiguration.get().begin(); iter != mutableConfiguration.get().end(); ++iter) { - UNSTOPPABLE_ASSERT(iter->first.size() >= configKeysPrefix.size() && - iter->first.substr(0, configKeysPrefix.size()) == configKeysPrefix.toString()); - auto confKey = iter->first.substr(configKeysPrefix.size()); - if (key == confKey) { - return true; - } - } return false; } diff --git a/fdbclient/DatabaseConfiguration.h b/fdbclient/DatabaseConfiguration.h index c3573fed05..9ccdb2a287 100644 --- a/fdbclient/DatabaseConfiguration.h +++ b/fdbclient/DatabaseConfiguration.h @@ -231,7 +231,8 @@ private: void resetInternal(); void setDefaultReplicationPolicy(); - bool isOverridden(const std::string& key) const; + /// Check if the key is overridden by either mutableConfiguration or rawConfiguration + bool isOverridden(std::string key) const; }; #endif