[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:
parent
c932a76f08
commit
565c656ed2
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user