diff options
Diffstat (limited to 'src/mongo/db/global_environment_experiment.h')
-rw-r--r-- | src/mongo/db/global_environment_experiment.h | 310 |
1 files changed, 157 insertions, 153 deletions
diff --git a/src/mongo/db/global_environment_experiment.h b/src/mongo/db/global_environment_experiment.h index 2298c118f81..f27a5d045ef 100644 --- a/src/mongo/db/global_environment_experiment.h +++ b/src/mongo/db/global_environment_experiment.h @@ -34,177 +34,181 @@ namespace mongo { - class OperationContext; +class OperationContext; +/** + * Classes that implement this interface can receive notification on killOp. + * + * See GlobalEnvironmentExperiment::registerKillOpListener() for more information, including + * limitations on the lifetime of registered listeners. + */ +class KillOpListenerInterface { +public: /** - * Classes that implement this interface can receive notification on killOp. - * - * See GlobalEnvironmentExperiment::registerKillOpListener() for more information, including - * limitations on the lifetime of registered listeners. + * Will be called *after* ops have been told they should die. + * Callback must not fail. */ - class KillOpListenerInterface { - public: - /** - * Will be called *after* ops have been told they should die. - * Callback must not fail. - */ - virtual void interrupt(unsigned opId) = 0; - virtual void interruptAll() = 0; - - protected: - // Should not delete through a pointer of this type - virtual ~KillOpListenerInterface() {} - }; - - class StorageFactoriesIterator { - MONGO_DISALLOW_COPYING(StorageFactoriesIterator); - public: - virtual ~StorageFactoriesIterator() { } - virtual bool more() const = 0; - virtual const StorageEngine::Factory* const & next() = 0; - virtual const StorageEngine::Factory* const & get() const = 0; - protected: - StorageFactoriesIterator() { } - }; - - class GlobalEnvironmentExperiment { - MONGO_DISALLOW_COPYING(GlobalEnvironmentExperiment); - public: - virtual ~GlobalEnvironmentExperiment() { } - - // - // Storage - // - - /** - * Register a storage engine. Called from a MONGO_INIT that depends on initializiation of - * the global environment. - * Ownership of 'factory' is transferred to global environment upon registration. - */ - virtual void registerStorageEngine(const std::string& name, - const StorageEngine::Factory* factory) = 0; - - /** - * Returns true if "name" refers to a registered storage engine. - */ - virtual bool isRegisteredStorageEngine(const std::string& name) = 0; - - /** - * Produce an iterator over all registered storage engine factories. - * Caller owns the returned object and is responsible for deleting when finished. - */ - virtual StorageFactoriesIterator* makeStorageFactoriesIterator() = 0; - - /** - * Set the storage engine. The engine must have been registered via registerStorageEngine. - */ - virtual void setGlobalStorageEngine(const std::string& name) = 0; - - /** - * Shuts down storage engine cleanly and releases any locks on mongod.lock. - */ - virtual void shutdownGlobalStorageEngineCleanly() = 0; - - /** - * Return the storage engine instance we're using. - */ - virtual StorageEngine* getGlobalStorageEngine() = 0; - - // - // Global operation management. This may not belong here and there may be too many methods - // here. - // - - /** - * Signal all OperationContext(s) that they have been killed. - */ - virtual void setKillAllOperations() = 0; - - /** - * Reset the operation kill state after a killAllOperations. - * Used for testing. - */ - virtual void unsetKillAllOperations() = 0; - - /** - * Get the state for killing all operations. - */ - virtual bool getKillAllOperations() = 0; - - /** - * @param i opid of operation to kill - * @return if operation was found - **/ - virtual bool killOperation(unsigned int opId) = 0; - - /** - * Kills all operations that have a Client that is associated with an incoming user - * connection, except for the one associated with txn. - */ - virtual void killAllUserOperations(const OperationContext* txn) = 0; - - /** - * Registers a listener to be notified each time an op is killed. - * - * listener does not become owned by the environment. As there is currently no way to - * unregister, the listener object must outlive this GlobalEnvironmentExperiment object. - */ - virtual void registerKillOpListener(KillOpListenerInterface* listener) = 0; - - /** - * Returns a new OperationContext. Caller owns pointer. - */ - virtual OperationContext* newOpCtx() = 0; - - protected: - GlobalEnvironmentExperiment() { } - }; + virtual void interrupt(unsigned opId) = 0; + virtual void interruptAll() = 0; + +protected: + // Should not delete through a pointer of this type + virtual ~KillOpListenerInterface() {} +}; + +class StorageFactoriesIterator { + MONGO_DISALLOW_COPYING(StorageFactoriesIterator); + +public: + virtual ~StorageFactoriesIterator() {} + virtual bool more() const = 0; + virtual const StorageEngine::Factory* const& next() = 0; + virtual const StorageEngine::Factory* const& get() const = 0; + +protected: + StorageFactoriesIterator() {} +}; + +class GlobalEnvironmentExperiment { + MONGO_DISALLOW_COPYING(GlobalEnvironmentExperiment); + +public: + virtual ~GlobalEnvironmentExperiment() {} + + // + // Storage + // /** - * Returns true if there is a globalEnvironment. + * Register a storage engine. Called from a MONGO_INIT that depends on initializiation of + * the global environment. + * Ownership of 'factory' is transferred to global environment upon registration. */ - bool hasGlobalEnvironment(); + virtual void registerStorageEngine(const std::string& name, + const StorageEngine::Factory* factory) = 0; /** - * Returns the singleton GlobalEnvironmentExperiment for this server process. - * - * Fatal if there is currently no globalEnvironment. - * - * Caller does not own pointer. + * Returns true if "name" refers to a registered storage engine. */ - GlobalEnvironmentExperiment* getGlobalEnvironment(); + virtual bool isRegisteredStorageEngine(const std::string& name) = 0; /** - * Sets the GlobalEnvironmentExperiment. If 'globalEnvironment' is NULL, un-sets and deletes - * the current GlobalEnvironmentExperiment. - * - * Takes ownership of 'globalEnvironment'. + * Produce an iterator over all registered storage engine factories. + * Caller owns the returned object and is responsible for deleting when finished. + */ + virtual StorageFactoriesIterator* makeStorageFactoriesIterator() = 0; + + /** + * Set the storage engine. The engine must have been registered via registerStorageEngine. + */ + virtual void setGlobalStorageEngine(const std::string& name) = 0; + + /** + * Shuts down storage engine cleanly and releases any locks on mongod.lock. + */ + virtual void shutdownGlobalStorageEngineCleanly() = 0; + + /** + * Return the storage engine instance we're using. + */ + virtual StorageEngine* getGlobalStorageEngine() = 0; + + // + // Global operation management. This may not belong here and there may be too many methods + // here. + // + + /** + * Signal all OperationContext(s) that they have been killed. + */ + virtual void setKillAllOperations() = 0; + + /** + * Reset the operation kill state after a killAllOperations. + * Used for testing. */ - void setGlobalEnvironment(GlobalEnvironmentExperiment* globalEnvironment); + virtual void unsetKillAllOperations() = 0; /** - * Shortcut for querying the storage engine about whether it supports document-level locking. - * If this call becomes too expensive, we could cache the value somewhere so we don't have to - * fetch the storage engine every time. + * Get the state for killing all operations. */ - bool supportsDocLocking(); + virtual bool getKillAllOperations() = 0; + + /** + * @param i opid of operation to kill + * @return if operation was found + **/ + virtual bool killOperation(unsigned int opId) = 0; /** - * Returns true if the storage engine in use is MMAPV1. + * Kills all operations that have a Client that is associated with an incoming user + * connection, except for the one associated with txn. */ - bool isMMAPV1(); - - /* - * Extracts the storageEngine bson from the CollectionOptions provided. Loops through each - * provided storageEngine and asks the matching registered storage engine if the - * collection/index options are valid. Returns an error if the collection/index options are - * invalid. - * If no matching registered storage engine is found, return an error. - * Validation function 'func' must be either: - * - &StorageEngine::Factory::validateCollectionStorageOptions; or - * - &StorageEngine::Factory::validateIndexStorageOptions + virtual void killAllUserOperations(const OperationContext* txn) = 0; + + /** + * Registers a listener to be notified each time an op is killed. + * + * listener does not become owned by the environment. As there is currently no way to + * unregister, the listener object must outlive this GlobalEnvironmentExperiment object. */ - Status validateStorageOptions(const BSONObj& storageEngineOptions, - stdx::function<Status (const StorageEngine::Factory* const, const BSONObj&)> validateFunc); + virtual void registerKillOpListener(KillOpListenerInterface* listener) = 0; + + /** + * Returns a new OperationContext. Caller owns pointer. + */ + virtual OperationContext* newOpCtx() = 0; + +protected: + GlobalEnvironmentExperiment() {} +}; + +/** + * Returns true if there is a globalEnvironment. + */ +bool hasGlobalEnvironment(); + +/** + * Returns the singleton GlobalEnvironmentExperiment for this server process. + * + * Fatal if there is currently no globalEnvironment. + * + * Caller does not own pointer. + */ +GlobalEnvironmentExperiment* getGlobalEnvironment(); + +/** + * Sets the GlobalEnvironmentExperiment. If 'globalEnvironment' is NULL, un-sets and deletes + * the current GlobalEnvironmentExperiment. + * + * Takes ownership of 'globalEnvironment'. + */ +void setGlobalEnvironment(GlobalEnvironmentExperiment* globalEnvironment); + +/** + * Shortcut for querying the storage engine about whether it supports document-level locking. + * If this call becomes too expensive, we could cache the value somewhere so we don't have to + * fetch the storage engine every time. + */ +bool supportsDocLocking(); + +/** + * Returns true if the storage engine in use is MMAPV1. + */ +bool isMMAPV1(); + +/* + * Extracts the storageEngine bson from the CollectionOptions provided. Loops through each + * provided storageEngine and asks the matching registered storage engine if the + * collection/index options are valid. Returns an error if the collection/index options are + * invalid. + * If no matching registered storage engine is found, return an error. + * Validation function 'func' must be either: + * - &StorageEngine::Factory::validateCollectionStorageOptions; or + * - &StorageEngine::Factory::validateIndexStorageOptions + */ +Status validateStorageOptions( + const BSONObj& storageEngineOptions, + stdx::function<Status(const StorageEngine::Factory* const, const BSONObj&)> validateFunc); } // namespace mongo |