diff options
Diffstat (limited to 'src/mongo/client/replica_set_monitor_test.cpp')
-rw-r--r-- | src/mongo/client/replica_set_monitor_test.cpp | 88 |
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}; |