aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-03-18 10:22:52 +0100
committerGitHub Enterprise <[email protected]>2025-03-18 10:22:52 +0100
commit4dc972bdaf752676426550b2eed500a9b7dcc4f5 (patch)
tree3e2083ae9cccc82929e124182fc0b11a0378bfaf /src
parentIf a chunk or block write operation results in more than one completed chunk ... (diff)
downloadzen-4dc972bdaf752676426550b2eed500a9b7dcc4f5.tar.xz
zen-4dc972bdaf752676426550b2eed500a9b7dcc4f5.zip
improved reporting on async error (#312)
* report async errors as individual errors
Diffstat (limited to 'src')
-rw-r--r--src/zen/cmds/builds_cmd.cpp9
-rw-r--r--src/zenutil/include/zenutil/parallellwork.h16
2 files changed, 17 insertions, 8 deletions
diff --git a/src/zen/cmds/builds_cmd.cpp b/src/zen/cmds/builds_cmd.cpp
index 7e3f5345f..11efc42ec 100644
--- a/src/zen/cmds/builds_cmd.cpp
+++ b/src/zen/cmds/builds_cmd.cpp
@@ -4564,7 +4564,6 @@ namespace {
std::move(CompressedPart),
DiskStats,
WriteChunkStats);
-
if (!AbortFlag)
{
WritePartsComplete++;
@@ -8315,6 +8314,14 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
return AbortFlag ? 13 : 0;
}
}
+ catch (const ParallellWorkException& Ex)
+ {
+ for (const std::string& Error : Ex.m_Errors)
+ {
+ ZEN_ERROR("{}", Error);
+ }
+ return 3;
+ }
catch (const std::exception& Ex)
{
ZEN_ERROR("{}", Ex.what());
diff --git a/src/zenutil/include/zenutil/parallellwork.h b/src/zenutil/include/zenutil/parallellwork.h
index 79798fc8d..8ea77c65d 100644
--- a/src/zenutil/include/zenutil/parallellwork.h
+++ b/src/zenutil/include/zenutil/parallellwork.h
@@ -9,6 +9,14 @@
#include <atomic>
+class ParallellWorkException : public std::runtime_error
+{
+public:
+ explicit ParallellWorkException(std::vector<std::string>&& Errors) : std::runtime_error(Errors.front()), m_Errors(std::move(Errors)) {}
+
+ const std::vector<std::string> m_Errors;
+};
+
namespace zen {
class ParallellWork
@@ -95,13 +103,7 @@ public:
}
else if (m_Errors.size() > 1)
{
- ExtendableStringBuilder<128> SB;
- SB.Append("Multiple errors:");
- for (const std::string& Error : m_Errors)
- {
- SB.Append(fmt::format("\n {}", Error));
- }
- throw std::runtime_error(SB.ToString());
+ throw ParallellWorkException(std::move(m_Errors));
}
}
Latch& PendingWork() { return m_PendingWork; }