[cache_check] Now checks discard bitset
This commit is contained in:
parent
e3d87c5386
commit
ea15a329d7
@ -139,6 +139,24 @@ namespace {
|
|||||||
using reporter_base::get_error;
|
using reporter_base::get_error;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class discard_reporter : public bitset_detail::bitset_visitor, reporter_base {
|
||||||
|
public:
|
||||||
|
discard_reporter(nested_output &o)
|
||||||
|
: reporter_base(o) {
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void visit(uint32_t index, bool value) {
|
||||||
|
// no op
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void visit(bitset_detail::missing_bits const &d) {
|
||||||
|
out() << "missing discard bits " << d.keys_ << end_message();
|
||||||
|
mplus_error(FATAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
using reporter_base::get_error;
|
||||||
|
};
|
||||||
|
|
||||||
//--------------------------------
|
//--------------------------------
|
||||||
|
|
||||||
transaction_manager::ptr open_tm(block_manager<>::ptr bm) {
|
transaction_manager::ptr open_tm(block_manager<>::ptr bm) {
|
||||||
@ -152,14 +170,16 @@ namespace {
|
|||||||
|
|
||||||
struct flags {
|
struct flags {
|
||||||
flags()
|
flags()
|
||||||
: check_mappings_(false),
|
: check_mappings_(true),
|
||||||
check_hints_(false),
|
check_hints_(true),
|
||||||
|
check_discards_(true),
|
||||||
ignore_non_fatal_errors_(false),
|
ignore_non_fatal_errors_(false),
|
||||||
quiet_(false) {
|
quiet_(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool check_mappings_;
|
bool check_mappings_;
|
||||||
bool check_hints_;
|
bool check_hints_;
|
||||||
|
bool check_discards_;
|
||||||
bool ignore_non_fatal_errors_;
|
bool ignore_non_fatal_errors_;
|
||||||
bool quiet_;
|
bool quiet_;
|
||||||
};
|
};
|
||||||
@ -188,6 +208,7 @@ namespace {
|
|||||||
superblock_reporter sb_rep(out);
|
superblock_reporter sb_rep(out);
|
||||||
mapping_reporter mapping_rep(out);
|
mapping_reporter mapping_rep(out);
|
||||||
hint_reporter hint_rep(out);
|
hint_reporter hint_rep(out);
|
||||||
|
discard_reporter discard_rep(out);
|
||||||
|
|
||||||
out << "examining superblock" << end_message();
|
out << "examining superblock" << end_message();
|
||||||
{
|
{
|
||||||
@ -211,6 +232,10 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fs.check_hints_) {
|
if (fs.check_hints_) {
|
||||||
|
if (!sb.hint_root)
|
||||||
|
out << "no hint array present" << end_message();
|
||||||
|
|
||||||
|
else {
|
||||||
out << "examining hint array" << end_message();
|
out << "examining hint array" << end_message();
|
||||||
{
|
{
|
||||||
nested_output::nest _ = out.push();
|
nested_output::nest _ = out.push();
|
||||||
@ -218,10 +243,26 @@ namespace {
|
|||||||
ha.check(hint_rep);
|
ha.check(hint_rep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fs.check_discards_) {
|
||||||
|
if (!sb.discard_root)
|
||||||
|
out << "no discard bitset present" << end_message();
|
||||||
|
|
||||||
|
else {
|
||||||
|
out << "examining discard bitset" << end_message();
|
||||||
|
{
|
||||||
|
nested_output::nest _ = out.push();
|
||||||
|
bitset discards(tm, sb.discard_root, sb.discard_nr_blocks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: make an error class that's an instance of mplus
|
||||||
return combine_errors(sb_rep.get_error(),
|
return combine_errors(sb_rep.get_error(),
|
||||||
combine_errors(mapping_rep.get_error(),
|
combine_errors(mapping_rep.get_error(),
|
||||||
hint_rep.get_error()));
|
combine_errors(hint_rep.get_error(),
|
||||||
|
discard_rep.get_error())));
|
||||||
}
|
}
|
||||||
|
|
||||||
int check(string const &path, flags const &fs) {
|
int check(string const &path, flags const &fs) {
|
||||||
@ -255,8 +296,8 @@ namespace {
|
|||||||
<< " {-V|--version}" << endl
|
<< " {-V|--version}" << endl
|
||||||
<< " {--super-block-only}" << endl
|
<< " {--super-block-only}" << endl
|
||||||
<< " {--skip-mappings}" << endl
|
<< " {--skip-mappings}" << endl
|
||||||
<< " {--skip-hints}" << endl;
|
<< " {--skip-hints}" << endl
|
||||||
|
<< " {--skip-discards}" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
char const *TOOLS_VERSION = "0.1.6";
|
char const *TOOLS_VERSION = "0.1.6";
|
||||||
@ -274,6 +315,7 @@ int main(int argc, char **argv)
|
|||||||
{ "superblock-only", no_argument, NULL, 1 },
|
{ "superblock-only", no_argument, NULL, 1 },
|
||||||
{ "skip-mappings", no_argument, NULL, 2 },
|
{ "skip-mappings", no_argument, NULL, 2 },
|
||||||
{ "skip-hints", no_argument, NULL, 3 },
|
{ "skip-hints", no_argument, NULL, 3 },
|
||||||
|
{ "skip-discards", no_argument, NULL, 4 },
|
||||||
{ "help", no_argument, NULL, 'h' },
|
{ "help", no_argument, NULL, 'h' },
|
||||||
{ "version", no_argument, NULL, 'V' },
|
{ "version", no_argument, NULL, 'V' },
|
||||||
{ NULL, no_argument, NULL, 0 }
|
{ NULL, no_argument, NULL, 0 }
|
||||||
@ -294,6 +336,10 @@ int main(int argc, char **argv)
|
|||||||
fs.check_hints_ = false;
|
fs.check_hints_ = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
fs.check_discards_ = false;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
usage(cout, basename(argv[0]));
|
usage(cout, basename(argv[0]));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -118,7 +118,7 @@ metadata::open_metadata(block_manager<>::ptr bm)
|
|||||||
|
|
||||||
if (sb_.discard_root)
|
if (sb_.discard_root)
|
||||||
discard_bits_ = bitset::ptr(
|
discard_bits_ = bitset::ptr(
|
||||||
new bitset(tm_, sb_.discard_root, sb_.cache_blocks));
|
new bitset(tm_, sb_.discard_root, sb_.discard_nr_blocks));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -40,9 +40,9 @@ namespace persistent_data {
|
|||||||
public:
|
public:
|
||||||
typedef boost::shared_ptr<bitset_visitor> ptr;
|
typedef boost::shared_ptr<bitset_visitor> ptr;
|
||||||
|
|
||||||
virtual ~bitset_visitor();
|
virtual ~bitset_visitor() {}
|
||||||
virtual void visit(uint32_t index, bool value);
|
virtual void visit(uint32_t index, bool value) = 0;
|
||||||
virtual void visit(missing_bits const &d);
|
virtual void visit(missing_bits const &d) = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user