diff options
author | Rachita Dhawan <rachita.dhawan@gmail.com> | 2022-01-13 22:07:36 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-01-13 22:36:41 +0000 |
commit | 8b3bdf09245f23493ad27d2d1ab705ce1c827c5a (patch) | |
tree | 3a03968ffacd2ef38a073c8a5f4f2af548f7e649 /src/mongo/client | |
parent | 72a53442f1adb2663ad05be2fe9a5b092a57d568 (diff) | |
download | mongo-8b3bdf09245f23493ad27d2d1ab705ce1c827c5a.tar.gz |
SERVER-51842 Fix duplicate localThresholdMs (localThreshold) server parameters
Diffstat (limited to 'src/mongo/client')
-rw-r--r-- | src/mongo/client/sdam/SConscript | 1 | ||||
-rw-r--r-- | src/mongo/client/sdam/sdam_configuration.h | 7 | ||||
-rw-r--r-- | src/mongo/client/sdam/sdam_configuration_parameters.idl | 7 | ||||
-rw-r--r-- | src/mongo/client/sdam/server_selection_json_test_runner.cpp | 13 | ||||
-rw-r--r-- | src/mongo/client/sdam/server_selector_test.cpp | 5 | ||||
-rw-r--r-- | src/mongo/client/sdam/topology_description_test.cpp | 11 | ||||
-rw-r--r-- | src/mongo/client/sdam/topology_state_machine_test.cpp | 31 | ||||
-rw-r--r-- | src/mongo/client/server_ping_monitor.cpp | 12 |
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); |