summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Oyung <anton.oyung@mongodb.com>2019-11-19 18:31:44 +0000
committerevergreen <evergreen@mongodb.com>2019-11-19 18:31:44 +0000
commit0ccd538e9bb21e67cff1150af464318457132a3e (patch)
treef40744da74dc7b77e0e46063fb9be81bef295909
parent542479adb86d90e80ce4faed167e6848d4107adf (diff)
downloadmongo-0ccd538e9bb21e67cff1150af464318457132a3e.tar.gz
SERVER-44626: Add new setParameter loadRoutingTableOnStartup
-rw-r--r--jstests/sharding/mongos_precache_routing_info.js11
-rw-r--r--src/mongo/s/SConscript2
-rw-r--r--src/mongo/s/mongos_options.idl9
-rw-r--r--src/mongo/s/sharding_initialization.cpp10
-rw-r--r--src/mongo/s/warmup_server_parameters.cpp (renamed from src/mongo/s/pre_warm_connection_pool_impl.cpp)5
-rw-r--r--src/mongo/s/warmup_server_parameters.h (renamed from src/mongo/s/pre_warm_connection_pool_impl.h)7
6 files changed, 36 insertions, 8 deletions
diff --git a/jstests/sharding/mongos_precache_routing_info.js b/jstests/sharding/mongos_precache_routing_info.js
index 2b4266a6d63..786d56149db 100644
--- a/jstests/sharding/mongos_precache_routing_info.js
+++ b/jstests/sharding/mongos_precache_routing_info.js
@@ -33,5 +33,16 @@ db = s.getDB("test");
ss = db.serverStatus();
assert.eq(1, ss.shardingStatistics.catalogCache.countFullRefreshesStarted);
+// does not pre cache when set parameter is disabled
+s.restartMongos(0, {
+ restart: true,
+ setParameter: {loadRoutingTableOnStartup: false},
+});
+db = s.getDB("test");
+
+// check for # refreshes started
+ss = db.serverStatus();
+assert.eq(0, ss.shardingStatistics.catalogCache.countFullRefreshesStarted);
+
s.stop();
})();
diff --git a/src/mongo/s/SConscript b/src/mongo/s/SConscript
index 1d4cc94c795..20cf7b4a6fd 100644
--- a/src/mongo/s/SConscript
+++ b/src/mongo/s/SConscript
@@ -105,7 +105,7 @@ env.Library(
source=[
'sharding_initialization.cpp',
'sharding_task_executor_pool_controller.cpp',
- 'pre_warm_connection_pool_impl.cpp',
+ 'warmup_server_parameters.cpp',
env.Idlc('sharding_task_executor_pool.idl')[0],
'client/sharding_connection_hook.cpp',
'client/sharding_network_connection_hook.cpp',
diff --git a/src/mongo/s/mongos_options.idl b/src/mongo/s/mongos_options.idl
index 5c8033a24b0..a9d04e8d39e 100644
--- a/src/mongo/s/mongos_options.idl
+++ b/src/mongo/s/mongos_options.idl
@@ -31,12 +31,19 @@ global:
cpp_namespace: "mongo"
cpp_includes:
- "mongo/s/mongos_options.h"
- - "mongo/s/pre_warm_connection_pool_impl.h"
+ - "mongo/s/warmup_server_parameters.h"
configs:
section: "Sharding options"
source: [ yaml, cli, ini ]
server_parameters:
+ loadRoutingTableOnStartup:
+ description: <-
+ Enables precaching of the mongos routing table on startup.
+ set_at: [ startup ]
+ cpp_varname: "gLoadRoutingTableOnStartup"
+ default: true
+
warmMinConnectionsInShardingTaskExecutorPoolOnStartup:
description: <-
Enables prewarming of the connection pool.
diff --git a/src/mongo/s/sharding_initialization.cpp b/src/mongo/s/sharding_initialization.cpp
index f3598d797f3..733c0bcb3df 100644
--- a/src/mongo/s/sharding_initialization.cpp
+++ b/src/mongo/s/sharding_initialization.cpp
@@ -66,11 +66,11 @@
#include "mongo/s/client/sharding_network_connection_hook.h"
#include "mongo/s/cluster_identity_loader.h"
#include "mongo/s/grid.h"
-#include "mongo/s/pre_warm_connection_pool_impl.h"
#include "mongo/s/query/cluster_cursor_manager.h"
#include "mongo/s/sharding_task_executor.h"
#include "mongo/s/sharding_task_executor_pool_controller.h"
#include "mongo/s/sharding_task_executor_pool_gen.h"
+#include "mongo/s/warmup_server_parameters.h"
#include "mongo/stdx/thread.h"
#include "mongo/util/concurrency/thread_pool.h"
#include "mongo/util/exit.h"
@@ -263,9 +263,14 @@ Status waitForShardRegistryReload(OperationContext* opCtx) {
}
Status preCacheMongosRoutingInfo(OperationContext* opCtx) {
+ if (!gLoadRoutingTableOnStartup) {
+ return Status::OK();
+ }
+
if (serverGlobalParams.clusterRole == ClusterRole::ConfigServer) {
return Status::OK();
}
+
auto grid = Grid::get(opCtx);
auto shardingCatalogClient = grid->catalogClient();
@@ -298,9 +303,6 @@ Status preWarmConnectionPool(OperationContext* opCtx) {
return Status::OK();
}
- // Should not be called by mongod
- invariant(serverGlobalParams.clusterRole != ClusterRole::ShardServer);
-
std::vector<HostAndPort> allHosts;
auto const grid = Grid::get(opCtx);
auto allShardsStatus =
diff --git a/src/mongo/s/pre_warm_connection_pool_impl.cpp b/src/mongo/s/warmup_server_parameters.cpp
index cb082983ce1..3809bf64844 100644
--- a/src/mongo/s/pre_warm_connection_pool_impl.cpp
+++ b/src/mongo/s/warmup_server_parameters.cpp
@@ -27,12 +27,13 @@
* it in the license file.
*/
-#include "mongo/s/pre_warm_connection_pool_impl.h"
+#include "mongo/s/warmup_server_parameters.h"
namespace mongo {
+bool gLoadRoutingTableOnStartup = true;
bool gWarmMinConnectionsInShardingTaskExecutorPoolOnStartup = true;
int gWarmMinConnectionsInShardingTaskExecutorPoolOnStartupWaitMS = 2000;
-} // namespace mongo \ No newline at end of file
+} // namespace mongo
diff --git a/src/mongo/s/pre_warm_connection_pool_impl.h b/src/mongo/s/warmup_server_parameters.h
index f5b4a5dfbe0..9d1b616b322 100644
--- a/src/mongo/s/pre_warm_connection_pool_impl.h
+++ b/src/mongo/s/warmup_server_parameters.h
@@ -31,6 +31,13 @@
namespace mongo {
/**
+ * Set parameter used to control whether or not the mongos attempts to precache the routing table on
+ * startup.
+ */
+
+extern bool gLoadRoutingTableOnStartup;
+
+/**
* Set parameters used to control whether or not the mongos attempts to warm up the connection
* pool on start up and for how long it should try.
*/