diff options
author | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2015-10-07 17:00:04 -0400 |
---|---|---|
committer | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2015-10-09 12:39:07 -0400 |
commit | 26cd9915a727e50134c4f3ae9372282a74d78a13 (patch) | |
tree | c473b7a290de9b6508d4b159fb1b6ab847da64e7 /src | |
parent | 3078d7cd441d8685d8f16c4263c4f7816d73d764 (diff) | |
download | mongo-26cd9915a727e50134c4f3ae9372282a74d78a13.tar.gz |
SERVER-20840 Shorten the election timeout to 5 seconds
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/repl/replica_set_config.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/repl/replica_set_config_test.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp | 34 |
3 files changed, 26 insertions, 12 deletions
diff --git a/src/mongo/db/repl/replica_set_config.cpp b/src/mongo/db/repl/replica_set_config.cpp index 140305afc56..ea786c1e816 100644 --- a/src/mongo/db/repl/replica_set_config.cpp +++ b/src/mongo/db/repl/replica_set_config.cpp @@ -51,7 +51,7 @@ const std::string ReplicaSetConfig::kVersionFieldName = "version"; const std::string ReplicaSetConfig::kMajorityWriteConcernModeName = "$majority"; const Milliseconds ReplicaSetConfig::kDefaultHeartbeatInterval(2000); const Seconds ReplicaSetConfig::kDefaultHeartbeatTimeoutPeriod(10); -const Milliseconds ReplicaSetConfig::kDefaultElectionTimeoutPeriod(10000); +const Milliseconds ReplicaSetConfig::kDefaultElectionTimeoutPeriod(5000); const bool ReplicaSetConfig::kDefaultChainingAllowed(true); namespace { diff --git a/src/mongo/db/repl/replica_set_config_test.cpp b/src/mongo/db/repl/replica_set_config_test.cpp index 7e360cd5deb..dd1eaa3d90e 100644 --- a/src/mongo/db/repl/replica_set_config_test.cpp +++ b/src/mongo/db/repl/replica_set_config_test.cpp @@ -71,7 +71,7 @@ TEST(ReplicaSetConfig, ParseMinimalConfigAndCheckDefaults) { ASSERT_EQUALS("", config.getDefaultWriteConcern().wMode); ASSERT_EQUALS(ReplicaSetConfig::kDefaultHeartbeatInterval, config.getHeartbeatInterval()); ASSERT_EQUALS(Seconds(10), config.getHeartbeatTimeoutPeriod()); - ASSERT_EQUALS(Seconds(10), config.getElectionTimeoutPeriod()); + ASSERT_EQUALS(Seconds(5), config.getElectionTimeoutPeriod()); ASSERT_TRUE(config.isChainingAllowed()); ASSERT_FALSE(config.isConfigServer()); ASSERT_EQUALS(0, config.getProtocolVersion()); diff --git a/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp b/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp index d1eb056d047..51c5f234c48 100644 --- a/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp +++ b/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp @@ -3228,8 +3228,10 @@ TEST_F(HeartbeatResponseTestV1, HeartbeatTimeoutSuppressesFirstRetry) { ASSERT_EQUALS(HeartbeatResponseAction::NoAction, action.getAction()); ASSERT_TRUE(TopologyCoordinator::Role::follower == getTopoCoord().getRole()); - // Because the heartbeat timed out, we'll retry in 1 second (half of the election timeout). - ASSERT_EQUALS(firstRequestDate + Milliseconds(10000), action.getNextHeartbeatStartDate()); + // Because the heartbeat timed out, we'll retry in half of the election timeout. + ASSERT_EQUALS(firstRequestDate + Milliseconds(5000) + + ReplicaSetConfig::kDefaultElectionTimeoutPeriod / 2, + action.getNextHeartbeatStartDate()); } TEST_F(HeartbeatResponseTestV1, ShouldChangeSyncSourceFresherMemberDoesNotBuildIndexes) { @@ -3424,8 +3426,10 @@ TEST_F(HeartbeatResponseTestOneRetryV1, HeartbeatTimeoutSuppressesSecondRetry) { ASSERT_EQUALS(HeartbeatResponseAction::NoAction, action.getAction()); ASSERT_TRUE(TopologyCoordinator::Role::follower == getTopoCoord().getRole()); - // Because the heartbeat timed out, we'll retry in 1 second (half of the election timeout). - ASSERT_EQUALS(firstRequestDate() + Milliseconds(10010), action.getNextHeartbeatStartDate()); + // Because the heartbeat timed out, we'll retry in half of the election timeout. + ASSERT_EQUALS(firstRequestDate() + Milliseconds(5010) + + ReplicaSetConfig::kDefaultElectionTimeoutPeriod / 2, + action.getNextHeartbeatStartDate()); } TEST_F(HeartbeatResponseTestOneRetryV1, DecideToStartElection) { @@ -3460,7 +3464,9 @@ TEST_F(HeartbeatResponseTestOneRetryV1, DecideToStartElection) { election); ASSERT_EQUALS(HeartbeatResponseAction::ScheduleElection, action.getAction()); ASSERT_TRUE(TopologyCoordinator::Role::follower == getTopoCoord().getRole()); - ASSERT_EQUALS(firstRequestDate() + Milliseconds(9500), action.getNextHeartbeatStartDate()); + ASSERT_EQUALS(firstRequestDate() + Milliseconds(4500) + + ReplicaSetConfig::kDefaultElectionTimeoutPeriod / 2, + action.getNextHeartbeatStartDate()); } TEST_F(HeartbeatResponseTestOneRetryV1, DecideToStepDownRemotePrimary) { @@ -3523,7 +3529,9 @@ TEST_F(HeartbeatResponseTestOneRetryV1, DecideToReconfig) { OpTime(Timestamp(0, 0), 0)); // We've never applied anything. ASSERT_EQUALS(HeartbeatResponseAction::Reconfig, action.getAction()); ASSERT_TRUE(TopologyCoordinator::Role::follower == getTopoCoord().getRole()); - ASSERT_EQUALS(firstRequestDate() + Milliseconds(9500), action.getNextHeartbeatStartDate()); + ASSERT_EQUALS(firstRequestDate() + Milliseconds(4500) + + ReplicaSetConfig::kDefaultElectionTimeoutPeriod / 2, + action.getNextHeartbeatStartDate()); } class HeartbeatResponseTestTwoRetriesV1 : public HeartbeatResponseTestOneRetryV1 { @@ -3601,7 +3609,9 @@ TEST_F(HeartbeatResponseTestTwoRetriesV1, DecideToStartElection) { election); ASSERT_EQUALS(HeartbeatResponseAction::ScheduleElection, action.getAction()); ASSERT_TRUE(TopologyCoordinator::Role::follower == getTopoCoord().getRole()); - ASSERT_EQUALS(firstRequestDate() + Milliseconds(10000), action.getNextHeartbeatStartDate()); + ASSERT_EQUALS(firstRequestDate() + Milliseconds(5000) + + ReplicaSetConfig::kDefaultElectionTimeoutPeriod / 2, + action.getNextHeartbeatStartDate()); } TEST_F(HeartbeatResponseTestTwoRetriesV1, DecideToStepDownSelf) { @@ -3686,7 +3696,9 @@ TEST_F(HeartbeatResponseTestTwoRetriesV1, HeartbeatRetriesAtMostTwice) { ASSERT_TRUE(TopologyCoordinator::Role::follower == getTopoCoord().getRole()); // Because this is the second retry, rather than retry again, we expect to wait for half of the // election timeout interval of 2 seconds to elapse. - ASSERT_EQUALS(firstRequestDate() + Milliseconds(9800), action.getNextHeartbeatStartDate()); + ASSERT_EQUALS(firstRequestDate() + Milliseconds(4800) + + ReplicaSetConfig::kDefaultElectionTimeoutPeriod / 2, + action.getNextHeartbeatStartDate()); // Ensure a third failed heartbeat caused the node to be marked down BSONObjBuilder statusBuilder; @@ -3726,8 +3738,10 @@ TEST_F(HeartbeatResponseTestTwoRetriesV1, HeartbeatThreeNonconsecutiveFailures) ASSERT_EQUALS(HeartbeatResponseAction::NoAction, action.getAction()); ASSERT_TRUE(TopologyCoordinator::Role::follower == getTopoCoord().getRole()); - // Because the heartbeat succeeded, we'll retry in 1 second (half of the election timeout). - ASSERT_EQUALS(firstRequestDate() + Milliseconds(9500), action.getNextHeartbeatStartDate()); + // Because the heartbeat succeeded, we'll retry in half of the election timeout. + ASSERT_EQUALS(firstRequestDate() + Milliseconds(4500) + + ReplicaSetConfig::kDefaultElectionTimeoutPeriod / 2, + action.getNextHeartbeatStartDate()); // request next heartbeat getTopoCoord().prepareHeartbeatRequestV1( |