summaryrefslogtreecommitdiff
path: root/src/mongo/client
diff options
context:
space:
mode:
authorRachita Dhawan <rachita.dhawan@gmail.com>2022-01-13 22:07:36 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-01-13 22:36:41 +0000
commit8b3bdf09245f23493ad27d2d1ab705ce1c827c5a (patch)
tree3a03968ffacd2ef38a073c8a5f4f2af548f7e649 /src/mongo/client
parent72a53442f1adb2663ad05be2fe9a5b092a57d568 (diff)
downloadmongo-8b3bdf09245f23493ad27d2d1ab705ce1c827c5a.tar.gz
SERVER-51842 Fix duplicate localThresholdMs (localThreshold) server parameters
Diffstat (limited to 'src/mongo/client')
-rw-r--r--src/mongo/client/sdam/SConscript1
-rw-r--r--src/mongo/client/sdam/sdam_configuration.h7
-rw-r--r--src/mongo/client/sdam/sdam_configuration_parameters.idl7
-rw-r--r--src/mongo/client/sdam/server_selection_json_test_runner.cpp13
-rw-r--r--src/mongo/client/sdam/server_selector_test.cpp5
-rw-r--r--src/mongo/client/sdam/topology_description_test.cpp11
-rw-r--r--src/mongo/client/sdam/topology_state_machine_test.cpp31
-rw-r--r--src/mongo/client/server_ping_monitor.cpp12
8 files changed, 56 insertions, 31 deletions
diff --git a/src/mongo/client/sdam/SConscript b/src/mongo/client/sdam/SConscript
index 923dfa83fc4..0b065b6b52a 100644
--- a/src/mongo/client/sdam/SConscript
+++ b/src/mongo/client/sdam/SConscript
@@ -10,6 +10,7 @@ env.Library(
'sdam_configuration_parameters.idl',
],
LIBDEPS_PRIVATE=[
+ '$BUILD_DIR/mongo/db/server_options_core',
'$BUILD_DIR/mongo/idl/server_parameter',
]
)
diff --git a/src/mongo/client/sdam/sdam_configuration.h b/src/mongo/client/sdam/sdam_configuration.h
index c274da69f8c..f1b1122936c 100644
--- a/src/mongo/client/sdam/sdam_configuration.h
+++ b/src/mongo/client/sdam/sdam_configuration.h
@@ -30,7 +30,7 @@
#include "mongo/client/sdam/sdam_configuration_parameters_gen.h"
#include "mongo/client/sdam/sdam_datatypes.h"
-
+#include "mongo/db/server_options.h"
namespace mongo::sdam {
class SdamConfiguration {
public:
@@ -60,7 +60,8 @@ public:
TopologyType initialType = TopologyType::kUnknown,
Milliseconds heartBeatFrequencyMs = Milliseconds(sdamHeartBeatFrequencyMs),
Milliseconds connectTimeoutMs = Milliseconds(sdamConnectTimeoutMs),
- Milliseconds localThreshholdMs = Milliseconds(sdamLocalThreshholdMs),
+ Milliseconds localThreshholdMs =
+ Milliseconds(serverGlobalParams.defaultLocalThresholdMillis),
boost::optional<std::string> setName = boost::none);
SdamConfiguration(boost::optional<std::vector<HostAndPort>> seedList,
@@ -70,7 +71,7 @@ public:
initialType,
Milliseconds(sdamHeartBeatFrequencyMs),
Milliseconds(sdamConnectTimeoutMs),
- Milliseconds(sdamLocalThreshholdMs),
+ Milliseconds(serverGlobalParams.defaultLocalThresholdMillis),
setName) {}
/**
diff --git a/src/mongo/client/sdam/sdam_configuration_parameters.idl b/src/mongo/client/sdam/sdam_configuration_parameters.idl
index 8865edfa697..f36a6d9144b 100644
--- a/src/mongo/client/sdam/sdam_configuration_parameters.idl
+++ b/src/mongo/client/sdam/sdam_configuration_parameters.idl
@@ -27,6 +27,8 @@
global:
cpp_namespace: mongo::sdam
+ cpp_includes:
+ - "mongo/db/server_options.h"
server_parameters:
heartBeatFrequencyMs:
@@ -40,8 +42,7 @@ server_parameters:
localThresholdMs:
description: Determines the width of the latency window used in server selection.
set_at: startup
- cpp_vartype: int
- cpp_varname: sdamLocalThreshholdMs
+ cpp_varname: "mongo::serverGlobalParams.defaultLocalThresholdMillis"
validator:
gte: 0
default: 15
@@ -53,3 +54,5 @@ server_parameters:
validator:
gte: 500
default: 10000
+
+
diff --git a/src/mongo/client/sdam/server_selection_json_test_runner.cpp b/src/mongo/client/sdam/server_selection_json_test_runner.cpp
index a8ebedef4c7..5da205b53e1 100644
--- a/src/mongo/client/sdam/server_selection_json_test_runner.cpp
+++ b/src/mongo/client/sdam/server_selection_json_test_runner.cpp
@@ -379,12 +379,13 @@ private:
if (serverAddresses.size() > 0)
seedList = serverAddresses;
- auto config = SdamConfiguration(seedList,
- initType,
- Milliseconds{sdamHeartBeatFrequencyMs},
- Milliseconds{sdamConnectTimeoutMs},
- Milliseconds{sdamLocalThreshholdMs},
- setName);
+ auto config =
+ SdamConfiguration(seedList,
+ initType,
+ Milliseconds{sdamHeartBeatFrequencyMs},
+ Milliseconds{sdamConnectTimeoutMs},
+ Milliseconds{serverGlobalParams.defaultLocalThresholdMillis},
+ setName);
_topologyDescription = std::make_shared<TopologyDescription>(config);
std::vector<BSONElement> bsonLatencyWindow;
diff --git a/src/mongo/client/sdam/server_selector_test.cpp b/src/mongo/client/sdam/server_selector_test.cpp
index 44af70298ae..f9d67676e2c 100644
--- a/src/mongo/client/sdam/server_selector_test.cpp
+++ b/src/mongo/client/sdam/server_selector_test.cpp
@@ -42,7 +42,10 @@ namespace mongo::sdam {
class ServerSelectorTestFixture : public SdamTestFixture {
public:
static inline const auto clockSource = SystemClockSource::get();
- static inline const auto sdamConfiguration = SdamConfiguration({{HostAndPort("s0")}});
+
+ const SdamConfiguration sdamConfiguration;
+
+ ServerSelectorTestFixture() : sdamConfiguration(SdamConfiguration({{HostAndPort("s0")}})) {}
static constexpr auto SET_NAME = "set";
static constexpr int NUM_ITERATIONS = 1000;
diff --git a/src/mongo/client/sdam/topology_description_test.cpp b/src/mongo/client/sdam/topology_description_test.cpp
index 8c741bce134..e812a6a2baf 100644
--- a/src/mongo/client/sdam/topology_description_test.cpp
+++ b/src/mongo/client/sdam/topology_description_test.cpp
@@ -69,11 +69,14 @@ protected:
static inline const std::vector<HostAndPort> kThreeServers{
HostAndPort("foo:1234"), HostAndPort("bar:1234"), HostAndPort("baz:1234")};
- static inline const auto kDefaultConfig = SdamConfiguration();
- static inline const auto kSingleSeedConfig =
- SdamConfiguration(kOneServer, TopologyType::kSingle);
-
static inline const auto kNotUsedMs = Milliseconds{1000};
+
+ const SdamConfiguration kDefaultConfig;
+ const SdamConfiguration kSingleSeedConfig;
+
+ TopologyDescriptionTestFixture()
+ : kDefaultConfig(SdamConfiguration()),
+ kSingleSeedConfig(SdamConfiguration(kOneServer, TopologyType::kSingle)) {}
};
void TopologyDescriptionTestFixture::assertDefaultConfig(
diff --git a/src/mongo/client/sdam/topology_state_machine_test.cpp b/src/mongo/client/sdam/topology_state_machine_test.cpp
index 5f47b8386f0..434dbceb915 100644
--- a/src/mongo/client/sdam/topology_state_machine_test.cpp
+++ b/src/mongo/client/sdam/topology_state_machine_test.cpp
@@ -47,21 +47,22 @@ protected:
static inline const auto kNotUsedMs = Milliseconds(100);
static inline const auto kFiveHundredMs = Milliseconds(500);
- static inline const auto kTwoSeedConfig =
- SdamConfiguration(std::vector<HostAndPort>{kLocalServer, kLocalServer2},
- TopologyType::kUnknown,
- kFiveHundredMs);
-
- static inline const auto kTwoSeedReplicaSetNoPrimaryConfig =
- SdamConfiguration(std::vector<HostAndPort>{kLocalServer, kLocalServer2},
- TopologyType::kReplicaSetNoPrimary,
- kFiveHundredMs,
- kNotUsedMs,
- kNotUsedMs,
- std::string("setName"));
-
- static inline const auto kSingleConfig =
- SdamConfiguration(std::vector<HostAndPort>{kLocalServer}, TopologyType::kSingle);
+ const SdamConfiguration kTwoSeedConfig;
+ const SdamConfiguration kTwoSeedReplicaSetNoPrimaryConfig;
+ const SdamConfiguration kSingleConfig;
+ TopologyStateMachineTestFixture()
+ : kTwoSeedConfig(SdamConfiguration(std::vector<HostAndPort>{kLocalServer, kLocalServer2},
+ TopologyType::kUnknown,
+ kFiveHundredMs)),
+ kTwoSeedReplicaSetNoPrimaryConfig(
+ SdamConfiguration(std::vector<HostAndPort>{kLocalServer, kLocalServer2},
+ TopologyType::kReplicaSetNoPrimary,
+ kFiveHundredMs,
+ kNotUsedMs,
+ kNotUsedMs,
+ std::string("setName"))),
+ kSingleConfig(
+ SdamConfiguration(std::vector<HostAndPort>{kLocalServer}, TopologyType::kSingle)) {}
// Given we are in 'starting' state with initial config 'initialConfig'. We receive a
// ServerDescription with type 'incoming', and expected the ending topology state to be
diff --git a/src/mongo/client/server_ping_monitor.cpp b/src/mongo/client/server_ping_monitor.cpp
index bc2df5b21d8..80924e2d573 100644
--- a/src/mongo/client/server_ping_monitor.cpp
+++ b/src/mongo/client/server_ping_monitor.cpp
@@ -46,6 +46,7 @@
namespace mongo {
MONGO_FAIL_POINT_DEFINE(serverPingMonitorFailWithHostUnreachable);
+MONGO_FAIL_POINT_DEFINE(serverPingMonitorSetRTT);
using executor::NetworkInterface;
using executor::NetworkInterfaceThreadPool;
@@ -152,6 +153,7 @@ void SingleServerPingMonitor::_doServerPing() {
}
{
stdx::lock_guard lk(anchor->_mutex);
+ int rttValue;
if (anchor->_isDropped) {
return;
}
@@ -165,6 +167,16 @@ void SingleServerPingMonitor::_doServerPing() {
<< "Failing the ping command to " << (anchor->_hostAndPort);
anchor->_rttListener->onServerPingFailedEvent(
anchor->_hostAndPort, {ErrorCodes::HostUnreachable, reason});
+ } else if (MONGO_unlikely(
+ serverPingMonitorSetRTT.shouldFail([&](const BSONObj& data) {
+ if (data.hasField(anchor->_hostAndPort.toString())) {
+ rttValue = data.getIntField(anchor->_hostAndPort.toString());
+ return true;
+ }
+ return false;
+ }))) {
+ anchor->_rttListener->onServerPingSucceededEvent(Microseconds(rttValue),
+ anchor->_hostAndPort);
} else if (!result.response.isOK()) {
anchor->_rttListener->onServerPingFailedEvent(anchor->_hostAndPort,
result.response.status);