summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp
diff options
context:
space:
mode:
authorXueruiFa <xuerui.fa@mongodb.com>2020-10-13 14:02:52 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-10-13 14:37:02 +0000
commit8dbb92e85ff1480697baeef0cc56f6fb84f856a9 (patch)
tree52b86326392117e912faab6a8983d46e9cbad306 /src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp
parent58f3065958b4a40e4ee88f98b588a5b9210876af (diff)
downloadmongo-8dbb92e85ff1480697baeef0cc56f6fb84f856a9.tar.gz
Revert "SERVER-50318: Only cancel scheduled heartbeats"
This reverts commit 379c0116b694d8d88ec096170e703fe3d0119e55.
Diffstat (limited to 'src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp')
-rw-r--r--src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp99
1 files changed, 7 insertions, 92 deletions
diff --git a/src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp b/src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp
index 66b36319c30..6c980c2c228 100644
--- a/src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp
+++ b/src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp
@@ -186,87 +186,6 @@ TEST_F(ReplCoordHBV1Test,
ASSERT_TRUE(getExternalState()->threadsStarted());
}
-TEST_F(ReplCoordHBV1Test, RestartingHeartbeatsShouldOnlyCancelScheduledHeartbeats) {
- auto replAllSeverityGuard = unittest::MinimumLoggedSeverityGuard{
- logv2::LogComponent::kReplication, logv2::LogSeverity::Debug(3)};
-
- auto replConfigBson = BSON("_id"
- << "mySet"
- << "protocolVersion" << 1 << "version" << 1 << "members"
- << BSON_ARRAY(BSON("_id" << 1 << "host"
- << "node1:12345")
- << BSON("_id" << 2 << "host"
- << "node2:12345")
- << BSON("_id" << 3 << "host"
- << "node3:12345")));
-
- assertStartSuccess(replConfigBson, HostAndPort("node1", 12345));
- ASSERT_OK(getReplCoord()->setFollowerMode(MemberState::RS_SECONDARY));
-
- getReplCoord()->updateTerm_forTest(1, nullptr);
- ASSERT_EQ(getReplCoord()->getTerm(), 1);
-
- auto rsConfig = getReplCoord()->getConfig();
-
- enterNetwork();
- for (int j = 0; j < 2; ++j) {
- const auto noi = getNet()->getNextReadyRequest();
- const RemoteCommandRequest& hbrequest = noi->getRequest();
-
- // Skip responding to node2's heartbeat request, so that it stays in SENT state.
- if (hbrequest.target == HostAndPort("node2", 12345)) {
- getNet()->blackHole(noi);
- continue;
- }
-
- // Respond to node3's heartbeat request so that we schedule a new heartbeat request that
- // stays in SCHEDULED state.
- ReplSetHeartbeatResponse hbResp;
- hbResp.setSetName("mySet");
- hbResp.setState(MemberState::RS_SECONDARY);
- hbResp.setConfigVersion(rsConfig.getConfigVersion());
- // The smallest valid optime in PV1.
- OpTime opTime(Timestamp(), 0);
- hbResp.setAppliedOpTimeAndWallTime({opTime, Date_t()});
- hbResp.setDurableOpTimeAndWallTime({opTime, Date_t()});
- BSONObjBuilder responseBuilder;
- responseBuilder << "ok" << 1;
- hbResp.addToBSON(&responseBuilder);
- getNet()->scheduleResponse(noi, getNet()->now(), makeResponseStatus(responseBuilder.obj()));
-
- getNet()->runReadyNetworkOperations();
- }
- ASSERT_FALSE(getNet()->hasReadyRequests());
- exitNetwork();
-
- // Receive a request from node3 saying it's the primary, so that we restart scheduled
- // heartbeats.
- receiveHeartbeatFrom(rsConfig,
- 3 /* senderId */,
- HostAndPort("node3", 12345),
- 1 /* term */,
- 3 /* currentPrimaryId */);
-
- enterNetwork();
-
- // Verify that only node3's heartbeat request was cancelled.
- ASSERT_TRUE(getNet()->hasReadyRequests());
- const auto noi = getNet()->getNextReadyRequest();
- // 'request' represents the request sent from self(node1) back to node3.
- const RemoteCommandRequest& request = noi->getRequest();
- ReplSetHeartbeatArgsV1 args;
- ASSERT_OK(args.initialize(request.cmdObj));
- ASSERT_EQ(request.target, HostAndPort("node3", 12345));
- ASSERT_EQ(args.getPrimaryId(), -1);
- // We don't need to respond.
- getNet()->blackHole(noi);
-
- // The heartbeat request for node2 should not have been cancelled, so there should not be any
- // more network ready requests.
- ASSERT_FALSE(getNet()->hasReadyRequests());
- exitNetwork();
-}
-
TEST_F(ReplCoordHBV1Test,
SecondaryReceivesHeartbeatRequestFromPrimaryWithDifferentPrimaryIdRestartsHeartbeats) {
auto replAllSeverityGuard = unittest::MinimumLoggedSeverityGuard{
@@ -288,22 +207,18 @@ TEST_F(ReplCoordHBV1Test,
getReplCoord()->updateTerm_forTest(1, nullptr);
ASSERT_EQ(getReplCoord()->getTerm(), 1);
- auto rsConfig = getReplCoord()->getConfig();
-
+ enterNetwork();
+ // Ignore the first 2 messages.
for (int j = 0; j < 2; ++j) {
- // Respond to the initial heartbeat request so that we schedule a new heartbeat request that
- // stays in SCHEDULED state.
- replyToReceivedHeartbeatV1();
+ const auto noi = getNet()->getNextReadyRequest();
+ noi->getRequest();
+ getNet()->blackHole(noi);
}
-
- // Verify that there are no further heartbeat requests, since the heartbeat requests should be
- // scheduled for the future.
- enterNetwork();
ASSERT_FALSE(getNet()->hasReadyRequests());
exitNetwork();
// We're a secondary and we receive a request from node3 saying it's the primary.
- receiveHeartbeatFrom(rsConfig,
+ receiveHeartbeatFrom(getReplCoord()->getConfig(),
3 /* senderId */,
HostAndPort("node3", 12345),
1 /* term */,
@@ -328,7 +243,7 @@ TEST_F(ReplCoordHBV1Test,
exitNetwork();
// Heartbeat in a stale term shouldn't re-schedule heartbeats.
- receiveHeartbeatFrom(rsConfig,
+ receiveHeartbeatFrom(getReplCoord()->getConfig(),
3 /* senderId */,
HostAndPort("node3", 12345),
0 /* term */,