public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: "Laurențiu Leahu-Vlăducu" <l.leahu-vladucu@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox v3 1/1] rest-server: Improved panic errors with formatted strings
Date: Fri, 24 Jan 2025 16:29:10 +0100	[thread overview]
Message-ID: <20250124152910.148449-3-l.leahu-vladucu@proxmox.com> (raw)
In-Reply-To: <20250124152910.148449-1-l.leahu-vladucu@proxmox.com>

Improved errors when panics occur and the panic message is a
formatted (not static) string. This worked already for &str literals,
but not for Strings.

Downcasting to both &str and String is also done by the Rust Standard
Library in the default panic handler. See:
https://github.com/rust-lang/rust/blob/b605c65b6eb5fa71783f8e26df69975f9f1680ee/library/std/src/panicking.rs#L777

Signed-off-by: Laurențiu Leahu-Vlăducu <l.leahu-vladucu@proxmox.com>
---
 proxmox-rest-server/src/worker_task.rs | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/proxmox-rest-server/src/worker_task.rs b/proxmox-rest-server/src/worker_task.rs
index beec691e..24e2676e 100644
--- a/proxmox-rest-server/src/worker_task.rs
+++ b/proxmox-rest-server/src/worker_task.rs
@@ -980,9 +980,14 @@ impl WorkerTask {
 
                     let result = match std::panic::catch_unwind(move || f(worker1)) {
                         Ok(r) => r,
-                        Err(panic) => match panic.downcast::<&str>() {
-                            Ok(panic_msg) => Err(format_err!("worker panicked: {}", panic_msg)),
-                            Err(_) => Err(format_err!("worker panicked: unknown type.")),
+                        Err(panic) => {
+                            if let Some(panic_msg) = panic.downcast_ref::<&str>() {
+                                Err(format_err!("worker panicked: {panic_msg}"))
+                            } else if let Some(panic_msg) = panic.downcast_ref::<String>() {
+                                Err(format_err!("worker panicked: {panic_msg}"))
+                            } else {
+                                Err(format_err!("worker panicked: cannot show error message due to unknown error type."))
+                            }
                         },
                     };
 
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel

  parent reply	other threads:[~2025-01-24 15:30 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-24 15:29 [pbs-devel] [PATCH proxmox/proxmox-backup v3 0/1] " Laurențiu Leahu-Vlăducu
2025-01-24 15:29 ` [pbs-devel] [PATCH proxmox-backup v3 1/1] proxy/parallel_handler: " Laurențiu Leahu-Vlăducu
2025-01-27 15:57   ` [pbs-devel] applied: " Thomas Lamprecht
2025-01-28  8:03     ` Laurențiu Leahu-Vlăducu
2025-01-24 15:29 ` Laurențiu Leahu-Vlăducu [this message]
2025-01-27 18:22   ` [pbs-devel] applied: [PATCH proxmox v3 1/1] rest-server: " Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250124152910.148449-3-l.leahu-vladucu@proxmox.com \
    --to=l.leahu-vladucu@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal