[thin_generate_damage] Do not open a new transaction to prevent ref-count underflow
There's a chance that thin_generate_damage tries to change ref-counts of space map blocks due to its random nature, which could lead to problems. If the ref-counts of metadata space map blocks (shadow source) is changed to zero, then the ref-counts will become underflow after a shadow operation. In-place space map modification is a way to prevent that value underflow. An alternative approach is to avoid changing ref-counts of space map blocks.
This commit is contained in:
		@@ -63,6 +63,14 @@ void damage_generator::create_metadata_leaks(block_address nr_leaks,
 | 
			
		||||
	std::set<block_address> leaks;
 | 
			
		||||
	find_blocks(md_->metadata_sm_, nr_leaks, expected, leaks);
 | 
			
		||||
 | 
			
		||||
	block_counter bc(true);
 | 
			
		||||
	md_->metadata_sm_->count_metadata(bc);
 | 
			
		||||
	block_address nr_blocks = md_->metadata_sm_->get_nr_blocks();
 | 
			
		||||
	for (block_address b = 0; b < nr_blocks; b++) {
 | 
			
		||||
		if (bc.get_count(b))
 | 
			
		||||
			md_->tm_->mark_shadowed(b);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (auto const &b : leaks)
 | 
			
		||||
		md_->metadata_sm_->set_count(b, actual);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user