summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands
diff options
context:
space:
mode:
authorSara Golemon <sara.golemon@mongodb.com>2019-01-11 20:17:28 +0000
committerSara Golemon <sara.golemon@mongodb.com>2019-01-16 15:43:51 +0000
commite117f1107ba3713baf5962b9e2496142fe23f43b (patch)
treefdeecfdb440c3816a98f9c5ea3f2c3f8e6e2b60a /src/mongo/db/commands
parent0cb2195939494660334db8e9d0a52509caeb621c (diff)
downloadmongo-e117f1107ba3713baf5962b9e2496142fe23f43b.tar.gz
SERVER-38955 Convert AuthManager and FCV setParameters to IDL
Diffstat (limited to 'src/mongo/db/commands')
-rw-r--r--src/mongo/db/commands/SConscript2
-rw-r--r--src/mongo/db/commands/feature_compatibility_version.cpp116
-rw-r--r--src/mongo/db/commands/feature_compatibility_version.h6
-rw-r--r--src/mongo/db/commands/feature_compatibility_version.idl47
4 files changed, 100 insertions, 71 deletions
diff --git a/src/mongo/db/commands/SConscript b/src/mongo/db/commands/SConscript
index 35808b12da5..21d9929984a 100644
--- a/src/mongo/db/commands/SConscript
+++ b/src/mongo/db/commands/SConscript
@@ -188,6 +188,7 @@ env.Library(
target="mongod_fcv",
source=[
"feature_compatibility_version.cpp",
+ env.Idlc('feature_compatibility_version.idl')[0],
],
LIBDEPS=[
'feature_compatibility_parsers',
@@ -196,6 +197,7 @@ env.Library(
'$BUILD_DIR/mongo/db/commands',
'$BUILD_DIR/mongo/db/dbdirectclient',
'$BUILD_DIR/mongo/db/kill_sessions_local',
+ '$BUILD_DIR/mongo/idl/server_parameter',
'$BUILD_DIR/mongo/executor/egress_tag_closer_manager',
],
)
diff --git a/src/mongo/db/commands/feature_compatibility_version.cpp b/src/mongo/db/commands/feature_compatibility_version.cpp
index 0e2cc66572e..db37ae4819b 100644
--- a/src/mongo/db/commands/feature_compatibility_version.cpp
+++ b/src/mongo/db/commands/feature_compatibility_version.cpp
@@ -37,6 +37,7 @@
#include "mongo/base/status.h"
#include "mongo/db/catalog_raii.h"
#include "mongo/db/commands/feature_compatibility_version_documentation.h"
+#include "mongo/db/commands/feature_compatibility_version_gen.h"
#include "mongo/db/commands/feature_compatibility_version_parser.h"
#include "mongo/db/dbdirectclient.h"
#include "mongo/db/kill_sessions_local.h"
@@ -256,73 +257,58 @@ void FeatureCompatibilityVersion::_runUpdateCommand(OperationContext* opCtx,
/**
* Read-only server parameter for featureCompatibilityVersion.
*/
-class FeatureCompatibilityVersionParameter : public ServerParameter {
-public:
- FeatureCompatibilityVersionParameter()
- : ServerParameter(ServerParameterSet::getGlobal(),
- FeatureCompatibilityVersionParser::kParameterName.toString(),
- false, // allowedToChangeAtStartup
- false // allowedToChangeAtRuntime
- ) {}
-
- virtual void append(OperationContext* opCtx, BSONObjBuilder& b, const std::string& name) {
- BSONObjBuilder featureCompatibilityVersionBuilder(b.subobjStart(name));
- uassert(ErrorCodes::UnknownFeatureCompatibilityVersion,
- str::stream() << FeatureCompatibilityVersionParser::kParameterName
- << " is not yet known.",
- serverGlobalParams.featureCompatibility.isVersionInitialized());
- switch (serverGlobalParams.featureCompatibility.getVersion()) {
- case ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo42:
- featureCompatibilityVersionBuilder.append(
- FeatureCompatibilityVersionParser::kVersionField,
- FeatureCompatibilityVersionParser::kVersion42);
- return;
- case ServerGlobalParams::FeatureCompatibility::Version::kUpgradingTo42:
- featureCompatibilityVersionBuilder.append(
- FeatureCompatibilityVersionParser::kVersionField,
- FeatureCompatibilityVersionParser::kVersion40);
- featureCompatibilityVersionBuilder.append(
- FeatureCompatibilityVersionParser::kTargetVersionField,
- FeatureCompatibilityVersionParser::kVersion42);
- return;
- case ServerGlobalParams::FeatureCompatibility::Version::kDowngradingTo40:
- featureCompatibilityVersionBuilder.append(
- FeatureCompatibilityVersionParser::kVersionField,
- FeatureCompatibilityVersionParser::kVersion40);
- featureCompatibilityVersionBuilder.append(
- FeatureCompatibilityVersionParser::kTargetVersionField,
- FeatureCompatibilityVersionParser::kVersion40);
- return;
- case ServerGlobalParams::FeatureCompatibility::Version::kFullyDowngradedTo40:
- featureCompatibilityVersionBuilder.append(
- FeatureCompatibilityVersionParser::kVersionField,
- FeatureCompatibilityVersionParser::kVersion40);
- return;
- case ServerGlobalParams::FeatureCompatibility::Version::kUnsetDefault40Behavior:
- // getVersion() does not return this value.
- MONGO_UNREACHABLE;
- }
- }
-
- virtual Status set(const BSONElement& newValueElement) {
- return Status(ErrorCodes::IllegalOperation,
- str::stream()
- << FeatureCompatibilityVersionParser::kParameterName
- << " cannot be set via setParameter. See "
- << feature_compatibility_version_documentation::kCompatibilityLink
- << ".");
+// No ability to specify 'none' as set_at type,
+// so use 'startup' in the IDL file, then override to none here.
+FeatureCompatibilityVersionParameter::FeatureCompatibilityVersionParameter(StringData name,
+ ServerParameterType)
+ : ServerParameter(ServerParameterSet::getGlobal(), name, false, false) {}
+
+void FeatureCompatibilityVersionParameter::append(OperationContext* opCtx,
+ BSONObjBuilder& b,
+ const std::string& name) {
+ uassert(ErrorCodes::UnknownFeatureCompatibilityVersion,
+ str::stream() << name << " is not yet known.",
+ serverGlobalParams.featureCompatibility.isVersionInitialized());
+
+ BSONObjBuilder featureCompatibilityVersionBuilder(b.subobjStart(name));
+ switch (serverGlobalParams.featureCompatibility.getVersion()) {
+ case ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo42:
+ featureCompatibilityVersionBuilder.append(
+ FeatureCompatibilityVersionParser::kVersionField,
+ FeatureCompatibilityVersionParser::kVersion42);
+ return;
+ case ServerGlobalParams::FeatureCompatibility::Version::kUpgradingTo42:
+ featureCompatibilityVersionBuilder.append(
+ FeatureCompatibilityVersionParser::kVersionField,
+ FeatureCompatibilityVersionParser::kVersion40);
+ featureCompatibilityVersionBuilder.append(
+ FeatureCompatibilityVersionParser::kTargetVersionField,
+ FeatureCompatibilityVersionParser::kVersion42);
+ return;
+ case ServerGlobalParams::FeatureCompatibility::Version::kDowngradingTo40:
+ featureCompatibilityVersionBuilder.append(
+ FeatureCompatibilityVersionParser::kVersionField,
+ FeatureCompatibilityVersionParser::kVersion40);
+ featureCompatibilityVersionBuilder.append(
+ FeatureCompatibilityVersionParser::kTargetVersionField,
+ FeatureCompatibilityVersionParser::kVersion40);
+ return;
+ case ServerGlobalParams::FeatureCompatibility::Version::kFullyDowngradedTo40:
+ featureCompatibilityVersionBuilder.append(
+ FeatureCompatibilityVersionParser::kVersionField,
+ FeatureCompatibilityVersionParser::kVersion40);
+ return;
+ case ServerGlobalParams::FeatureCompatibility::Version::kUnsetDefault40Behavior:
+ // getVersion() does not return this value.
+ MONGO_UNREACHABLE;
}
+}
- virtual Status setFromString(const std::string& str) {
- return Status(ErrorCodes::IllegalOperation,
- str::stream()
- << FeatureCompatibilityVersionParser::kParameterName
- << " cannot be set via setParameter. See "
+Status FeatureCompatibilityVersionParameter::setFromString(const std::string&) {
+ return {ErrorCodes::IllegalOperation,
+ str::stream() << name() << " cannot be set via setParameter. See "
<< feature_compatibility_version_documentation::kCompatibilityLink
- << ".");
- }
-} featureCompatibilityVersionParameter;
-
-MONGO_EXPORT_STARTUP_SERVER_PARAMETER(internalValidateFeaturesAsMaster, bool, true);
+ << "."};
+}
} // namespace mongo
diff --git a/src/mongo/db/commands/feature_compatibility_version.h b/src/mongo/db/commands/feature_compatibility_version.h
index 77ff5a3b9fc..9c2871e9ef9 100644
--- a/src/mongo/db/commands/feature_compatibility_version.h
+++ b/src/mongo/db/commands/feature_compatibility_version.h
@@ -41,12 +41,6 @@ namespace mongo {
class BSONObj;
class OperationContext;
-/**
- * Startup parameter to ignore featureCompatibilityVersion checks. This parameter cannot be set if
- * the node is started with --replSet. This should never be set by end users.
- */
-extern bool internalValidateFeaturesAsMaster;
-
class FeatureCompatibilityVersion {
public:
/**
diff --git a/src/mongo/db/commands/feature_compatibility_version.idl b/src/mongo/db/commands/feature_compatibility_version.idl
new file mode 100644
index 00000000000..ca4ff5652a9
--- /dev/null
+++ b/src/mongo/db/commands/feature_compatibility_version.idl
@@ -0,0 +1,47 @@
+# Copyright (C) 2018-present MongoDB, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the Server Side Public License, version 1,
+# as published by MongoDB, Inc.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# Server Side Public License for more details.
+#
+# You should have received a copy of the Server Side Public License
+# along with this program. If not, see
+# <http://www.mongodb.com/licensing/server-side-public-license>.
+#
+# As a special exception, the copyright holders give permission to link the
+# code of portions of this program with the OpenSSL library under certain
+# conditions as described in each individual source file and distribute
+# linked combinations including the program with the OpenSSL library. You
+# must comply with the Server Side Public License in all respects for
+# all of the code used other than as permitted herein. If you modify file(s)
+# with this exception, you may extend this exception to your version of the
+# file(s), but you are not obligated to do so. If you do not wish to do so,
+# delete this exception statement from your version. If you delete this
+# exception statement from all source files in the program, then also delete
+# it in the license file.
+#
+
+global:
+ cpp_namespace: "mongo"
+
+server_parameters:
+ featureCompatibilityVersion:
+ description: 'Read-only view of current Feature Compatability Version'
+ # Actually, never.
+ set_at: startup
+ cpp_class:
+ name: FeatureCompatibilityVersionParameter
+ override_ctor: true
+ internalValidateFeaturesAsMaster:
+ description: >
+ Startup parameter to ignore featureCompatibilityVersion checks. This parameter cannot be set if
+ the node is started with --replSet. This should never be set by end users.
+ set_at: startup
+ cpp_vartype: bool
+ cpp_varname: gInternalValidateFeaturesAsMaster
+ default: true