mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-16 15:58:06 -04:00
refactor(dwarfsck_main): use thread_pool for checksum implementation
This commit is contained in:
parent
1dd6f59be4
commit
c0df7a2973
@ -40,7 +40,6 @@
|
|||||||
#include <dwarfs/error.h>
|
#include <dwarfs/error.h>
|
||||||
#include <dwarfs/file_access.h>
|
#include <dwarfs/file_access.h>
|
||||||
#include <dwarfs/filesystem_v2.h>
|
#include <dwarfs/filesystem_v2.h>
|
||||||
#include <dwarfs/internal/worker_group.h>
|
|
||||||
#include <dwarfs/iolayer.h>
|
#include <dwarfs/iolayer.h>
|
||||||
#include <dwarfs/library_dependencies.h>
|
#include <dwarfs/library_dependencies.h>
|
||||||
#include <dwarfs/logger.h>
|
#include <dwarfs/logger.h>
|
||||||
@ -48,6 +47,7 @@
|
|||||||
#include <dwarfs/options.h>
|
#include <dwarfs/options.h>
|
||||||
#include <dwarfs/os_access.h>
|
#include <dwarfs/os_access.h>
|
||||||
#include <dwarfs/program_options_helpers.h>
|
#include <dwarfs/program_options_helpers.h>
|
||||||
|
#include <dwarfs/thread_pool.h>
|
||||||
#include <dwarfs/tool.h>
|
#include <dwarfs/tool.h>
|
||||||
#include <dwarfs/util.h>
|
#include <dwarfs/util.h>
|
||||||
#include <dwarfs_tool_main.h>
|
#include <dwarfs_tool_main.h>
|
||||||
@ -104,7 +104,7 @@ void do_checksum(logger& lgr, filesystem_v2& fs, iolayer const& iol,
|
|||||||
std::string const& algo, size_t num_workers) {
|
std::string const& algo, size_t num_workers) {
|
||||||
LOG_PROXY(debug_logger_policy, lgr);
|
LOG_PROXY(debug_logger_policy, lgr);
|
||||||
|
|
||||||
internal::worker_group wg{lgr, *iol.os, "checksum", num_workers};
|
thread_pool pool{lgr, *iol.os, "checksum", num_workers};
|
||||||
std::mutex mx;
|
std::mutex mx;
|
||||||
|
|
||||||
fs.walk_data_order([&](auto const& de) {
|
fs.walk_data_order([&](auto const& de) {
|
||||||
@ -127,10 +127,12 @@ void do_checksum(logger& lgr, filesystem_v2& fs, iolayer const& iol,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wg.add_job([&, de, iv, ranges = std::move(ranges)]() mutable {
|
pool.add_job(
|
||||||
|
[&, de, iv,
|
||||||
|
ranges = std::make_shared<decltype(ranges)>(std::move(ranges))]() {
|
||||||
checksum cs(algo);
|
checksum cs(algo);
|
||||||
|
|
||||||
for (auto& fut : ranges) {
|
for (auto& fut : *ranges) {
|
||||||
try {
|
try {
|
||||||
auto range = fut.get();
|
auto range = fut.get();
|
||||||
cs.update(range.data(), range.size());
|
cs.update(range.data(), range.size());
|
||||||
@ -141,7 +143,8 @@ void do_checksum(logger& lgr, filesystem_v2& fs, iolayer const& iol,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto output = fmt::format("{} {}\n", cs.hexdigest(), de.unix_path());
|
auto output =
|
||||||
|
fmt::format("{} {}\n", cs.hexdigest(), de.unix_path());
|
||||||
|
|
||||||
{
|
{
|
||||||
std::lock_guard lock(mx);
|
std::lock_guard lock(mx);
|
||||||
@ -151,7 +154,7 @@ void do_checksum(logger& lgr, filesystem_v2& fs, iolayer const& iol,
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
wg.wait();
|
pool.wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
Loading…
x
Reference in New Issue
Block a user