summaryrefslogtreecommitdiff
path: root/src/mongo/client/replica_set_monitor_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/client/replica_set_monitor_test.cpp')
-rw-r--r--src/mongo/client/replica_set_monitor_test.cpp88
1 files changed, 61 insertions, 27 deletions
diff --git a/src/mongo/client/replica_set_monitor_test.cpp b/src/mongo/client/replica_set_monitor_test.cpp
index 7540854d9ce..42728a92f79 100644
--- a/src/mongo/client/replica_set_monitor_test.cpp
+++ b/src/mongo/client/replica_set_monitor_test.cpp
@@ -59,6 +59,13 @@ std::vector<HostAndPort> basicSeedsBuilder() {
const std::vector<HostAndPort> basicSeeds = basicSeedsBuilder();
const std::set<HostAndPort> basicSeedsSet(basicSeeds.begin(), basicSeeds.end());
+struct StatsForTest {
+ std::shared_ptr<ReplicaSetMonitorManagerStats> managerStats =
+ std::make_shared<ReplicaSetMonitorManagerStats>();
+ std::shared_ptr<ReplicaSetMonitorStats> stats =
+ std::make_shared<ReplicaSetMonitorStats>(managerStats);
+};
+
// NOTE: Unless stated otherwise, all tests assume exclusive access to state belongs to the
// current (only) thread, so they do not lock SetState::mutex before examining state. This is
// NOT something that non-test code should do.
@@ -347,7 +354,8 @@ TEST(ReplicaSetMonitor, IsMasterSecondaryWithTags) {
TEST(ReplicaSetMonitor, CheckAllSeedsSerial) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
set<HostAndPort> seen;
@@ -395,7 +403,8 @@ TEST(ReplicaSetMonitor, CheckAllSeedsSerial) {
TEST(ReplicaSetMonitor, CheckAllSeedsParallel) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
set<HostAndPort> seen;
@@ -453,7 +462,8 @@ TEST(ReplicaSetMonitor, CheckAllSeedsParallel) {
TEST(ReplicaSetMonitor, NoMasterInitAllUp) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
set<HostAndPort> seen;
@@ -500,7 +510,8 @@ TEST(ReplicaSetMonitor, NoMasterInitAllUp) {
TEST(ReplicaSetMonitor, MasterNotInSeeds_NoPrimaryInIsMaster) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
set<HostAndPort> seen;
@@ -577,7 +588,8 @@ TEST(ReplicaSetMonitor, MasterNotInSeeds_NoPrimaryInIsMaster) {
TEST(ReplicaSetMonitor, MasterNotInSeeds_PrimaryInIsMaster) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
set<HostAndPort> seen;
@@ -643,7 +655,8 @@ TEST(ReplicaSetMonitor, SlavesUsableEvenIfNoMaster) {
std::set<HostAndPort> seeds;
seeds.insert(HostAndPort("a"));
SetStatePtr state = std::make_shared<SetState>("name", seeds);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet());
@@ -685,7 +698,8 @@ TEST(ReplicaSetMonitor, SlavesUsableEvenIfNoMaster) {
// Test multiple nodes that claim to be master (we use a last-wins policy)
TEST(ReplicaSetMonitor, MultipleMasterLastNodeWins) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
set<HostAndPort> seen;
@@ -748,7 +762,8 @@ TEST(ReplicaSetMonitor, MultipleMasterLastNodeWins) {
// Test nodes disagree about who is in the set, master is source of truth
TEST(ReplicaSetMonitor, MasterIsSourceOfTruth) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
BSONArray primaryHosts = BSON_ARRAY("a"
<< "b"
@@ -789,7 +804,8 @@ TEST(ReplicaSetMonitor, MasterIsSourceOfTruth) {
// Test multiple master nodes that disagree about set membership
TEST(ReplicaSetMonitor, MultipleMastersDisagree) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
BSONArray hostsForSeed[3];
hostsForSeed[0] = BSON_ARRAY("a"
@@ -887,7 +903,8 @@ TEST(ReplicaSetMonitor, MultipleMastersDisagree) {
// Ensure getMatchingHost returns hosts even if scan is ongoing
TEST(ReplicaSetMonitor, GetMatchingDuringScan) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
const ReadPreferenceSetting primaryOnly(ReadPreference::PrimaryOnly, TagSet());
const ReadPreferenceSetting secondaryOnly(ReadPreference::SecondaryOnly, TagSet());
@@ -990,7 +1007,8 @@ TEST(ReplicaSetMonitor, OutOfBandFailedHost) {
// Newly elected primary with electionId >= maximum electionId seen by the Refresher
TEST(ReplicaSetMonitorTests, NewPrimaryWithMaxElectionId) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
set<HostAndPort> seen;
@@ -1056,7 +1074,8 @@ TEST(ReplicaSetMonitorTests, NewPrimaryWithMaxElectionId) {
// Ignore electionId of secondaries
TEST(ReplicaSetMonitorTests, IgnoreElectionIdFromSecondaries) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
set<HostAndPort> seen;
@@ -1103,7 +1122,8 @@ TEST(ReplicaSetMonitorTests, IgnoreElectionIdFromSecondaries) {
// Stale Primary with obsolete electionId
TEST(ReplicaSetMonitorTests, StalePrimaryWithObsoleteElectionId) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
const OID firstElectionId = OID::gen();
const OID secondElectionId = OID::gen();
@@ -1233,7 +1253,8 @@ TEST(ReplicaSetMonitor, PrimaryIsUpCheck) {
*/
TEST(ReplicaSetMonitorTests, TwoPrimaries2ndHasNewerConfigVersion) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
auto ns = refresher.getNextStep();
ASSERT_EQUALS(ns.step, NextStep::CONTACT_HOST);
@@ -1295,7 +1316,8 @@ TEST(ReplicaSetMonitorTests, TwoPrimaries2ndHasNewerConfigVersion) {
*/
TEST(ReplicaSetMonitorTests, TwoPrimaries2ndHasOlderConfigVersion) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
auto ns = refresher.getNextStep();
ASSERT_EQUALS(ns.step, NextStep::CONTACT_HOST);
@@ -1355,7 +1377,8 @@ TEST(ReplicaSetMonitorTests, TwoPrimaries2ndHasOlderConfigVersion) {
*/
TEST(ReplicaSetMonitor, MaxStalenessMSMatch) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime opTime{Timestamp{10, 10}, 10};
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(100));
@@ -1408,7 +1431,8 @@ TEST(ReplicaSetMonitor, MaxStalenessMSMatch) {
*/
TEST(ReplicaSetMonitor, MaxStalenessMSNoMatch) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime opTime{Timestamp{10, 10}, 10};
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200));
@@ -1460,7 +1484,8 @@ TEST(ReplicaSetMonitor, MaxStalenessMSNoMatch) {
*/
TEST(ReplicaSetMonitor, MaxStalenessMSNoPrimaryMatch) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime opTime{Timestamp{10, 10}, 10};
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200));
@@ -1515,7 +1540,8 @@ TEST(ReplicaSetMonitor, MaxStalenessMSNoPrimaryMatch) {
*/
TEST(ReplicaSetMonitor, MaxStalenessMSAllFailed) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime opTime{Timestamp{10, 10}, 10};
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200));
@@ -1569,7 +1595,8 @@ TEST(ReplicaSetMonitor, MaxStalenessMSAllFailed) {
*/
TEST(ReplicaSetMonitor, MaxStalenessMSAllButPrimaryFailed) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime opTime{Timestamp{10, 10}, 10};
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200));
@@ -1622,7 +1649,8 @@ TEST(ReplicaSetMonitor, MaxStalenessMSAllButPrimaryFailed) {
*/
TEST(ReplicaSetMonitor, MaxStalenessMSOneSecondaryFailed) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime opTime{Timestamp{10, 10}, 10};
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200));
@@ -1674,7 +1702,8 @@ TEST(ReplicaSetMonitor, MaxStalenessMSOneSecondaryFailed) {
*/
TEST(ReplicaSetMonitor, MaxStalenessMSNonStaleSecondaryMatched) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime opTime{Timestamp{10, 10}, 10};
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200));
@@ -1727,7 +1756,8 @@ TEST(ReplicaSetMonitor, MaxStalenessMSNonStaleSecondaryMatched) {
*/
TEST(ReplicaSetMonitor, MaxStalenessMSNoLastWrite) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200));
BSONArray hosts = BSON_ARRAY("a"
@@ -1769,7 +1799,8 @@ TEST(ReplicaSetMonitor, MaxStalenessMSNoLastWrite) {
*/
TEST(ReplicaSetMonitor, MaxStalenessMSZeroNoLastWrite) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(0));
BSONArray hosts = BSON_ARRAY("a"
@@ -1811,7 +1842,8 @@ TEST(ReplicaSetMonitor, MaxStalenessMSZeroNoLastWrite) {
*/
TEST(ReplicaSetMonitor, MinOpTimeMatched) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime minOpTimeSetting{Timestamp{10, 10}, 10};
repl::OpTime opTimeNonStale{Timestamp{10, 10}, 11};
@@ -1856,7 +1888,8 @@ TEST(ReplicaSetMonitor, MinOpTimeMatched) {
*/
TEST(ReplicaSetMonitor, MinOpTimeNotMatched) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime minOpTimeSetting{Timestamp{10, 10}, 10};
repl::OpTime opTimeNonStale{Timestamp{10, 10}, 11};
@@ -1901,7 +1934,8 @@ TEST(ReplicaSetMonitor, MinOpTimeNotMatched) {
*/
TEST(ReplicaSetMonitor, MinOpTimeIgnored) {
SetStatePtr state = std::make_shared<SetState>("name", basicSeedsSet);
- Refresher refresher(state, nullptr, nullptr);
+ StatsForTest stats;
+ Refresher refresher(state, nullptr, nullptr, stats.stats.get());
repl::OpTime minOpTimeSetting{Timestamp{10, 10}, 10};
repl::OpTime opTimeStale{Timestamp{10, 10}, 9};