summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSiyuan Zhou <siyuan.zhou@mongodb.com>2015-10-07 17:00:04 -0400
committerSiyuan Zhou <siyuan.zhou@mongodb.com>2015-10-09 12:39:07 -0400
commit26cd9915a727e50134c4f3ae9372282a74d78a13 (patch)
treec473b7a290de9b6508d4b159fb1b6ab847da64e7 /src
parent3078d7cd441d8685d8f16c4263c4f7816d73d764 (diff)
downloadmongo-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.cpp2
-rw-r--r--src/mongo/db/repl/replica_set_config_test.cpp2
-rw-r--r--src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp34
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(