Brings back broadcasting blocks on process_live (#3507)
* Brings back broadcasting blocks on process_live * Changed drop policy to allow drops * Adds an unit test for checking block broadcasts on arrival
This commit is contained in:
		
					parent
					
						
							
								008d7259e4
							
						
					
				
			
			
				commit
				
					
						8602d3554b
					
				
			
		
					 3 changed files with 46 additions and 0 deletions
				
			
		| 
						 | 
					@ -6,6 +6,7 @@ add_executable(
 | 
				
			||||||
  active_transactions.cpp
 | 
					  active_transactions.cpp
 | 
				
			||||||
  block.cpp
 | 
					  block.cpp
 | 
				
			||||||
  block_store.cpp
 | 
					  block_store.cpp
 | 
				
			||||||
 | 
					  blockprocessor.cpp
 | 
				
			||||||
  bootstrap.cpp
 | 
					  bootstrap.cpp
 | 
				
			||||||
  cli.cpp
 | 
					  cli.cpp
 | 
				
			||||||
  confirmation_height.cpp
 | 
					  confirmation_height.cpp
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										41
									
								
								nano/core_test/blockprocessor.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								nano/core_test/blockprocessor.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,41 @@
 | 
				
			||||||
 | 
					#include <nano/lib/blockbuilders.hpp>
 | 
				
			||||||
 | 
					#include <nano/node/node.hpp>
 | 
				
			||||||
 | 
					#include <nano/node/nodeconfig.hpp>
 | 
				
			||||||
 | 
					#include <nano/secure/common.hpp>
 | 
				
			||||||
 | 
					#include <nano/secure/ledger.hpp>
 | 
				
			||||||
 | 
					#include <nano/test_common/system.hpp>
 | 
				
			||||||
 | 
					#include <nano/test_common/testutil.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <gtest/gtest.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace std::chrono_literals;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEST (block_processor, broadcast_block_on_arrival)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						nano::system system;
 | 
				
			||||||
 | 
						nano::node_config config1{ nano::get_available_port (), system.logging };
 | 
				
			||||||
 | 
						// Deactivates elections on both nodes.
 | 
				
			||||||
 | 
						config1.active_elections_size = 0;
 | 
				
			||||||
 | 
						nano::node_config config2{ nano::get_available_port (), system.logging };
 | 
				
			||||||
 | 
						config2.active_elections_size = 0;
 | 
				
			||||||
 | 
						nano::node_flags flags;
 | 
				
			||||||
 | 
						// Disables bootstrap listener to make sure the block won't be shared by this channel.
 | 
				
			||||||
 | 
						flags.disable_bootstrap_listener = true;
 | 
				
			||||||
 | 
						auto node1 = system.add_node (config1, flags);
 | 
				
			||||||
 | 
						auto node2 = system.add_node (config2, flags);
 | 
				
			||||||
 | 
						nano::state_block_builder builder;
 | 
				
			||||||
 | 
						auto send1 = builder.make_block ()
 | 
				
			||||||
 | 
									 .account (nano::dev::genesis_key.pub)
 | 
				
			||||||
 | 
									 .previous (nano::dev::genesis->hash ())
 | 
				
			||||||
 | 
									 .representative (nano::dev::genesis_key.pub)
 | 
				
			||||||
 | 
									 .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio)
 | 
				
			||||||
 | 
									 .link (nano::dev::genesis_key.pub)
 | 
				
			||||||
 | 
									 .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub)
 | 
				
			||||||
 | 
									 .work (*system.work.generate (nano::dev::genesis->hash ()))
 | 
				
			||||||
 | 
									 .build_shared ();
 | 
				
			||||||
 | 
						// Adds a block to the first node. process_active() -> (calls) block_processor.add() -> add() ->
 | 
				
			||||||
 | 
						// awakes process_block() -> process_batch() -> process_one() -> process_live()
 | 
				
			||||||
 | 
						node1->process_active (send1);
 | 
				
			||||||
 | 
						// Checks whether the block was broadcast.
 | 
				
			||||||
 | 
						ASSERT_TIMELY (5s, node2->ledger.block_or_pruned_exists (send1->hash ()));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -326,6 +326,10 @@ void nano::block_processor::process_live (nano::transaction const & transaction_
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		node.network.flood_block_initial (block_a);
 | 
							node.network.flood_block_initial (block_a);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						else if (!node.flags.disable_block_processor_republishing)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							node.network.flood_block (block_a, nano::buffer_drop_policy::limiter);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (node.websocket_server && node.websocket_server->any_subscriber (nano::websocket::topic::new_unconfirmed_block))
 | 
						if (node.websocket_server && node.websocket_server->any_subscriber (nano::websocket::topic::new_unconfirmed_block))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue