Reinstate election request limit on the confirmation solicitor (#2504)
This commit is contained in:
parent
df2df9bb4f
commit
0ce4b647df
2 changed files with 11 additions and 7 deletions
|
|
@ -6,6 +6,7 @@ using namespace std::chrono_literals;
|
||||||
nano::confirmation_solicitor::confirmation_solicitor (nano::network & network_a, nano::network_constants const & params_a) :
|
nano::confirmation_solicitor::confirmation_solicitor (nano::network & network_a, nano::network_constants const & params_a) :
|
||||||
max_confirm_req_batches (params_a.is_test_network () ? 1 : 20),
|
max_confirm_req_batches (params_a.is_test_network () ? 1 : 20),
|
||||||
max_block_broadcasts (params_a.is_test_network () ? 4 : 30),
|
max_block_broadcasts (params_a.is_test_network () ? 4 : 30),
|
||||||
|
max_election_requests (30),
|
||||||
network (network_a)
|
network (network_a)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -35,20 +36,21 @@ bool nano::confirmation_solicitor::add (nano::election const & election_a)
|
||||||
{
|
{
|
||||||
assert (prepared);
|
assert (prepared);
|
||||||
auto const max_channel_requests (max_confirm_req_batches * nano::network::confirm_req_hashes_max);
|
auto const max_channel_requests (max_confirm_req_batches * nano::network::confirm_req_hashes_max);
|
||||||
bool result = true;
|
unsigned count = 0;
|
||||||
for (auto const & rep : representatives)
|
for (auto i (representatives.begin ()), n (representatives.end ()); i != n && count < max_election_requests; ++i)
|
||||||
{
|
{
|
||||||
|
auto rep (*i);
|
||||||
if (election_a.last_votes.find (rep.account) == election_a.last_votes.end ())
|
if (election_a.last_votes.find (rep.account) == election_a.last_votes.end ())
|
||||||
{
|
{
|
||||||
auto & request_queue (requests[rep.channel]);
|
auto & request_queue (requests[rep.channel]);
|
||||||
if (request_queue.size () < max_channel_requests)
|
if (request_queue.size () < max_channel_requests)
|
||||||
{
|
{
|
||||||
request_queue.emplace_back (election_a.status.winner->hash (), election_a.status.winner->root ());
|
request_queue.emplace_back (election_a.status.winner->hash (), election_a.status.winner->root ());
|
||||||
result = false;
|
++count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return count == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nano::confirmation_solicitor::flush ()
|
void nano::confirmation_solicitor::flush ()
|
||||||
|
|
|
||||||
|
|
@ -22,15 +22,17 @@ public:
|
||||||
bool add (nano::election const &);
|
bool add (nano::election const &);
|
||||||
/** Dispatch bundled requests to each channel*/
|
/** Dispatch bundled requests to each channel*/
|
||||||
void flush ();
|
void flush ();
|
||||||
/** The maximum amount of confirmation requests (batches) to be sent to each channel */
|
/** Maximum amount of confirmation requests (batches) to be sent to each channel */
|
||||||
size_t const max_confirm_req_batches;
|
size_t const max_confirm_req_batches;
|
||||||
/** The global maximum amount of block broadcasts */
|
/** Global maximum amount of block broadcasts */
|
||||||
size_t const max_block_broadcasts;
|
size_t const max_block_broadcasts;
|
||||||
|
/** Maximum amount of requests to be sent per election */
|
||||||
|
size_t const max_election_requests;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nano::network & network;
|
nano::network & network;
|
||||||
|
|
||||||
int rebroadcasted{ 0 };
|
unsigned rebroadcasted{ 0 };
|
||||||
std::vector<nano::representative> representatives;
|
std::vector<nano::representative> representatives;
|
||||||
using vector_root_hashes = std::vector<std::pair<nano::block_hash, nano::root>>;
|
using vector_root_hashes = std::vector<std::pair<nano::block_hash, nano::root>>;
|
||||||
std::unordered_map<std::shared_ptr<nano::transport::channel>, vector_root_hashes> requests;
|
std::unordered_map<std::shared_ptr<nano::transport::channel>, vector_root_hashes> requests;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue