Confirm req to all peers if reps list is empty (#937)
or online stake is less than required quorum
This commit is contained in:
parent
25e430e282
commit
738ed67dfa
2 changed files with 24 additions and 1 deletions
|
@ -264,6 +264,11 @@ void rai::network::republish_vote (std::shared_ptr<rai::vote> vote_a)
|
|||
void rai::network::broadcast_confirm_req (std::shared_ptr<rai::block> block_a)
|
||||
{
|
||||
auto list (std::make_shared<std::vector<rai::peer_information>> (node.peers.representatives (std::numeric_limits<size_t>::max ())));
|
||||
if (list->empty () || node.online_reps.online_stake () == node.config.online_weight_minimum.number ())
|
||||
{
|
||||
// broadcast request to all peers
|
||||
list = std::make_shared<std::vector<rai::peer_information>> (node.peers.list_vector ());
|
||||
}
|
||||
broadcast_confirm_req_base (block_a, list, 0);
|
||||
}
|
||||
|
||||
|
@ -1990,6 +1995,18 @@ std::map<rai::endpoint, unsigned> rai::peer_container::list_version ()
|
|||
return result;
|
||||
}
|
||||
|
||||
std::vector<rai::peer_information> rai::peer_container::list_vector ()
|
||||
{
|
||||
std::vector<peer_information> result;
|
||||
std::lock_guard<std::mutex> lock (mutex);
|
||||
for (auto i (peers.begin ()), j (peers.end ()); i != j; ++i)
|
||||
{
|
||||
result.push_back (*i);
|
||||
}
|
||||
std::random_shuffle (result.begin (), result.end ());
|
||||
return result;
|
||||
}
|
||||
|
||||
rai::endpoint rai::peer_container::bootstrap_peer ()
|
||||
{
|
||||
rai::endpoint result (boost::asio::ip::address_v6::any (), 0);
|
||||
|
@ -3551,7 +3568,7 @@ void rai::active_transactions::announce_votes ()
|
|||
}
|
||||
}
|
||||
}
|
||||
if (!reps->empty ())
|
||||
if (!reps->empty () && node.online_reps.online_stake () != node.config.online_weight_minimum.number ())
|
||||
{
|
||||
// broadcast_confirm_req_base modifies reps, so we clone it once to avoid aliasing
|
||||
node.network.broadcast_confirm_req_base (i->confirm_req_options.first, std::make_shared<std::vector<rai::peer_information>> (*reps), 0);
|
||||
|
@ -3560,6 +3577,11 @@ void rai::active_transactions::announce_votes ()
|
|||
node.network.broadcast_confirm_req_base (i->confirm_req_options.second, reps, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// broadcast request to all peers
|
||||
node.network.broadcast_confirm_req_base (i->confirm_req_options.first, std::make_shared<std::vector<rai::peer_information>> (node.peers.list_vector ()), 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
roots.modify (i, [](rai::conflict_info & info_a) {
|
||||
|
|
|
@ -219,6 +219,7 @@ public:
|
|||
// List of all peers
|
||||
std::deque<rai::endpoint> list ();
|
||||
std::map<rai::endpoint, unsigned> list_version ();
|
||||
std::vector<peer_information> list_vector ();
|
||||
// A list of random peers sized for the configured rebroadcast fanout
|
||||
std::deque<rai::endpoint> list_fanout ();
|
||||
// Get the next peer for attempting bootstrap
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue