extend election status with vote_broadcast_count and adjust testcase
This commit is contained in:
		
					parent
					
						
							
								d4578911c5
							
						
					
				
			
			
				commit
				
					
						0f1960d3b7
					
				
			
		
					 5 changed files with 10 additions and 5 deletions
				
			
		|  | @ -193,20 +193,19 @@ TEST (election_scheduler, transition_optimistic_to_priority) | |||
| 	ASSERT_TIMELY (5s, node.vote_router.active (block->hash ())); | ||||
| 	auto election = node.active.election (block->qualified_root ()); | ||||
| 	ASSERT_EQ (election->behavior (), nano::election_behavior::optimistic); | ||||
| 	ASSERT_TIMELY_EQ (1s, 1, election->current_status ().status.vote_broadcast_count); | ||||
| 
 | ||||
| 	// Confirm first block to allow upgrading second block's election
 | ||||
| 	nano::test::confirm (node.ledger, blocks.at (howmany_blocks - 1)); | ||||
| 
 | ||||
| 	// Attempt to start priority election for second block
 | ||||
| 	node.stats.clear (); | ||||
| 	ASSERT_EQ (0, node.stats.count (nano::stat::type::election, nano::stat::detail::broadcast_vote)); | ||||
| 	node.active.insert (block, nano::election_behavior::priority); | ||||
| 
 | ||||
| 	// Verify priority transition
 | ||||
| 	ASSERT_EQ (election->behavior (), nano::election_behavior::priority); | ||||
| 	ASSERT_EQ (1, node.stats.count (nano::stat::type::active_elections, nano::stat::detail::transition_priority)); | ||||
| 	// Verify vote broadcast after transitioning
 | ||||
