From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 2F57993512 for ; Mon, 5 Feb 2024 13:29:29 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1170E166CD for ; Mon, 5 Feb 2024 13:28:59 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Mon, 5 Feb 2024 13:28:58 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id C6F4744312 for ; Mon, 5 Feb 2024 13:28:57 +0100 (CET) From: Fiona Ebner To: pve-devel@lists.proxmox.com Date: Mon, 5 Feb 2024 13:28:54 +0100 Message-Id: <20240205122854.83495-2-f.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240205122854.83495-1-f.ebner@proxmox.com> References: <20240205122854.83495-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.072 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [RFC common 2/2] REST environment: fork worker: install custom __WARN__ handler X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Feb 2024 12:29:29 -0000 So all warnings will be treated consistently inside a worker task. In particular, all warnings will count towards the task warning count and be more visible in the UI. Avoids the need to switch existing warnings to log_warn(). When pvedaemon forked a worker, the worker would inherit its __WARN__ handler and also log any warnings to syslog, so make sure those warnings are not less visible than before, by also logging to syslog. The same warning would not show up in syslog when the task was invoked via the CLI instead, which was another inconsistency. The __WARN__ handler needs to increment the warning_count for warnings issued with Perl's warn. But then in RESTEnvironment.pm's warn method, warning_count cannot be incremented anymore, because otherwise a call to log_warn() would increment it once, call warn, and then the __WARN__ handler would increment it again. The variable is only ever read in fork_worker(), so it is safe to just move the code incrementing it to the __WARN__ handler, because that will be called by both, Perl's warn and log_warn(). This effectively makes log_warn() and RESTEnvironment.pm's warn method not worth using anymore, so deprecate them. Signed-off-by: Fiona Ebner --- src/PVE/RESTEnvironment.pm | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/PVE/RESTEnvironment.pm b/src/PVE/RESTEnvironment.pm index 41efb16..8394e2e 100644 --- a/src/PVE/RESTEnvironment.pm +++ b/src/PVE/RESTEnvironment.pm @@ -537,6 +537,17 @@ sub fork_worker { $SIG{CHLD} = $SIG{PIPE} = 'DEFAULT'; $SIG{TTOU} = 'IGNORE'; + $SIG{'__WARN__'} = sub { + my $err = $@; + my $message = $_[0]; + chomp($message); + $message =~ s/^WARN: //; # avoid duplicate prefix when triggered by log_warn() + print STDERR "WARN: $message\n"; + syslog('warning', $message); + $self->{warning_count}++; + $@ = $err; + }; + my $ppgid; # set session/process group allows to kill the process group if ($sync && -t STDIN) { @@ -716,6 +727,9 @@ sub fork_worker { return wantarray ? ($upid, $res) : $upid; } +# NOTE: Deprecated - remove once all callers are gone +# This was introduced for counting task warnings, which is now done via a __WARN__ handler inside +# fork_worker(). sub log_warn { my ($message) = @_; @@ -727,14 +741,14 @@ sub log_warn { } } +# NOTE: Deprecated - remove once all callers are gone +# Remove once all users are gone sub warn { my ($self, $message) = @_; chomp($message); warn "WARN: $message\n"; - - $self->{warning_count}++; } # Abstract function -- 2.39.2