summaryrefslogtreecommitdiff
path: root/src/mongo/base/initializer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/base/initializer.cpp')
-rw-r--r--src/mongo/base/initializer.cpp36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/mongo/base/initializer.cpp b/src/mongo/base/initializer.cpp
index 8792ec2de97..1bb77c967ca 100644
--- a/src/mongo/base/initializer.cpp
+++ b/src/mongo/base/initializer.cpp
@@ -16,6 +16,7 @@
#include "mongo/base/initializer.h"
#include <iostream>
+#include "mongo/util/assert_util.h"
#include "mongo/base/global_initializer.h"
namespace mongo {
@@ -31,7 +32,7 @@ namespace mongo {
if (Status::OK() != status)
return status;
- InitializerContext context(args, env, &_configVariables);
+ InitializerContext context(args, env);
for (size_t i = 0; i < sortedNodes.size(); ++i) {
InitializerFunction fn = _graph.getInitializerFunction(sortedNodes[i]);
@@ -40,7 +41,12 @@ namespace mongo {
"topSort returned a node that has no associated function: \"" +
sortedNodes[i] + '"');
}
- status = fn(&context);
+ try {
+ status = fn(&context);
+ } catch( const DBException& xcp ) {
+ return xcp.toStatus();
+ }
+
if (Status::OK() != status)
return status;
}
@@ -49,21 +55,10 @@ namespace mongo {
Status runGlobalInitializers(const InitializerContext::ArgumentVector& args,
const InitializerContext::EnvironmentMap& env) {
-
return getGlobalInitializer().execute(args, env);
}
- void runGlobalInitializersOrDie(const InitializerContext::ArgumentVector& args,
- const InitializerContext::EnvironmentMap& env) {
-
- Status status = runGlobalInitializers(args, env);
- if (Status::OK() != status) {
- std::cerr << "Failed global initialization: " << status << std::endl;
- ::_exit(1);
- }
- }
-
- void runGlobalInitializersOrDie(int argc, const char* const* argv, const char* const* envp) {
+ Status runGlobalInitializers(int argc, const char* const* argv, const char* const* envp) {
InitializerContext::ArgumentVector args(argc);
std::copy(argv, argv + argc, args.begin());
@@ -73,14 +68,21 @@ namespace mongo {
for(; *envp; ++envp) {
const char* firstEqualSign = strchr(*envp, '=');
if (!firstEqualSign) {
- std::cerr << "Failed global initialization: malformed environment block\n";
- ::_exit(1);
+ return Status(ErrorCodes::BadValue, "malformed environment block");
}
env[std::string(*envp, firstEqualSign)] = std::string(firstEqualSign + 1);
}
}
- runGlobalInitializersOrDie(args, env);
+ return runGlobalInitializers(args, env);
+ }
+
+ void runGlobalInitializersOrDie(int argc, const char* const* argv, const char* const* envp) {
+ Status status = runGlobalInitializers(argc, argv, envp);
+ if (!status.isOK()) {
+ std::cerr << "Failed global initialization: " << status << std::endl;
+ ::_exit(1);
+ }
}
} // namespace mongo