From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com, pbs-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH/RFC v2 common 6/7] allow workers to count warnings and finish tasks in a WARNINGS state
Date: Fri, 9 Apr 2021 10:44:35 +0200 [thread overview]
Message-ID: <20210409084436.2454-7-f.ebner@proxmox.com> (raw)
In-Reply-To: <20210409084436.2454-1-f.ebner@proxmox.com>
as is already supported by the UI (and PBS).
A nice bonus is that warn() can be used by both workers and non-workers. For
workers, the output is redirected/duplicated as set up by {fork,tee}_worker(),
and non-erroring workers that issued a warning will end in a WARNINGS state.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
Changes from v1:
* use chomp in warn(), so it can also be called with newline-terminated
strings
src/PVE/RESTEnvironment.pm | 22 ++++++++++++++++++++--
src/PVE/Tools.pm | 2 ++
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/src/PVE/RESTEnvironment.pm b/src/PVE/RESTEnvironment.pm
index d5b84d0..e8a466c 100644
--- a/src/PVE/RESTEnvironment.pm
+++ b/src/PVE/RESTEnvironment.pm
@@ -115,7 +115,10 @@ sub init {
# priv ... access from private server (pvedaemon)
# ha ... access from HA resource manager agent (pve-ha-manager)
- my $self = { type => $type };
+ my $self = {
+ type => $type,
+ warning_count => 0,
+ };
bless $self, $class;
@@ -448,7 +451,6 @@ my $tee_worker = sub {
}
}
- # get status (error or OK)
POSIX::read($ctrlfd, $readbuf, 4096);
if ($readbuf =~ m/^TASK OK\n?$/) {
# skip printing to stdout
@@ -456,6 +458,9 @@ my $tee_worker = sub {
} elsif ($readbuf =~ m/^TASK ERROR: (.*)\n?$/) {
print STDERR "$1\n";
print $taskfh "\n$readbuf"; # ensure start on new line for webUI
+ } elsif ($readbuf =~ m/^TASK WARNINGS: (\d+)\n?$/) {
+ print STDERR "Task finished with $1 warning(s)!\n";
+ print $taskfh "\n$readbuf"; # ensure start on new line for webUI
} else {
die "got unexpected control message: $readbuf\n";
}
@@ -617,6 +622,9 @@ sub fork_worker {
syslog('err', $err);
$msg = "TASK ERROR: $err\n";
$exitcode = -1;
+ } elsif (my $warnings = $self->{warning_count}) {
+ $msg = "TASK WARNINGS: $warnings\n";
+ $exitcode = 0;
} else {
$msg = "TASK OK\n";
$exitcode = 0;
@@ -703,6 +711,16 @@ sub fork_worker {
return wantarray ? ($upid, $res) : $upid;
}
+sub warn {
+ my ($self, $message) = @_;
+
+ chomp($message);
+
+ print STDERR "WARN: $message\n";
+
+ $self->{warning_count}++;
+}
+
# Abstract function
sub log_cluster_msg {
diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm
index 2a91a92..16ae3d2 100644
--- a/src/PVE/Tools.pm
+++ b/src/PVE/Tools.pm
@@ -1156,6 +1156,8 @@ sub upid_read_status {
return 'OK';
} elsif ($line =~ m/^TASK ERROR: (.+)$/) {
return $1;
+ } elsif ($line =~ m/^TASK (WARNINGS: \d+)$/) {
+ return $1;
} else {
return "unexpected status";
}
--
2.20.1
WARNING: multiple messages have this Message-ID
From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com, pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH/RFC v2 common 6/7] allow workers to count warnings and finish tasks in a WARNINGS state
Date: Fri, 9 Apr 2021 10:44:35 +0200 [thread overview]
Message-ID: <20210409084436.2454-7-f.ebner@proxmox.com> (raw)
In-Reply-To: <20210409084436.2454-1-f.ebner@proxmox.com>
as is already supported by the UI (and PBS).
A nice bonus is that warn() can be used by both workers and non-workers. For
workers, the output is redirected/duplicated as set up by {fork,tee}_worker(),
and non-erroring workers that issued a warning will end in a WARNINGS state.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
Changes from v1:
* use chomp in warn(), so it can also be called with newline-terminated
strings
src/PVE/RESTEnvironment.pm | 22 ++++++++++++++++++++--
src/PVE/Tools.pm | 2 ++
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/src/PVE/RESTEnvironment.pm b/src/PVE/RESTEnvironment.pm
index d5b84d0..e8a466c 100644
--- a/src/PVE/RESTEnvironment.pm
+++ b/src/PVE/RESTEnvironment.pm
@@ -115,7 +115,10 @@ sub init {
# priv ... access from private server (pvedaemon)
# ha ... access from HA resource manager agent (pve-ha-manager)
- my $self = { type => $type };
+ my $self = {
+ type => $type,
+ warning_count => 0,
+ };
bless $self, $class;
@@ -448,7 +451,6 @@ my $tee_worker = sub {
}
}
- # get status (error or OK)
POSIX::read($ctrlfd, $readbuf, 4096);
if ($readbuf =~ m/^TASK OK\n?$/) {
# skip printing to stdout
@@ -456,6 +458,9 @@ my $tee_worker = sub {
} elsif ($readbuf =~ m/^TASK ERROR: (.*)\n?$/) {
print STDERR "$1\n";
print $taskfh "\n$readbuf"; # ensure start on new line for webUI
+ } elsif ($readbuf =~ m/^TASK WARNINGS: (\d+)\n?$/) {
+ print STDERR "Task finished with $1 warning(s)!\n";
+ print $taskfh "\n$readbuf"; # ensure start on new line for webUI
} else {
die "got unexpected control message: $readbuf\n";
}
@@ -617,6 +622,9 @@ sub fork_worker {
syslog('err', $err);
$msg = "TASK ERROR: $err\n";
$exitcode = -1;
+ } elsif (my $warnings = $self->{warning_count}) {
+ $msg = "TASK WARNINGS: $warnings\n";
+ $exitcode = 0;
} else {
$msg = "TASK OK\n";
$exitcode = 0;
@@ -703,6 +711,16 @@ sub fork_worker {
return wantarray ? ($upid, $res) : $upid;
}
+sub warn {
+ my ($self, $message) = @_;
+
+ chomp($message);
+
+ print STDERR "WARN: $message\n";
+
+ $self->{warning_count}++;
+}
+
# Abstract function
sub log_cluster_msg {
diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm
index 2a91a92..16ae3d2 100644
--- a/src/PVE/Tools.pm
+++ b/src/PVE/Tools.pm
@@ -1156,6 +1156,8 @@ sub upid_read_status {
return 'OK';
} elsif ($line =~ m/^TASK ERROR: (.+)$/) {
return $1;
+ } elsif ($line =~ m/^TASK (WARNINGS: \d+)$/) {
+ return $1;
} else {
return "unexpected status";
}
--
2.20.1
next prev parent reply other threads:[~2021-04-09 8:45 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-09 8:44 [pve-devel] [PATCH-SERIES v2] improve warnings handling in UI and add to PVE Fabian Ebner
2021-04-09 8:44 ` [pbs-devel] " Fabian Ebner
2021-04-09 8:44 ` [pve-devel] [PATCH v2 widget-toolkit 1/7] task status: create helper for formatting Fabian Ebner
2021-04-09 8:44 ` [pbs-devel] " Fabian Ebner
2021-04-23 12:54 ` [pve-devel] applied: " Thomas Lamprecht
2021-04-23 12:54 ` [pbs-devel] applied: [pve-devel] " Thomas Lamprecht
2021-04-09 8:44 ` [pve-devel] [PATCH v2 widget-toolkit 2/7] format task status: rename variable Fabian Ebner
2021-04-09 8:44 ` [pbs-devel] " Fabian Ebner
2021-04-23 12:54 ` [pve-devel] applied: " Thomas Lamprecht
2021-04-23 12:54 ` [pbs-devel] applied: [pve-devel] " Thomas Lamprecht
2021-04-09 8:44 ` [pve-devel] [PATCH v2 widget-toolkit 3/7] format task status: improve replace() usage Fabian Ebner
2021-04-09 8:44 ` [pbs-devel] " Fabian Ebner
2021-04-23 12:54 ` [pve-devel] applied: " Thomas Lamprecht
2021-04-23 12:54 ` [pbs-devel] applied: [pve-devel] " Thomas Lamprecht
2021-04-09 8:44 ` [pve-devel] [PATCH v2 proxmox-backup 4/7] ui: tasks: use format_task_status Fabian Ebner
2021-04-09 8:44 ` [pbs-devel] " Fabian Ebner
2021-04-09 8:44 ` [pve-devel] [PATCH v2 manager 5/7] ui: cluster task log: handle warnings like the node task log does Fabian Ebner
2021-04-09 8:44 ` [pbs-devel] " Fabian Ebner
2021-04-09 8:44 ` Fabian Ebner [this message]
2021-04-09 8:44 ` [pbs-devel] [PATCH/RFC v2 common 6/7] allow workers to count warnings and finish tasks in a WARNINGS state Fabian Ebner
2021-04-23 12:36 ` [pve-devel] applied: " Thomas Lamprecht
2021-04-23 12:36 ` [pbs-devel] applied: [pve-devel] " Thomas Lamprecht
2021-04-09 8:44 ` [pve-devel] [PATCH/RFC v2 container 7/7] restore: sanitize config: use new warn() function Fabian Ebner
2021-04-09 8:44 ` [pbs-devel] " Fabian Ebner
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=20210409084436.2454-7-f.ebner@proxmox.com \
--to=f.ebner@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
--cc=pve-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal