diff options
author | Spencer T Brody <spencer@mongodb.com> | 2018-05-09 17:10:42 -0400 |
---|---|---|
committer | Spencer T Brody <spencer@mongodb.com> | 2018-05-10 18:49:39 -0400 |
commit | 9c001939d82c4522a8cb071b4285b1f1718b81cf (patch) | |
tree | 6f7ddbf57e96d5eab9bf88bc70e67023ed0c891d /src/mongo/db/server_parameters.h | |
parent | 7e74b2384e355aa4d9beef601ade3dcc9f642dea (diff) | |
download | mongo-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.h | 51 |
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) |