mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-02 17:51:36 +08:00
Fixed Raft definitions
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user