summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmirsaman Memaripour <amirsaman.memaripour@mongodb.com>2021-02-18 17:32:34 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-02-24 21:33:06 +0000
commit030c2936957607671ba3309718ef194bb3ad5f5d (patch)
tree10fde9c747ea1d7e4b19dcbbf64501b6f39c8484
parent91bdf11ca88df82ef67cc666f3181b864ad99ec1 (diff)
downloadmongo-030c2936957607671ba3309718ef194bb3ad5f5d.tar.gz
SERVER-54278 Add feature flag to disable Opportunistic Reads by default
-rw-r--r--buildscripts/resmokeconfig/suites/sharding_opportunistic_secondary_targeting.yml15
-rw-r--r--etc/evergreen.yml42
-rw-r--r--src/mongo/executor/SConscript2
-rw-r--r--src/mongo/executor/executor_parameters.idl (renamed from src/mongo/executor/task_executor_pool_parameters.idl)9
-rw-r--r--src/mongo/executor/network_interface_tl.cpp7
-rw-r--r--src/mongo/executor/task_executor_pool.cpp2
6 files changed, 75 insertions, 2 deletions
diff --git a/buildscripts/resmokeconfig/suites/sharding_opportunistic_secondary_targeting.yml b/buildscripts/resmokeconfig/suites/sharding_opportunistic_secondary_targeting.yml
new file mode 100644
index 00000000000..df51dad2dc0
--- /dev/null
+++ b/buildscripts/resmokeconfig/suites/sharding_opportunistic_secondary_targeting.yml
@@ -0,0 +1,15 @@
+test_kind: js_test
+
+selector:
+ roots:
+ - jstests/sharding/*.js
+
+executor:
+ config:
+ shell_options:
+ nodb: ''
+ readMode: commands
+ global_vars:
+ TestData:
+ setParametersMongos:
+ opportunisticSecondaryTargeting: true
diff --git a/etc/evergreen.yml b/etc/evergreen.yml
index eef959c35fe..6ca4e037eee 100644
--- a/etc/evergreen.yml
+++ b/etc/evergreen.yml
@@ -4688,6 +4688,15 @@ tasks:
resmoke_args: --storageEngine=wiredTiger
fallback_num_sub_suites: 4
+- name: sharding_opportunistic_secondary_targeting_gen
+ tags: ["sharding", "common"]
+ commands:
+ - func: "generate resmoke tasks"
+ vars:
+ use_large_distro: "true"
+ resmoke_args: --storageEngine=wiredTiger
+ fallback_num_sub_suites: 32
+
- <<: *task_template
name: change_streams
tags: ["change_streams"]
@@ -7434,6 +7443,7 @@ buildvariants:
- name: sharded_multi_stmt_txn_jscore_passthrough
- name: .sharding .jscore !.wo_snapshot
- name: sharding_gen
+ - name: sharding_opportunistic_secondary_targeting_gen
- name: .stitch
- name: linux-64-duroff
@@ -8344,6 +8354,7 @@ buildvariants:
- windows-64-vs2017-compile
- name: session_jscore_passthrough
- name: sharding_gen
+ - name: sharding_opportunistic_secondary_targeting_gen
- name: .stitch
- name: enterprise-windows-64-2k8
@@ -8395,6 +8406,7 @@ buildvariants:
- name: sharding_auth_gen
- name: sharding_auth_audit_gen
- name: sharding_ese_gen
+ - name: sharding_opportunistic_secondary_targeting_gen
- name: snmp
- name: push
distros:
@@ -8857,6 +8869,7 @@ buildvariants:
- name: sharded_multi_stmt_txn_jscore_passthrough
distros:
- rhel62-large
+ - name: sharding_opportunistic_secondary_targeting_gen
- name: snmp
- name: .stitch
- name: .updatefuzzer
@@ -10624,6 +10637,35 @@ buildvariants:
- name: .stitch
- name: .updatefuzzer
+- name: enterprise-ubuntu-sharding-opportunistic-secondary-targeting-1804-64-bit
+ display_name: "~ Enterprise Ubuntu 18.04 (with {opportunisticSecondaryTargeting: true})"
+ batchtime: 1440 # 1 day
+ run_on:
+ - ubuntu1804-test
+ modules:
+ - enterprise
+ expansions:
+ scons_cache_scope: shared
+ compile_flags: MONGO_DISTMOD=ubuntu1804 -j$(grep -c ^processor /proc/cpuinfo) --variables-files=etc/scons/mongodbtoolchain_v3_gcc.vars
+ multiversion_platform: ubuntu1804
+ multiversion_edition: enterprise
+ test_flags: >-
+ --mongosSetParameters="opportunisticSecondaryTargeting: true"
+ large_distro_name: ubuntu1804-build
+ tasks:
+ - name: compile_all_run_unittests_TG
+ distros:
+ - ubuntu1804-build
+ - name: .aggregation !.no_async
+ - name: .sharding .auth
+ - name: .sharding .causally_consistent !.wo_snapshot
+ - name: .concurrency .common !.kill_terminate
+ - name: .integration !.audit
+ - name: .jscore .common
+ - name: .logical_session_cache .one_sec
+ - name: .sharding .jscore !.wo_snapshot !.multi_stmt
+ - name: .sharding .common !.csrs
+
- name: ubuntu1804-asan
display_name: ~ ASAN SSL Ubuntu 18.04
run_on:
diff --git a/src/mongo/executor/SConscript b/src/mongo/executor/SConscript
index 7c015cb39f3..ae3803a1f03 100644
--- a/src/mongo/executor/SConscript
+++ b/src/mongo/executor/SConscript
@@ -45,6 +45,7 @@ env.Library(target='async_multicaster',
env.Library(target='task_executor_interface',
source=[
'task_executor.cpp',
+ env.Idlc("executor_parameters.idl")[0],
],
LIBDEPS=[
'$BUILD_DIR/mongo/base',
@@ -261,7 +262,6 @@ env.Library(
target='task_executor_pool',
source=[
'task_executor_pool.cpp',
- env.Idlc("task_executor_pool_parameters.idl")[0],
],
LIBDEPS=[
'$BUILD_DIR/mongo/idl/server_parameter',
diff --git a/src/mongo/executor/task_executor_pool_parameters.idl b/src/mongo/executor/executor_parameters.idl
index 8eba1da54c9..63d1b82231d 100644
--- a/src/mongo/executor/task_executor_pool_parameters.idl
+++ b/src/mongo/executor/executor_parameters.idl
@@ -38,3 +38,12 @@ server_parameters:
cpp_vartype: "AtomicWord<int>"
cpp_varname: "taskExecutorPoolSize"
default: 1
+
+ opportunisticSecondaryTargeting:
+ description: >-
+ Allows attempting to establish connections to multiple secondaries and directing the request
+ to the first secondary that accepts the connection.
+ set_at: [ startup, runtime ]
+ cpp_vartype: 'AtomicWord<bool>'
+ cpp_varname: 'gOpportunisticSecondaryTargeting'
+ default: false
diff --git a/src/mongo/executor/network_interface_tl.cpp b/src/mongo/executor/network_interface_tl.cpp
index e8cd15f3e60..93abd40fce3 100644
--- a/src/mongo/executor/network_interface_tl.cpp
+++ b/src/mongo/executor/network_interface_tl.cpp
@@ -36,6 +36,7 @@
#include "mongo/db/commands/test_commands_enabled.h"
#include "mongo/db/server_options.h"
#include "mongo/executor/connection_pool_tl.h"
+#include "mongo/executor/executor_parameters_gen.h"
#include "mongo/transport/transport_layer_manager.h"
#include "mongo/util/concurrency/idle_thread_block.h"
#include "mongo/util/log.h"
@@ -271,6 +272,12 @@ Status NetworkInterfaceTL::startCommand(const TaskExecutor::CallbackHandle& cbHa
request.metadata = newMetadata.obj();
}
+ // If "Opportunistic Secondary Targeting" is disabled, then we target only the first host of the
+ // set we are given.
+ if (request.target.size() > 1 && !gOpportunisticSecondaryTargeting.loadRelaxed()) {
+ request.target.resize(1);
+ }
+
auto pf = makePromiseFuture<RemoteCommandOnAnyResponse>();
auto cmdState = CommandState::make(this, request, cbHandle, std::move(pf.promise));
diff --git a/src/mongo/executor/task_executor_pool.cpp b/src/mongo/executor/task_executor_pool.cpp
index 2f7bd5d95d8..a56f94580ca 100644
--- a/src/mongo/executor/task_executor_pool.cpp
+++ b/src/mongo/executor/task_executor_pool.cpp
@@ -34,8 +34,8 @@
#include <algorithm>
#include "mongo/executor/connection_pool_stats.h"
+#include "mongo/executor/executor_parameters_gen.h"
#include "mongo/executor/task_executor.h"
-#include "mongo/executor/task_executor_pool_parameters_gen.h"
#include "mongo/util/processinfo.h"
namespace mongo {