summaryrefslogtreecommitdiff
path: root/src/mongo/db
diff options
context:
space:
mode:
authorJonathan Reams <jbreams@mongodb.com>2018-06-22 15:15:12 -0400
committerJonathan Reams <jbreams@mongodb.com>2018-08-21 13:10:16 -0400
commit1fb52e97b33c6c4ed7855994aeb7c4c4a7e64b1d (patch)
tree69e739b096807d3e7ce1698ede76a87d72baed0b /src/mongo/db
parent5c647106e67bed997d649699fc929e5b41a0a759 (diff)
downloadmongo-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.cpp11
-rw-r--r--src/mongo/db/db.cpp6
-rw-r--r--src/mongo/db/server_options.h4
-rw-r--r--src/mongo/db/server_options_server_helpers.cpp34
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(&section);
+ }
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>();
}