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:
clemahieu 2018-05-02 17:46:52 +01:00
commit a4873c8779
4 changed files with 57 additions and 2 deletions

View file

@ -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]);
{

View file

@ -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 ());
}

View file

@ -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 ());
}

View file

@ -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
{