diff options
-rw-r--r-- | src/mongo/db/mongod_options.cpp | 22 | ||||
-rw-r--r-- | src/mongo/db/server_options_helpers.cpp | 23 | ||||
-rw-r--r-- | src/mongo/db/server_options_test.cpp | 222 |
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() |