2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-06-20 10:30:48 +00:00

Pass through actual error instead of generic "plugin bug" message

When a plugin dies during request processing, xcatd wrapped the error
in a misleading "plugin bug" message that hid the real cause (e.g.
"No space left on device"). Now passes through the actual error from
the eval, making the output useful for any failure, not just disk full.

Fixes #2719
This commit is contained in:
Vinícius Ferrão
2026-05-02 17:06:18 -03:00
parent d7748b6e3a
commit 34406828b9
+7 -6
View File
@@ -2086,14 +2086,15 @@ sub plugin_command {
$@ = ""; # sometimes a child 'eval' doesn't clean up $@, if we make it this far, no non-eval bug bombed out
}; # REMOVEEVALFORDEBUG
if ($sock or $shouldbealivepid != $$) { # We shouldn't still be alive, try to send as much detail to parent as possible as to why
my $error = "$modname plugin bug, pid $$, process description: '$$progname'";
my $error;
if ($@) {
$error .= " with error '$@'";
} else { # Sys::Virt and perhaps Net::SNMP sometimes crashes in a way $@ won't catch..
$error .= " with missing eval error, probably due to special manipulation of $@ or strange circumstances in an XS library, remove evals in xcatd marked 'REMOVEEVALFORDEBUG and run xcatd -f for more info";
chomp(my $eval_err = $@);
$error = "$modname: $eval_err";
} else {
$error = "$modname: unexpected error (pid $$, $$progname)";
}
if (scalar(@nodes)) { # Don't know which of the nodes, so one error message warning about the possibliity..
$error .= " while trying to fulfill request for the following nodes: " . join(",", @nodes);
if (scalar(@nodes)) {
$error .= " [nodes: " . join(",", @nodes) . "]";
}
xCAT::MsgUtils->message("S", "xcatd: $error");
$callback->({ error => [$error], errorcode => [1] });