summaryrefslogtreecommitdiff
path: root/src/mongo/db/server_parameters.h
diff options
context:
space:
mode:
authorSpencer T Brody <spencer@mongodb.com>2018-05-09 17:10:42 -0400
committerSpencer T Brody <spencer@mongodb.com>2018-05-10 18:49:39 -0400
commit9c001939d82c4522a8cb071b4285b1f1718b81cf (patch)
tree6f7ddbf57e96d5eab9bf88bc70e67023ed0c891d /src/mongo/db/server_parameters.h
parent7e74b2384e355aa4d9beef601ade3dcc9f642dea (diff)
downloadmongo-9c001939d82c4522a8cb071b4285b1f1718b81cf.tar.gz
SERVER-34345 Make it easy to provide validator functions for server parameters
Diffstat (limited to 'src/mongo/db/server_parameters.h')
-rw-r--r--src/mongo/db/server_parameters.h51
1 files changed, 50 insertions, 1 deletions
diff --git a/src/mongo/db/server_parameters.h b/src/mongo/db/server_parameters.h
index 04edefa3754..d0a5686876a 100644
--- a/src/mongo/db/server_parameters.h
+++ b/src/mongo/db/server_parameters.h
@@ -392,7 +392,33 @@ protected:
storage_type* const _value; // owned elsewhere
};
-}
+
+/**
+ * An exported server parameter with a validation function.
+ */
+template <typename T, ServerParameterType paramType>
+class ExportedServerParameterWithValidator : public ExportedServerParameter<T, paramType> {
+public:
+ using storage_type = typename server_parameter_storage_type<T, paramType>::value_type;
+ using validator_function = stdx::function<Status(const T&)>;
+
+ ExportedServerParameterWithValidator(ServerParameterSet* sps,
+ const std::string& name,
+ storage_type* value,
+ validator_function validator)
+ : ExportedServerParameter<T, paramType>(sps, name, value),
+ _validator(std::move(validator)) {}
+
+protected:
+ Status validate(const T& potentialNewValue) final {
+ return _validator(potentialNewValue);
+ }
+
+private:
+ validator_function _validator;
+};
+} // namespace mongo
+
#define MONGO_EXPORT_SERVER_PARAMETER_IMPL(NAME, TYPE, INITIAL_VALUE, PARAM_TYPE) \
server_parameter_storage_type<TYPE, PARAM_TYPE>::value_type NAME(INITIAL_VALUE); \
@@ -417,3 +443,26 @@ protected:
*/
#define MONGO_EXPORT_RUNTIME_SERVER_PARAMETER(NAME, TYPE, INITIAL_VALUE) \
MONGO_EXPORT_SERVER_PARAMETER_IMPL(NAME, TYPE, INITIAL_VALUE, ServerParameterType::kRuntimeOnly)
+
+
+/**
+ * Copies of above macros, but with the ability to pass in a callable to validate the input
+ */
+#define MONGO_EXPORT_SERVER_PARAMETER_IMPL_WITH_VALIDATOR( \
+ NAME, TYPE, INITIAL_VALUE, VALIDATOR, PARAM_TYPE) \
+ server_parameter_storage_type<TYPE, PARAM_TYPE>::value_type NAME(INITIAL_VALUE); \
+ ExportedServerParameterWithValidator<TYPE, PARAM_TYPE> _##NAME( \
+ ServerParameterSet::getGlobal(), #NAME, &NAME, VALIDATOR)
+
+
+#define MONGO_EXPORT_SERVER_PARAMETER_WITH_VALIDATOR(NAME, TYPE, INITIAL_VALUE, VALIDATOR) \
+ MONGO_EXPORT_SERVER_PARAMETER_IMPL_WITH_VALIDATOR( \
+ NAME, TYPE, INITIAL_VALUE, VALIDATOR, ServerParameterType::kStartupAndRuntime)
+
+#define MONGO_EXPORT_STARTUP_SERVER_PARAMETER_WITH_VALIDATOR(NAME, TYPE, INITIAL_VALUE, VALIDATOR) \
+ MONGO_EXPORT_SERVER_PARAMETER_IMPL_WITH_VALIDATOR( \
+ NAME, TYPE, INITIAL_VALUE, VALIDATOR, ServerParameterType::kStartupOnly)
+
+#define MONGO_EXPORT_RUNTIME_SERVER_PARAMETER_WITH_VALIDATOR(NAME, TYPE, INITIAL_VALUE, VALIDATOR) \
+ MONGO_EXPORT_SERVER_PARAMETER_IMPL_WITH_VALIDATOR( \
+ NAME, TYPE, INITIAL_VALUE, VALIDATOR, ServerParameterType::kRuntimeOnly)