Skip to content

Commit

Permalink
Confirm req to all peers if reps list is empty (#937)
Browse files Browse the repository at this point in the history
or online stake is less than required quorum
  • Loading branch information
SergiySW authored and argakiig committed Jun 29, 2018
1 parent 25e430e commit 738ed67
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
24 changes: 23 additions & 1 deletion rai/node/node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions rai/node/node.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ class peer_container
// 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
Expand Down

0 comments on commit 738ed67

Please sign in to comment.