Fixed Raft definitions

This commit is contained in:
Pavel Kirienko
2015-05-26 20:22:21 +03:00
parent a97762ae21
commit 9faf8470e6
4 changed files with 13 additions and 12 deletions
@@ -10,8 +10,8 @@
# #
# Real timeout is randomized in the range (MIN, MAX]. # Real timeout is randomized in the range (MIN, MAX].
# #
uint16 MIN_ELECTION_TIMEOUT_MS = 4000 uint16 DEFAULT_MIN_ELECTION_TIMEOUT_MS = 4000
uint16 MAX_ELECTION_TIMEOUT_MS = 6000 uint16 DEFAULT_MAX_ELECTION_TIMEOUT_MS = 6000
uint32 term uint32 term
uint32 prev_log_term uint32 prev_log_term
@@ -165,16 +165,16 @@ private:
{ {
last_activity_timestamp_ = getNode().getMonotonicTime(); last_activity_timestamp_ = getNode().getMonotonicTime();
static const int32_t randomization_range_msec = static const int32_t randomization_range_msec = AppendEntries::Request::DEFAULT_MAX_ELECTION_TIMEOUT_MS -
AppendEntries::Request::MAX_ELECTION_TIMEOUT_MS - AppendEntries::Request::MIN_ELECTION_TIMEOUT_MS; AppendEntries::Request::DEFAULT_MIN_ELECTION_TIMEOUT_MS;
const int32_t random_msec = (std::rand() % randomization_range_msec) + 1; const int32_t random_msec = (std::rand() % randomization_range_msec) + 1;
randomized_activity_timeout_ = randomized_activity_timeout_ =
MonotonicDuration::fromMSec(AppendEntries::Request::MIN_ELECTION_TIMEOUT_MS + random_msec); MonotonicDuration::fromMSec(AppendEntries::Request::DEFAULT_MIN_ELECTION_TIMEOUT_MS + random_msec);
UAVCAN_ASSERT(randomized_activity_timeout_.toMSec() > AppendEntries::Request::MIN_ELECTION_TIMEOUT_MS); UAVCAN_ASSERT(randomized_activity_timeout_.toMSec() > AppendEntries::Request::DEFAULT_MIN_ELECTION_TIMEOUT_MS);
UAVCAN_ASSERT(randomized_activity_timeout_.toMSec() <= AppendEntries::Request::MAX_ELECTION_TIMEOUT_MS); UAVCAN_ASSERT(randomized_activity_timeout_.toMSec() <= AppendEntries::Request::DEFAULT_MAX_ELECTION_TIMEOUT_MS);
} }
bool isActivityTimedOut() const bool isActivityTimedOut() const
@@ -710,7 +710,8 @@ public:
, cluster_(node, storage, persistent_state_.getLog(), tracer) , cluster_(node, storage, persistent_state_.getLog(), tracer)
, commit_index_(0) // Per Raft paper, commitIndex must be initialized to zero , commit_index_(0) // Per Raft paper, commitIndex must be initialized to zero
, last_activity_timestamp_(node.getMonotonicTime()) , last_activity_timestamp_(node.getMonotonicTime())
, randomized_activity_timeout_(MonotonicDuration::fromMSec(AppendEntries::Request::MAX_ELECTION_TIMEOUT_MS)) , randomized_activity_timeout_(
MonotonicDuration::fromMSec(AppendEntries::Request::DEFAULT_MAX_ELECTION_TIMEOUT_MS))
, server_state_(ServerStateFollower) , server_state_(ServerStateFollower)
, next_server_index_(0) , next_server_index_(0)
, num_votes_received_in_this_campaign_(0) , num_votes_received_in_this_campaign_(0)
@@ -787,8 +788,8 @@ public:
const uint8_t num_followers = static_cast<uint8_t>(cluster_.getClusterSize() - 1); const uint8_t num_followers = static_cast<uint8_t>(cluster_.getClusterSize() - 1);
const MonotonicDuration update_interval = const MonotonicDuration update_interval =
MonotonicDuration::fromMSec(AppendEntries::Request::MIN_ELECTION_TIMEOUT_MS / MonotonicDuration::fromMSec(AppendEntries::Request::DEFAULT_MIN_ELECTION_TIMEOUT_MS /
2 / max(static_cast<uint8_t>(3), num_followers)); 2 / max(static_cast<uint8_t>(2), num_followers));
UAVCAN_TRACE("dynamic_node_id_server::distributed::RaftCore", UAVCAN_TRACE("dynamic_node_id_server::distributed::RaftCore",
"Update interval: %ld msec", static_cast<long>(update_interval.toMSec())); "Update interval: %ld msec", static_cast<long>(update_interval.toMSec()));
@@ -165,7 +165,7 @@ TEST(dynamic_node_id_server_Server, Basic)
/* /*
* Fire * Fire
*/ */
nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(9000)); nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(15000));
ASSERT_TRUE(client.isAllocationComplete()); ASSERT_TRUE(client.isAllocationComplete());
ASSERT_EQ(PreferredNodeID, client.getAllocatedNodeID()); ASSERT_EQ(PreferredNodeID, client.getAllocatedNodeID());
@@ -27,7 +27,7 @@
namespace namespace
{ {
constexpr int MaxNumLastEvents = 50; constexpr int MaxNumLastEvents = 30;
constexpr int MinUpdateInterval = 100; constexpr int MinUpdateInterval = 100;
uavcan_linux::NodePtr initNode(const std::vector<std::string>& ifaces, uavcan::NodeID nid, const std::string& name) uavcan_linux::NodePtr initNode(const std::vector<std::string>& ifaces, uavcan::NodeID nid, const std::string& name)