summaryrefslogtreecommitdiff
path: root/src/mongo/db/global_environment_experiment.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/global_environment_experiment.h')
-rw-r--r--src/mongo/db/global_environment_experiment.h310
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