diff options
author | Jonathan Reams <jbreams@mongodb.com> | 2018-06-22 15:15:12 -0400 |
---|---|---|
committer | Jonathan Reams <jbreams@mongodb.com> | 2018-08-21 13:10:16 -0400 |
commit | 1fb52e97b33c6c4ed7855994aeb7c4c4a7e64b1d (patch) | |
tree | 69e739b096807d3e7ce1698ede76a87d72baed0b /src/mongo/db | |
parent | 5c647106e67bed997d649699fc929e5b41a0a759 (diff) | |
download | mongo-1fb52e97b33c6c4ed7855994aeb7c4c4a7e64b1d.tar.gz |
SERVER-34986 Allow connections to override maxConns based on CIDR range
Diffstat (limited to 'src/mongo/db')
-rw-r--r-- | src/mongo/db/commands/server_status_servers.cpp | 11 | ||||
-rw-r--r-- | src/mongo/db/db.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/server_options.h | 4 | ||||
-rw-r--r-- | src/mongo/db/server_options_server_helpers.cpp | 34 |
4 files changed, 49 insertions, 6 deletions
diff --git a/src/mongo/db/commands/server_status_servers.cpp b/src/mongo/db/commands/server_status_servers.cpp index 96007301142..b7a0eca6895 100644 --- a/src/mongo/db/commands/server_status_servers.cpp +++ b/src/mongo/db/commands/server_status_servers.cpp @@ -62,10 +62,7 @@ public: auto serviceEntryPoint = opCtx->getServiceContext()->getServiceEntryPoint(); invariant(serviceEntryPoint); - auto stats = serviceEntryPoint->sessionStats(); - bb.append("current", static_cast<int>(stats.numOpenSessions)); - bb.append("available", static_cast<int>(stats.numAvailableSessions)); - bb.append("totalCreated", static_cast<int>(stats.numCreatedSessions)); + serviceEntryPoint->appendStats(&bb); return bb.obj(); } @@ -83,8 +80,10 @@ public: networkCounter.append(b); appendMessageCompressionStats(&b); auto executor = opCtx->getServiceContext()->getServiceExecutor(); - if (executor) - executor->appendStats(&b); + if (executor) { + BSONObjBuilder section(b.subobjStart("serviceExecutorTaskStats")); + executor->appendStats(§ion); + } return b.obj(); } diff --git a/src/mongo/db/db.cpp b/src/mongo/db/db.cpp index d89eac1424e..78ffeb1a511 100644 --- a/src/mongo/db/db.cpp +++ b/src/mongo/db/db.cpp @@ -645,6 +645,12 @@ ExitCode _initAndListen(int listenPort) { return EXIT_NET_ERROR; } + start = serviceContext->getServiceEntryPoint()->start(); + if (!start.isOK()) { + error() << "Failed to start the service entry point: " << start; + return EXIT_NET_ERROR; + } + start = serviceContext->getTransportLayer()->start(); if (!start.isOK()) { error() << "Failed to start the listener: " << start.toString(); diff --git a/src/mongo/db/server_options.h b/src/mongo/db/server_options.h index 25f7a7ccc42..1a3f3a96c3e 100644 --- a/src/mongo/db/server_options.h +++ b/src/mongo/db/server_options.h @@ -30,6 +30,8 @@ #include "mongo/db/jsobj.h" #include "mongo/platform/atomic_word.h" #include "mongo/platform/process_id.h" +#include "mongo/stdx/variant.h" +#include "mongo/util/net/cidr.h" namespace mongo { @@ -79,6 +81,8 @@ struct ServerGlobalParams { std::string serviceExecutor; size_t maxConns = DEFAULT_MAX_CONN; // Maximum number of simultaneous open connections. + std::vector<stdx::variant<CIDR, std::string>> maxConnsOverride; + int reservedAdminThreads = 0; int unixSocketPermissions = DEFAULT_UNIX_PERMS; // permissions for the UNIX domain socket diff --git a/src/mongo/db/server_options_server_helpers.cpp b/src/mongo/db/server_options_server_helpers.cpp index 9342ae91302..bae75613bdd 100644 --- a/src/mongo/db/server_options_server_helpers.cpp +++ b/src/mongo/db/server_options_server_helpers.cpp @@ -120,6 +120,24 @@ Status addGeneralServerOptions(moe::OptionSection* options) { "net.maxIncomingConnections", "maxConns", moe::Int, maxConnInfoBuilder.str().c_str()); options + ->addOptionChaining( + "net.maxIncomingConnectionsOverride", + "", + moe::StringVector, + "CIDR ranges that do not count towards the maxIncomingConnections limit") + .hidden() + .setSources(moe::SourceYAMLConfig); + + options + ->addOptionChaining( + "net.reservedAdminThreads", + "", + moe::Int, + "number of worker threads to reserve for admin and internal connections") + .hidden() + .setSources(moe::SourceYAMLConfig); + + options ->addOptionChaining("net.transportLayer", "transportLayer", moe::String, @@ -583,6 +601,22 @@ Status storeServerOptions(const moe::Environment& params) { } } + if (params.count("net.maxIncomingConnectionsOverride")) { + auto ranges = params["net.maxIncomingConnectionsOverride"].as<std::vector<std::string>>(); + for (const auto& range : ranges) { + auto swr = CIDR::parse(range); + if (!swr.isOK()) { + serverGlobalParams.maxConnsOverride.push_back(range); + } else { + serverGlobalParams.maxConnsOverride.push_back(std::move(swr.getValue())); + } + } + } + + if (params.count("net.reservedAdminThreads")) { + serverGlobalParams.reservedAdminThreads = params["net.reservedAdminThreads"].as<int>(); + } + if (params.count("net.wireObjectCheck")) { serverGlobalParams.objcheck = params["net.wireObjectCheck"].as<bool>(); } |