diff options
Diffstat (limited to 'src/mongo/client/replica_set_monitor_test.cpp')
-rw-r--r-- | src/mongo/client/replica_set_monitor_test.cpp | 86 |
1 files changed, 59 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..471d1ae27a7 100644 --- a/src/mongo/client/replica_set_monitor_test.cpp +++ b/src/mongo/client/replica_set_monitor_test.cpp @@ -59,6 +59,11 @@ std::vector<HostAndPort> basicSeedsBuilder() { const std::vector<HostAndPort> basicSeeds = basicSeedsBuilder(); const std::set<HostAndPort> basicSeedsSet(basicSeeds.begin(), basicSeeds.end()); +struct StatsForTest { + ReplicaSetMonitorManagerStats managerStats; + ReplicaSetMonitorStats stats{&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 +352,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); set<HostAndPort> seen; @@ -395,7 +401,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); set<HostAndPort> seen; @@ -453,7 +460,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); set<HostAndPort> seen; @@ -500,7 +508,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); set<HostAndPort> seen; @@ -577,7 +586,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); set<HostAndPort> seen; @@ -643,7 +653,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); const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet()); @@ -685,7 +696,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); set<HostAndPort> seen; @@ -748,7 +760,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); BSONArray primaryHosts = BSON_ARRAY("a" << "b" @@ -789,7 +802,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); BSONArray hostsForSeed[3]; hostsForSeed[0] = BSON_ARRAY("a" @@ -887,7 +901,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); const ReadPreferenceSetting primaryOnly(ReadPreference::PrimaryOnly, TagSet()); const ReadPreferenceSetting secondaryOnly(ReadPreference::SecondaryOnly, TagSet()); @@ -990,7 +1005,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); set<HostAndPort> seen; @@ -1056,7 +1072,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); set<HostAndPort> seen; @@ -1103,7 +1120,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); const OID firstElectionId = OID::gen(); const OID secondElectionId = OID::gen(); @@ -1233,7 +1251,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); auto ns = refresher.getNextStep(); ASSERT_EQUALS(ns.step, NextStep::CONTACT_HOST); @@ -1295,7 +1314,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); auto ns = refresher.getNextStep(); ASSERT_EQUALS(ns.step, NextStep::CONTACT_HOST); @@ -1355,7 +1375,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); repl::OpTime opTime{Timestamp{10, 10}, 10}; const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(100)); @@ -1408,7 +1429,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); repl::OpTime opTime{Timestamp{10, 10}, 10}; const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200)); @@ -1460,7 +1482,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); repl::OpTime opTime{Timestamp{10, 10}, 10}; const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200)); @@ -1515,7 +1538,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); repl::OpTime opTime{Timestamp{10, 10}, 10}; const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200)); @@ -1569,7 +1593,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); repl::OpTime opTime{Timestamp{10, 10}, 10}; const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200)); @@ -1622,7 +1647,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); repl::OpTime opTime{Timestamp{10, 10}, 10}; const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200)); @@ -1674,7 +1700,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); repl::OpTime opTime{Timestamp{10, 10}, 10}; const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200)); @@ -1727,7 +1754,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); const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(200)); BSONArray hosts = BSON_ARRAY("a" @@ -1769,7 +1797,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); const ReadPreferenceSetting secondary(ReadPreference::SecondaryOnly, TagSet(), Seconds(0)); BSONArray hosts = BSON_ARRAY("a" @@ -1811,7 +1840,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); repl::OpTime minOpTimeSetting{Timestamp{10, 10}, 10}; repl::OpTime opTimeNonStale{Timestamp{10, 10}, 11}; @@ -1856,7 +1886,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); repl::OpTime minOpTimeSetting{Timestamp{10, 10}, 10}; repl::OpTime opTimeNonStale{Timestamp{10, 10}, 11}; @@ -1901,7 +1932,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); repl::OpTime minOpTimeSetting{Timestamp{10, 10}, 10}; repl::OpTime opTimeStale{Timestamp{10, 10}, 9}; |