mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-13 06:16:55 -04:00
Make integrity check optional to speed up dwarfsck
This commit is contained in:
parent
9f0e9340dd
commit
5c20498f62
@ -64,7 +64,8 @@ class filesystem_v2 {
|
|||||||
filesystem_writer& writer, rewrite_options const& opts);
|
filesystem_writer& writer, rewrite_options const& opts);
|
||||||
|
|
||||||
static int identify(logger& lgr, std::shared_ptr<mmif> mm, std::ostream& os,
|
static int identify(logger& lgr, std::shared_ptr<mmif> mm, std::ostream& os,
|
||||||
int detail_level = 0, size_t num_readers = 1);
|
int detail_level = 0, size_t num_readers = 1,
|
||||||
|
bool check_integrity = false);
|
||||||
|
|
||||||
void dump(std::ostream& os, int detail_level) const {
|
void dump(std::ostream& os, int detail_level) const {
|
||||||
impl_->dump(os, detail_level);
|
impl_->dump(os, detail_level);
|
||||||
|
@ -475,7 +475,7 @@ void filesystem_v2::rewrite(logger& lgr, progress& prog,
|
|||||||
|
|
||||||
int filesystem_v2::identify(logger& lgr, std::shared_ptr<mmif> mm,
|
int filesystem_v2::identify(logger& lgr, std::shared_ptr<mmif> mm,
|
||||||
std::ostream& os, int detail_level,
|
std::ostream& os, int detail_level,
|
||||||
size_t num_readers) {
|
size_t num_readers, bool check_integrity) {
|
||||||
// TODO:
|
// TODO:
|
||||||
LOG_PROXY(debug_logger_policy, lgr);
|
LOG_PROXY(debug_logger_policy, lgr);
|
||||||
filesystem_parser parser(mm);
|
filesystem_parser parser(mm);
|
||||||
@ -493,7 +493,7 @@ int filesystem_v2::identify(logger& lgr, std::shared_ptr<mmif> mm,
|
|||||||
DWARFS_THROW(runtime_error, "checksum error in section: " + s.name());
|
DWARFS_THROW(runtime_error, "checksum error in section: " + s.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!s.verify(*mm)) {
|
if (check_integrity and !s.verify(*mm)) {
|
||||||
DWARFS_THROW(runtime_error,
|
DWARFS_THROW(runtime_error,
|
||||||
"integrity check error in section: " + s.name());
|
"integrity check error in section: " + s.name());
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ int dwarfsck(int argc, char** argv) {
|
|||||||
size_t num_workers;
|
size_t num_workers;
|
||||||
int detail;
|
int detail;
|
||||||
bool json = false;
|
bool json = false;
|
||||||
|
bool check_integrity = false;
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
po::options_description opts("Command line options");
|
po::options_description opts("Command line options");
|
||||||
@ -60,6 +61,9 @@ int dwarfsck(int argc, char** argv) {
|
|||||||
("num-workers,n",
|
("num-workers,n",
|
||||||
po::value<size_t>(&num_workers)->default_value(num_cpu),
|
po::value<size_t>(&num_workers)->default_value(num_cpu),
|
||||||
"number of reader worker threads")
|
"number of reader worker threads")
|
||||||
|
("check-integrity",
|
||||||
|
po::value<bool>(&check_integrity)->zero_tokens(),
|
||||||
|
"check integrity of each block")
|
||||||
("json",
|
("json",
|
||||||
po::value<bool>(&json)->zero_tokens(),
|
po::value<bool>(&json)->zero_tokens(),
|
||||||
"print metadata in JSON format")
|
"print metadata in JSON format")
|
||||||
@ -111,7 +115,8 @@ int dwarfsck(int argc, char** argv) {
|
|||||||
filesystem_v2 fs(lgr, mm);
|
filesystem_v2 fs(lgr, mm);
|
||||||
std::cout << folly::toPrettyJson(fs.metadata_as_dynamic()) << std::endl;
|
std::cout << folly::toPrettyJson(fs.metadata_as_dynamic()) << std::endl;
|
||||||
} else {
|
} else {
|
||||||
filesystem_v2::identify(lgr, mm, std::cout, detail, num_workers);
|
filesystem_v2::identify(lgr, mm, std::cout, detail, num_workers,
|
||||||
|
check_integrity);
|
||||||
}
|
}
|
||||||
} catch (system_error const& e) {
|
} catch (system_error const& e) {
|
||||||
LOG_ERROR << folly::exceptionStr(e);
|
LOG_ERROR << folly::exceptionStr(e);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user