summaryrefslogtreecommitdiff
path: root/src/mongo/base/initializer.h
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@10gen.com>2012-09-13 11:54:44 -0400
committerAndy Schwerin <schwerin@10gen.com>2012-09-25 15:43:02 -0400
commit1c9b2a7d236cce265db1b29a708959fe87ba56ca (patch)
tree6e70af1c59131ce2f9c3d6b8e0c0e1f9045652c4 /src/mongo/base/initializer.h
parent6825307dd6534086ffbf8442eb9b5ac3cd9c13d3 (diff)
downloadmongo-1c9b2a7d236cce265db1b29a708959fe87ba56ca.tar.gz
SERVER-5112 Initializer type and test.
Diffstat (limited to 'src/mongo/base/initializer.h')
-rw-r--r--src/mongo/base/initializer.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/mongo/base/initializer.h b/src/mongo/base/initializer.h
new file mode 100644
index 00000000000..7d03cd6e40c
--- /dev/null
+++ b/src/mongo/base/initializer.h
@@ -0,0 +1,71 @@
+/* Copyright 2012 10gen Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include "mongo/base/configuration_variable_manager.h"
+#include "mongo/base/disallow_copying.h"
+#include "mongo/base/initializer_context.h"
+#include "mongo/base/initializer_dependency_graph.h"
+#include "mongo/base/status.h"
+
+namespace mongo {
+
+ /**
+ * Class representing an initialization process.
+ *
+ * Such a process is described by a directed acyclic graph of initialization operations, the
+ * InitializerDependencyGraph, and a collection of mutable global state, the
+ * ConfigurationVariableManager. One constructs an initialization process by adding nodes and
+ * edges to the graph, and variable mappings in the variable manager. Then, one executes the
+ * process, causing each initialization operation to execute in an order that respects the
+ * programmer-established prerequistes.
+ */
+ class Initializer {
+ MONGO_DISALLOW_COPYING(Initializer);
+ public:
+ Initializer();
+ ~Initializer();
+
+ /**
+ * Get the initializer dependency graph, presumably for the purpose of adding more nodes.
+ */
+ InitializerDependencyGraph& getInitializerDependencyGraph() { return _graph; }
+
+ /**
+ * Get the configuration variable manager, for the purpose of describing more configurable
+ * variables.
+ */
+ ConfigurationVariableManager& getConfigurationVariableManager() { return _configVariables; }
+
+ /**
+ * Execute the initializer process, using the given argv and environment data as input.
+ *
+ * Returns Status::OK on success. All other returns constitute initialization failures,
+ * and the thing being initialized should be considered dead in the water.
+ */
+ Status execute(const InitializerContext::ArgumentVector& args,
+ const InitializerContext::EnvironmentMap& env) const;
+
+ private:
+
+ InitializerDependencyGraph _graph;
+ ConfigurationVariableManager _configVariables;
+ };
+
+} // namespace mongo