diff options
Diffstat (limited to 'src/mongo/db/server_parameters.h')
-rw-r--r-- | src/mongo/db/server_parameters.h | 189 |
1 files changed, 102 insertions, 87 deletions
diff --git a/src/mongo/db/server_parameters.h b/src/mongo/db/server_parameters.h index 9c281e4499c..fed9a6b21e0 100644 --- a/src/mongo/db/server_parameters.h +++ b/src/mongo/db/server_parameters.h @@ -38,125 +38,140 @@ namespace mongo { - class ServerParameterSet; - class OperationContext; +class ServerParameterSet; +class OperationContext; - /** - * Lets you make server level settings easily configurable. - * Hooks into (set|get)Paramter, as well as command line processing - */ - class ServerParameter { - public: - typedef std::map< std::string, ServerParameter* > Map; +/** + * Lets you make server level settings easily configurable. + * Hooks into (set|get)Paramter, as well as command line processing + */ +class ServerParameter { +public: + typedef std::map<std::string, ServerParameter*> Map; - ServerParameter( ServerParameterSet* sps, const std::string& name, - bool allowedToChangeAtStartup, bool allowedToChangeAtRuntime ); - ServerParameter( ServerParameterSet* sps, const std::string& name ); - virtual ~ServerParameter(); + ServerParameter(ServerParameterSet* sps, + const std::string& name, + bool allowedToChangeAtStartup, + bool allowedToChangeAtRuntime); + ServerParameter(ServerParameterSet* sps, const std::string& name); + virtual ~ServerParameter(); - std::string name() const { return _name; } + std::string name() const { + return _name; + } - /** - * @return if you can set on command line or config file - */ - bool allowedToChangeAtStartup() const { return _allowedToChangeAtStartup; } + /** + * @return if you can set on command line or config file + */ + bool allowedToChangeAtStartup() const { + return _allowedToChangeAtStartup; + } - /** - * @param if you can use (get|set)Parameter - */ - bool allowedToChangeAtRuntime() const { return _allowedToChangeAtRuntime; } + /** + * @param if you can use (get|set)Parameter + */ + bool allowedToChangeAtRuntime() const { + return _allowedToChangeAtRuntime; + } - virtual void append(OperationContext* txn, BSONObjBuilder& b, const std::string& name ) = 0; + virtual void append(OperationContext* txn, BSONObjBuilder& b, const std::string& name) = 0; - virtual Status set( const BSONElement& newValueElement ) = 0; + virtual Status set(const BSONElement& newValueElement) = 0; - virtual Status setFromString( const std::string& str ) = 0; + virtual Status setFromString(const std::string& str) = 0; - private: - std::string _name; - bool _allowedToChangeAtStartup; - bool _allowedToChangeAtRuntime; - }; +private: + std::string _name; + bool _allowedToChangeAtStartup; + bool _allowedToChangeAtRuntime; +}; - class ServerParameterSet { - public: - typedef std::map< std::string, ServerParameter* > Map; +class ServerParameterSet { +public: + typedef std::map<std::string, ServerParameter*> Map; - void add( ServerParameter* sp ); + void add(ServerParameter* sp); - const Map& getMap() const { return _map; } + const Map& getMap() const { + return _map; + } - static ServerParameterSet* getGlobal(); + static ServerParameterSet* getGlobal(); - private: - Map _map; - }; +private: + Map _map; +}; +/** + * Implementation of ServerParameter for reading and writing a server parameter with a given + * name and type into a specific C++ variable. + */ +template <typename T> +class ExportedServerParameter : public ServerParameter { +public: /** - * Implementation of ServerParameter for reading and writing a server parameter with a given - * name and type into a specific C++ variable. + * Construct an ExportedServerParameter in parameter set "sps", named "name", whose storage + * is at "value". + * + * If allowedToChangeAtStartup is true, the parameter may be set at the command line, + * e.g. via the --setParameter switch. If allowedToChangeAtRuntime is true, the parameter + * may be set at runtime, e.g. via the setParameter command. */ - template<typename T> - class ExportedServerParameter : public ServerParameter { - public: - - /** - * Construct an ExportedServerParameter in parameter set "sps", named "name", whose storage - * is at "value". - * - * If allowedToChangeAtStartup is true, the parameter may be set at the command line, - * e.g. via the --setParameter switch. If allowedToChangeAtRuntime is true, the parameter - * may be set at runtime, e.g. via the setParameter command. - */ - ExportedServerParameter( ServerParameterSet* sps, const std::string& name, T* value, - bool allowedToChangeAtStartup, bool allowedToChangeAtRuntime) - : ServerParameter( sps, name, allowedToChangeAtStartup, allowedToChangeAtRuntime ), - _value( value ) {} - virtual ~ExportedServerParameter() {} - - virtual void append(OperationContext* txn, BSONObjBuilder& b, const std::string& name) { - b.append( name, *_value ); - } - - virtual Status set( const BSONElement& newValueElement ); - virtual Status set( const T& newValue ); - - virtual const T& get() const { return *_value; } - - virtual Status setFromString( const std::string& str ); - - protected: - - virtual Status validate( const T& potentialNewValue ){ return Status::OK(); } - - T* _value; // owned elsewhere - }; + ExportedServerParameter(ServerParameterSet* sps, + const std::string& name, + T* value, + bool allowedToChangeAtStartup, + bool allowedToChangeAtRuntime) + : ServerParameter(sps, name, allowedToChangeAtStartup, allowedToChangeAtRuntime), + _value(value) {} + virtual ~ExportedServerParameter() {} + + virtual void append(OperationContext* txn, BSONObjBuilder& b, const std::string& name) { + b.append(name, *_value); + } + + virtual Status set(const BSONElement& newValueElement); + virtual Status set(const T& newValue); + + virtual const T& get() const { + return *_value; + } + + virtual Status setFromString(const std::string& str); + +protected: + virtual Status validate(const T& potentialNewValue) { + return Status::OK(); + } + + T* _value; // owned elsewhere +}; } -#define MONGO_EXPORT_SERVER_PARAMETER_IMPL( NAME, TYPE, INITIAL_VALUE, \ - CHANGE_AT_STARTUP, CHANGE_AT_RUNTIME ) \ - TYPE NAME = INITIAL_VALUE; \ - ExportedServerParameter<TYPE> _##NAME(\ - ServerParameterSet::getGlobal(), #NAME, &NAME, CHANGE_AT_STARTUP, CHANGE_AT_RUNTIME ) +#define MONGO_EXPORT_SERVER_PARAMETER_IMPL( \ + NAME, TYPE, INITIAL_VALUE, CHANGE_AT_STARTUP, CHANGE_AT_RUNTIME) \ + TYPE NAME = INITIAL_VALUE; \ + ExportedServerParameter<TYPE> _##NAME( \ + ServerParameterSet::getGlobal(), #NAME, &NAME, CHANGE_AT_STARTUP, CHANGE_AT_RUNTIME) /** * Create a global variable of type "TYPE" named "NAME" with the given INITIAL_VALUE. The * value may be set at startup or at runtime. */ -#define MONGO_EXPORT_SERVER_PARAMETER( NAME, TYPE, INITIAL_VALUE ) \ - MONGO_EXPORT_SERVER_PARAMETER_IMPL( NAME, TYPE, INITIAL_VALUE, true, true ) +#define MONGO_EXPORT_SERVER_PARAMETER(NAME, TYPE, INITIAL_VALUE) \ + MONGO_EXPORT_SERVER_PARAMETER_IMPL(NAME, TYPE, INITIAL_VALUE, true, true) /** * Like MONGO_EXPORT_SERVER_PARAMETER, but the value may only be set at startup. */ -#define MONGO_EXPORT_STARTUP_SERVER_PARAMETER( NAME, TYPE, INITIAL_VALUE ) \ - MONGO_EXPORT_SERVER_PARAMETER_IMPL( NAME, TYPE, INITIAL_VALUE, true, false ) +#define MONGO_EXPORT_STARTUP_SERVER_PARAMETER(NAME, TYPE, INITIAL_VALUE) \ + MONGO_EXPORT_SERVER_PARAMETER_IMPL(NAME, TYPE, INITIAL_VALUE, true, false) /** * Like MONGO_EXPORT_SERVER_PARAMETER, but the value may only be set at runtime. */ -#define MONGO_EXPORT_RUNTIME_SERVER_PARAMETER( NAME, TYPE, INITIAL_VALUE ) \ - MONGO_EXPORT_SERVER_PARAMETER_IMPL( NAME, TYPE, INITIAL_VALUE, false, true ) +#define MONGO_EXPORT_RUNTIME_SERVER_PARAMETER(NAME, TYPE, INITIAL_VALUE) \ + MONGO_EXPORT_SERVER_PARAMETER_IMPL(NAME, TYPE, INITIAL_VALUE, false, true) #include "server_parameters_inline.h" |