[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:
Ming-Hung Tsai 2020-08-24 23:45:38 +08:00
parent c932a76f08
commit 565c656ed2
1 changed files with 8 additions and 0 deletions

View File

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