| 	ASSERT_TIMELY_EQ (1s, 1, node.stats.count (nano::stat::type::election, nano::stat::detail::broadcast_vote)); | ||||
| 	ASSERT_TIMELY_EQ (1s, 2, election->current_status ().status.vote_broadcast_count); | ||||
| 	ASSERT_TRUE (node.active.active (*block)); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ nano::election::election (nano::node & node_a, std::shared_ptr<nano::block> cons | |||
| 	live_vote_action (live_vote_action_a), | ||||
| 	node (node_a), | ||||
| 	behavior_m (election_behavior_a), | ||||
| 	status ({ block_a, 0, 0, std::chrono::duration_cast<std::chrono::milliseconds> (std::chrono::system_clock::now ().time_since_epoch ()), std::chrono::duration_values<std::chrono::milliseconds>::zero (), 0, 1, 0, nano::election_status_type::ongoing }), | ||||
| 	status ({ block_a, 0, 0, std::chrono::duration_cast<std::chrono::milliseconds> (std::chrono::system_clock::now ().time_since_epoch ()), std::chrono::duration_values<std::chrono::milliseconds>::zero (), 0, 0, 1, 0, nano::election_status_type::ongoing }), | ||||
| 	height (block_a->sideband ().height), | ||||
| 	root (block_a->root ()), | ||||
| 	qualified_root (block_a->qualified_root ()) | ||||
|  | @ -440,6 +440,7 @@ void nano::election::confirm_if_quorum (nano::unique_lock<nano::mutex> & lock_a) | |||
| 	{ | ||||
| 		if (!is_quorum.exchange (true) && node.config.enable_voting && node.wallets.reps ().voting > 0) | ||||
| 		{ | ||||
| 			++vote_broadcast_count; | ||||
| 			node.final_generator.add (root, status.winner->hash ()); | ||||
| 		} | ||||
| 		if (final_weight >= node.online_reps.delta ()) | ||||
|  | @ -596,6 +597,7 @@ nano::election_extended_status nano::election::current_status_locked () const | |||
| 
 | ||||
| 	nano::election_status status_l = status; | ||||
| 	status_l.confirmation_request_count = confirmation_request_count; | ||||
| 	status_l.vote_broadcast_count = vote_broadcast_count; | ||||
| 	status_l.block_count = nano::narrow_cast<decltype (status_l.block_count)> (last_blocks.size ()); | ||||
| 	status_l.voter_count = nano::narrow_cast<decltype (status_l.voter_count)> (last_votes.size ()); | ||||
| 	return nano::election_extended_status{ status_l, last_votes, last_blocks, tally_impl () }; | ||||
|  | @ -625,6 +627,7 @@ void nano::election::broadcast_vote_locked (nano::unique_lock<nano::mutex> & loc | |||
| 	if (node.config.enable_voting && node.wallets.reps ().voting > 0) | ||||
| 	{ | ||||
| 		node.stats.inc (nano::stat::type::election, nano::stat::detail::broadcast_vote); | ||||
| 		++vote_broadcast_count; | ||||
| 
 | ||||
| 		if (confirmed_locked () || have_quorum (tally_impl ())) | ||||
| 		{ | ||||
|  | @ -822,6 +825,7 @@ void nano::election_extended_status::operator() (nano::object_stream & obs) cons | |||
| 	obs.write ("tally_amount", status.tally.to_string_dec ()); | ||||
| 	obs.write ("final_tally_amount", status.final_tally.to_string_dec ()); | ||||
| 	obs.write ("confirmation_request_count", status.confirmation_request_count); | ||||
| 	obs.write ("vote_broadcast_count", status.vote_broadcast_count); | ||||
| 	obs.write ("block_count", status.block_count); | ||||
| 	obs.write ("voter_count", status.voter_count); | ||||
| 	obs.write ("type", status.type); | ||||
|  |  | |||
|  | @ -97,6 +97,7 @@ public: // Status | |||
| 	std::shared_ptr<nano::block> winner () const; | ||||
| 	std::chrono::milliseconds duration () const; | ||||
| 	std::atomic<unsigned> confirmation_request_count{ 0 }; | ||||
| 	std::atomic<unsigned> vote_broadcast_count{ 0 }; | ||||
| 
 | ||||
| 	nano::tally_t tally () const; | ||||
| 	bool have_quorum (nano::tally_t const &) const; | ||||
|  |  | |||
|  | @ -35,6 +35,7 @@ public: | |||
| 	std::chrono::milliseconds election_end{ std::chrono::duration_cast<std::chrono::milliseconds> (std::chrono::system_clock::now ().time_since_epoch ()) }; | ||||
| 	std::chrono::milliseconds election_duration{ std::chrono::duration_values<std::chrono::milliseconds>::zero () }; | ||||
| 	unsigned confirmation_request_count{ 0 }; | ||||
| 	unsigned vote_broadcast_count{ 0 }; | ||||
| 	unsigned block_count{ 0 }; | ||||
| 	unsigned voter_count{ 0 }; | ||||
| 	election_status_type type{ nano::election_status_type::inactive_confirmation_height }; | ||||
|  |  | |||
|  | @ -1196,7 +1196,7 @@ void nano::json_handler::block_confirm () | |||
| 			else | ||||
| 			{ | ||||
| 				// Add record in confirmation history for confirmed block
 | ||||
| 				nano::election_status status{ block_l, 0, 0, std::chrono::duration_cast<std::chrono::milliseconds> (std::chrono::system_clock::now ().time_since_epoch ()), std::chrono::duration_values<std::chrono::milliseconds>::zero (), 0, 1, 0, nano::election_status_type::active_confirmation_height }; | ||||
| 				nano::election_status status{ block_l, 0, 0, std::chrono::duration_cast<std::chrono::milliseconds> (std::chrono::system_clock::now ().time_since_epoch ()), std::chrono::duration_values<std::chrono::milliseconds>::zero (), 0, 0, 1, 0, nano::election_status_type::active_confirmation_height }; | ||||
| 				node.active.recently_cemented.put (status); | ||||
| 				// Trigger callback for confirmed block
 | ||||
| 				auto account = block_l->account (); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 gr0vity
				gr0vity