Expanding the window in which blocks are rebroadcast to the network.
Changing from 60 to 300 second retention and also tracking the last 8000 blocks.
This commit is contained in:
parent
5f4f7c7a1c
commit
a4873c8779
4 changed files with 57 additions and 2 deletions
|
@ -263,6 +263,7 @@ TEST (receivable_processor, confirm_insufficient_pos)
|
|||
auto & node1 (*system.nodes[0]);
|
||||
rai::genesis genesis;
|
||||
auto block1 (std::make_shared<rai::send_block> (genesis.hash (), 0, 0, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0));
|
||||
node1.generate_work (*block1);
|
||||
ASSERT_EQ (rai::process_result::progress, node1.process (*block1).code);
|
||||
auto node_l (system.nodes[0]);
|
||||
{
|
||||
|
@ -281,6 +282,7 @@ TEST (receivable_processor, confirm_sufficient_pos)
|
|||
auto & node1 (*system.nodes[0]);
|
||||
rai::genesis genesis;
|
||||
auto block1 (std::make_shared<rai::send_block> (genesis.hash (), 0, 0, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0));
|
||||
node1.generate_work (*block1);
|
||||
ASSERT_EQ (rai::process_result::progress, node1.process (*block1).code);
|
||||
auto node_l (system.nodes[0]);
|
||||
{
|
||||
|
|
|
@ -277,7 +277,7 @@ TEST (node, receive_gap)
|
|||
rai::system system (24000, 1);
|
||||
auto & node1 (*system.nodes[0]);
|
||||
ASSERT_EQ (0, node1.gap_cache.blocks.size ());
|
||||
auto block (std::make_shared<rai::send_block> (0, 1, 2, rai::keypair ().prv, 4, 0));
|
||||
auto block (std::make_shared<rai::send_block> (5, 1, 2, rai::keypair ().prv, 4, 0));
|
||||
node1.generate_work (*block);
|
||||
rai::confirm_req message;
|
||||
message.block = block;
|
||||
|
@ -691,8 +691,10 @@ TEST (node, fork_publish)
|
|||
rai::keypair key1;
|
||||
rai::genesis genesis;
|
||||
auto send1 (std::make_shared<rai::send_block> (genesis.hash (), key1.pub, rai::genesis_amount - 100, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0));
|
||||
node1.generate_work (*send1);
|
||||
rai::keypair key2;
|
||||
auto send2 (std::make_shared<rai::send_block> (genesis.hash (), key2.pub, rai::genesis_amount - 100, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0));
|
||||
node1.generate_work (*send2);
|
||||
node1.process_active (send1);
|
||||
node1.block_processor.flush ();
|
||||
ASSERT_EQ (1, node1.active.roots.size ());
|
||||
|
@ -1514,3 +1516,50 @@ TEST (node, block_confirm)
|
|||
ASSERT_LT (iterations, 200);
|
||||
}
|
||||
}
|
||||
|
||||
TEST (node, block_arrival)
|
||||
{
|
||||
rai::system system (24000, 1);
|
||||
auto & node (*system.nodes[0]);
|
||||
ASSERT_EQ (0, node.block_arrival.arrival.size ());
|
||||
rai::block_hash hash1 (1);
|
||||
node.block_arrival.add (hash1);
|
||||
ASSERT_EQ (1, node.block_arrival.arrival.size ());
|
||||
node.block_arrival.add (hash1);
|
||||
ASSERT_EQ (1, node.block_arrival.arrival.size ());
|
||||
rai::block_hash hash2 (2);
|
||||
node.block_arrival.add (hash2);
|
||||
ASSERT_EQ (2, node.block_arrival.arrival.size ());
|
||||
}
|
||||
|
||||
TEST (node, block_arrival_size)
|
||||
{
|
||||
rai::system system (24000, 1);
|
||||
auto & node (*system.nodes[0]);
|
||||
auto time (std::chrono::steady_clock::now () - rai::block_arrival::arrival_time_min - std::chrono::seconds (5));
|
||||
rai::block_hash hash (0);
|
||||
for (auto i (0); i < rai::block_arrival::arrival_size_min * 2; ++i)
|
||||
{
|
||||
node.block_arrival.arrival.insert (rai::block_arrival_info{ time, hash });
|
||||
++hash.qwords[0];
|
||||
}
|
||||
ASSERT_EQ (rai::block_arrival::arrival_size_min * 2, node.block_arrival.arrival.size ());
|
||||
node.block_arrival.recent (0);
|
||||
ASSERT_EQ (rai::block_arrival::arrival_size_min, node.block_arrival.arrival.size ());
|
||||
}
|
||||
|
||||
TEST (node, block_arrival_time)
|
||||
{
|
||||
rai::system system (24000, 1);
|
||||
auto & node (*system.nodes[0]);
|
||||
auto time (std::chrono::steady_clock::now ());
|
||||
rai::block_hash hash (0);
|
||||
for (auto i (0); i < rai::block_arrival::arrival_size_min * 2; ++i)
|
||||
{
|
||||
node.block_arrival.arrival.insert (rai::block_arrival_info{ time, hash });
|
||||
++hash.qwords[0];
|
||||
}
|
||||
ASSERT_EQ (rai::block_arrival::arrival_size_min * 2, node.block_arrival.arrival.size ());
|
||||
node.block_arrival.recent (0);
|
||||
ASSERT_EQ (rai::block_arrival::arrival_size_min * 2, node.block_arrival.arrival.size ());
|
||||
}
|
||||
|
|
|
@ -31,6 +31,8 @@ std::chrono::minutes constexpr rai::node::backup_interval;
|
|||
int constexpr rai::port_mapping::mapping_timeout;
|
||||
int constexpr rai::port_mapping::check_timeout;
|
||||
unsigned constexpr rai::active_transactions::announce_interval_ms;
|
||||
size_t constexpr rai::block_arrival::arrival_size_min;
|
||||
std::chrono::seconds constexpr rai::block_arrival::arrival_time_min;
|
||||
|
||||
rai::network::network (rai::node & node_a, uint16_t port) :
|
||||
socket (node_a.service, rai::endpoint (boost::asio::ip::address_v6::any (), port)),
|
||||
|
@ -2550,7 +2552,7 @@ bool rai::block_arrival::recent (rai::block_hash const & hash_a)
|
|||
{
|
||||
std::lock_guard<std::mutex> lock (mutex);
|
||||
auto now (std::chrono::steady_clock::now ());
|
||||
while (!arrival.empty () && arrival.begin ()->arrival + std::chrono::seconds (60) < now)
|
||||
while (arrival.size () > arrival_size_min && arrival.begin ()->arrival + arrival_time_min < now)
|
||||
{
|
||||
arrival.erase (arrival.begin ());
|
||||
}
|
||||
|
|
|
@ -301,6 +301,8 @@ public:
|
|||
boost::multi_index::hashed_unique<boost::multi_index::member<rai::block_arrival_info, rai::block_hash, &rai::block_arrival_info::hash>>>>
|
||||
arrival;
|
||||
std::mutex mutex;
|
||||
static size_t constexpr arrival_size_min = 8 * 1024;
|
||||
static std::chrono::seconds constexpr arrival_time_min = std::chrono::seconds (300);
|
||||
};
|
||||
class rep_last_heard_info
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue