[thin] Stop metadata counting on the first error
This commit is contained in:
parent
12725983db
commit
b16ff123b7
@ -296,7 +296,8 @@ namespace {
|
|||||||
out << "checking space map counts" << end_message();
|
out << "checking space map counts" << end_message();
|
||||||
nested_output::nest _ = out.push();
|
nested_output::nest _ = out.push();
|
||||||
|
|
||||||
count_metadata(tm, sb, bc);
|
if (!count_metadata(tm, sb, bc))
|
||||||
|
return FATAL;
|
||||||
|
|
||||||
// Finally we need to check the metadata space map agrees
|
// Finally we need to check the metadata space map agrees
|
||||||
// with the counts we've just calculated.
|
// with the counts we've just calculated.
|
||||||
@ -358,6 +359,7 @@ namespace {
|
|||||||
options_(check_opts),
|
options_(check_opts),
|
||||||
out_(cerr, 2),
|
out_(cerr, 2),
|
||||||
info_out_(cout, 0),
|
info_out_(cout, 0),
|
||||||
|
expected_rc_(true), // set stop on the first error
|
||||||
err_(NO_ERROR) {
|
err_(NO_ERROR) {
|
||||||
|
|
||||||
if (output_opts == OUTPUT_QUIET) {
|
if (output_opts == OUTPUT_QUIET) {
|
||||||
@ -398,7 +400,7 @@ namespace {
|
|||||||
err_ << examine_metadata_space_map(tm, sb, options_.sm_opts_, out_, expected_rc_);
|
err_ << examine_metadata_space_map(tm, sb, options_.sm_opts_, out_, expected_rc_);
|
||||||
|
|
||||||
// check the data space map
|
// check the data space map
|
||||||
if (core_sm)
|
if (err_ != FATAL && core_sm)
|
||||||
err_ << compare_space_maps(data_sm, *core_sm, out_);
|
err_ << compare_space_maps(data_sm, *core_sm, out_);
|
||||||
} else
|
} else
|
||||||
err_ << examine_data_mappings(tm, sb, options_.data_mapping_opts_, out_,
|
err_ << examine_data_mappings(tm, sb, options_.data_mapping_opts_, out_,
|
||||||
|
@ -8,7 +8,7 @@ using namespace thin_provisioning;
|
|||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
void count_trees(transaction_manager::ptr tm,
|
bool count_trees(transaction_manager::ptr tm,
|
||||||
superblock_detail::superblock const &sb,
|
superblock_detail::superblock const &sb,
|
||||||
block_counter &bc) {
|
block_counter &bc) {
|
||||||
|
|
||||||
@ -27,11 +27,15 @@ namespace {
|
|||||||
mapping_tree_detail::block_traits::ref_counter(space_map::ptr()));
|
mapping_tree_detail::block_traits::ref_counter(space_map::ptr()));
|
||||||
count_btree_blocks(mtree, bc, vc);
|
count_btree_blocks(mtree, bc, vc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void count_space_maps(transaction_manager::ptr tm,
|
bool count_space_maps(transaction_manager::ptr tm,
|
||||||
superblock_detail::superblock const &sb,
|
superblock_detail::superblock const &sb,
|
||||||
block_counter &bc) {
|
block_counter &bc) {
|
||||||
|
bool ret = true;
|
||||||
|
|
||||||
// Count the metadata space map (no-throw)
|
// Count the metadata space map (no-throw)
|
||||||
try {
|
try {
|
||||||
persistent_space_map::ptr metadata_sm =
|
persistent_space_map::ptr metadata_sm =
|
||||||
@ -39,36 +43,46 @@ namespace {
|
|||||||
metadata_sm->count_metadata(bc);
|
metadata_sm->count_metadata(bc);
|
||||||
} catch (std::exception &e) {
|
} catch (std::exception &e) {
|
||||||
cerr << e.what() << endl;
|
cerr << e.what() << endl;
|
||||||
|
ret = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Count the data space map (no-throw)
|
// Count the data space map (no-throw)
|
||||||
{
|
try {
|
||||||
persistent_space_map::ptr data_sm =
|
persistent_space_map::ptr data_sm =
|
||||||
open_disk_sm(*tm, static_cast<void const *>(&sb.data_space_map_root_));
|
open_disk_sm(*tm, static_cast<void const *>(&sb.data_space_map_root_));
|
||||||
data_sm->count_metadata(bc);
|
data_sm->count_metadata(bc);
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
cerr << e.what() << endl;
|
||||||
|
ret = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
void thin_provisioning::count_metadata(transaction_manager::ptr tm,
|
bool thin_provisioning::count_metadata(transaction_manager::ptr tm,
|
||||||
superblock_detail::superblock const &sb,
|
superblock_detail::superblock const &sb,
|
||||||
block_counter &bc,
|
block_counter &bc,
|
||||||
bool skip_metadata_snap) {
|
bool skip_metadata_snap) {
|
||||||
|
bool ret = true;
|
||||||
|
|
||||||
// Count the superblock
|
// Count the superblock
|
||||||
bc.inc(superblock_detail::SUPERBLOCK_LOCATION);
|
bc.inc(superblock_detail::SUPERBLOCK_LOCATION);
|
||||||
count_trees(tm, sb, bc);
|
ret &= count_trees(tm, sb, bc);
|
||||||
|
|
||||||
// Count the metadata snap, if present
|
// Count the metadata snap, if present
|
||||||
if (!skip_metadata_snap && sb.metadata_snap_ != superblock_detail::SUPERBLOCK_LOCATION) {
|
if (!skip_metadata_snap && sb.metadata_snap_ != superblock_detail::SUPERBLOCK_LOCATION) {
|
||||||
bc.inc(sb.metadata_snap_);
|
bc.inc(sb.metadata_snap_);
|
||||||
|
|
||||||
superblock_detail::superblock snap = read_superblock(tm->get_bm(), sb.metadata_snap_);
|
superblock_detail::superblock snap = read_superblock(tm->get_bm(), sb.metadata_snap_);
|
||||||
count_trees(tm, snap, bc);
|
ret &= count_trees(tm, snap, bc);
|
||||||
}
|
}
|
||||||
|
|
||||||
count_space_maps(tm, sb, bc);
|
ret &= count_space_maps(tm, sb, bc);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
namespace thin_provisioning {
|
namespace thin_provisioning {
|
||||||
void count_metadata(transaction_manager::ptr tm,
|
bool count_metadata(transaction_manager::ptr tm,
|
||||||
superblock_detail::superblock const &sb,
|
superblock_detail::superblock const &sb,
|
||||||
block_counter &bc,
|
block_counter &bc,
|
||||||
bool skip_metadata_snap = false);
|
bool skip_metadata_snap = false);
|
||||||
|
Loading…
Reference in New Issue
Block a user