summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/db/mongod_options.cpp22
-rw-r--r--src/mongo/db/server_options_helpers.cpp23
-rw-r--r--src/mongo/db/server_options_test.cpp222
3 files changed, 245 insertions, 22 deletions
diff --git a/src/mongo/db/mongod_options.cpp b/src/mongo/db/mongod_options.cpp
index a1b2aa56997..141fa00ae38 100644
--- a/src/mongo/db/mongod_options.cpp
+++ b/src/mongo/db/mongod_options.cpp
@@ -126,20 +126,6 @@ Status addMongodOptions(moe::OptionSection* options) {
// Diagnostic Options
- general_options
- .addOptionChaining("operationProfiling.slowOpThresholdMs",
- "slowms",
- moe::Int,
- "value of slow for profile and console log")
- .setDefault(moe::Value(100));
-
- general_options
- .addOptionChaining("operationProfiling.slowOpSampleRate",
- "slowOpSampleRate",
- moe::Double,
- "fraction of slow ops to include in the profile and console log")
- .setDefault(moe::Value(1.0));
-
general_options.addOptionChaining("profile", "profile", moe::Int, "0=off 1=slow, 2=all")
.setSources(moe::SourceAllLegacy);
@@ -921,14 +907,6 @@ Status storeMongodOptions(const moe::Environment& params) {
}
}
- if (params.count("operationProfiling.slowOpThresholdMs")) {
- serverGlobalParams.slowMS = params["operationProfiling.slowOpThresholdMs"].as<int>();
- }
-
- if (params.count("operationProfiling.slowOpSampleRate")) {
- serverGlobalParams.sampleRate = params["operationProfiling.slowOpSampleRate"].as<double>();
- }
-
if (params.count("storage.syncPeriodSecs")) {
storageGlobalParams.syncdelay = params["storage.syncPeriodSecs"].as<double>();
if (storageGlobalParams.syncdelay < 0 ||
diff --git a/src/mongo/db/server_options_helpers.cpp b/src/mongo/db/server_options_helpers.cpp
index c521a8921ab..b3e25106d89 100644
--- a/src/mongo/db/server_options_helpers.cpp
+++ b/src/mongo/db/server_options_helpers.cpp
@@ -421,6 +421,20 @@ Status addGeneralServerOptions(moe::OptionSection* options) {
.hidden()
.setSources(moe::SourceAllLegacy);
+ options
+ ->addOptionChaining("operationProfiling.slowOpThresholdMs",
+ "slowms",
+ moe::Int,
+ "value of slow for profile and console log")
+ .setDefault(moe::Value(100));
+
+ options
+ ->addOptionChaining("operationProfiling.slowOpSampleRate",
+ "slowOpSampleRate",
+ moe::Double,
+ "fraction of slow ops to include in the profile and console log")
+ .setDefault(moe::Value(1.0));
+
auto ret = addMessageCompressionOptions(options, false);
if (!ret.isOK()) {
return ret;
@@ -1086,6 +1100,15 @@ Status storeServerOptions(const moe::Environment& params) {
return Status(ErrorCodes::BadValue,
"--transitionToAuth must be used with keyFile or x509 authentication");
}
+
+ if (params.count("operationProfiling.slowOpThresholdMs")) {
+ serverGlobalParams.slowMS = params["operationProfiling.slowOpThresholdMs"].as<int>();
+ }
+
+ if (params.count("operationProfiling.slowOpSampleRate")) {
+ serverGlobalParams.sampleRate = params["operationProfiling.slowOpSampleRate"].as<double>();
+ }
+
#ifdef MONGO_CONFIG_SSL
ret = storeSSLServerOptions(params);
if (!ret.isOK()) {
diff --git a/src/mongo/db/server_options_test.cpp b/src/mongo/db/server_options_test.cpp
index 82e4d06dd10..be4eff361d2 100644
--- a/src/mongo/db/server_options_test.cpp
+++ b/src/mongo/db/server_options_test.cpp
@@ -555,6 +555,228 @@ TEST(SetupOptions, MissingBinaryName) {
ASSERT_NOT_OK(::mongo::setupServerOptions(argv));
}
+TEST(SetupOptions, SlowMsCommandLineParamParsesSuccessfully) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--slowms");
+ argv.push_back("300");
+ std::map<std::string, std::string> env_map;
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::validateServerOptions(environment));
+ ASSERT_OK(::mongo::canonicalizeServerOptions(&environment));
+ ASSERT_OK(::mongo::setupServerOptions(argv));
+ ASSERT_OK(::mongo::storeServerOptions(environment));
+
+ ASSERT_EQ(::mongo::serverGlobalParams.slowMS, 300);
+}
+
+TEST(SetupOptions, SlowMsParamInitializedSuccessfullyFromINIConfigFile) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.ini");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.ini", "slowms=300");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::validateServerOptions(environment));
+ ASSERT_OK(::mongo::canonicalizeServerOptions(&environment));
+ ASSERT_OK(::mongo::setupServerOptions(argv));
+ ASSERT_OK(::mongo::storeServerOptions(environment));
+
+ ASSERT_EQ(::mongo::serverGlobalParams.slowMS, 300);
+}
+
+TEST(SetupOptions, SlowMsParamInitializedSuccessfullyFromYAMLConfigFile) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.yaml");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.yaml",
+ "operationProfiling:\n"
+ " slowOpThresholdMs: 300\n");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::validateServerOptions(environment));
+ ASSERT_OK(::mongo::canonicalizeServerOptions(&environment));
+ ASSERT_OK(::mongo::setupServerOptions(argv));
+ ASSERT_OK(::mongo::storeServerOptions(environment));
+
+ ASSERT_EQ(::mongo::serverGlobalParams.slowMS, 300);
+}
+
+TEST(SetupOptions, NonNumericSlowMsCommandLineOptionFailsToParse) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--slowms");
+ argv.push_back("invalid");
+ std::map<std::string, std::string> env_map;
+
+ ASSERT_NOT_OK(parser.run(options, argv, env_map, &environment));
+}
+
+TEST(SetupOptions, NonNumericSlowMsYAMLConfigOptionFailsToParse) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.yaml");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.yaml",
+ "operationProfiling:\n"
+ " slowOpThresholdMs: invalid\n");
+
+ ASSERT_NOT_OK(parser.run(options, argv, env_map, &environment));
+}
+
+TEST(SetupOptions, SampleRateCommandLineParamParsesSuccessfully) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--slowOpSampleRate");
+ argv.push_back("0.5");
+ std::map<std::string, std::string> env_map;
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::validateServerOptions(environment));
+ ASSERT_OK(::mongo::canonicalizeServerOptions(&environment));
+ ASSERT_OK(::mongo::setupServerOptions(argv));
+ ASSERT_OK(::mongo::storeServerOptions(environment));
+
+ ASSERT_EQ(::mongo::serverGlobalParams.sampleRate, 0.5);
+}
+
+TEST(SetupOptions, SampleRateParamInitializedSuccessfullyFromINIConfigFile) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.ini");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.ini", "slowOpSampleRate=0.5");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::validateServerOptions(environment));
+ ASSERT_OK(::mongo::canonicalizeServerOptions(&environment));
+ ASSERT_OK(::mongo::setupServerOptions(argv));
+ ASSERT_OK(::mongo::storeServerOptions(environment));
+
+ ASSERT_EQ(::mongo::serverGlobalParams.sampleRate, 0.5);
+}
+
+TEST(SetupOptions, SampleRateParamInitializedSuccessfullyFromYAMLConfigFile) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.yaml");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.yaml",
+ "operationProfiling:\n"
+ " slowOpSampleRate: 0.5\n");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::validateServerOptions(environment));
+ ASSERT_OK(::mongo::canonicalizeServerOptions(&environment));
+ ASSERT_OK(::mongo::setupServerOptions(argv));
+ ASSERT_OK(::mongo::storeServerOptions(environment));
+
+ ASSERT_EQ(::mongo::serverGlobalParams.sampleRate, 0.5);
+}
+
+TEST(SetupOptions, NonNumericSampleRateCommandLineOptionFailsToParse) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--slowOpSampleRate");
+ argv.push_back("invalid");
+ std::map<std::string, std::string> env_map;
+
+ ASSERT_NOT_OK(parser.run(options, argv, env_map, &environment));
+}
+
+TEST(SetupOptions, NonNumericSampleRateYAMLConfigOptionFailsToParse) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.yaml");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.yaml",
+ "operationProfiling:\n"
+ " slowOpSampleRate: invalid\n");
+
+ ASSERT_NOT_OK(parser.run(options, argv, env_map, &environment));
+}
+
#if !defined(_WIN32) && !(defined(__APPLE__) && TARGET_OS_TV)
#define ASSERT_BOOST_SUCCESS(ec) ASSERT_FALSE(ec) << ec.message()