Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package openQA for openSUSE:Factory checked 
in at 2025-12-17 17:34:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openQA (Old)
 and      /work/SRC/openSUSE:Factory/.openQA.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openQA"

Wed Dec 17 17:34:20 2025 rev:786 rq:1323169 version:5.1765887110.8fc02990

Changes:
--------
--- /work/SRC/openSUSE:Factory/openQA/openQA.changes    2025-12-16 
16:00:51.474469853 +0100
+++ /work/SRC/openSUSE:Factory/.openQA.new.1939/openQA.changes  2025-12-17 
17:38:40.345458661 +0100
@@ -1,0 +2,7 @@
+Tue Dec 16 15:12:03 UTC 2025 - [email protected]
+
+- Update to version 5.1765887110.8fc02990:
+  * Avoid partial deletion of a screenshot if Minion job is aborted
+  * Add `SignalBlocker` to delay signal handling during critical sections
+
+-------------------------------------------------------------------

Old:
----
  openQA-5.1765805960.2112d43d.obscpio

New:
----
  openQA-5.1765887110.8fc02990.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openQA-client-test.spec ++++++
--- /var/tmp/diff_new_pack.QM7l8Z/_old  2025-12-17 17:38:42.977569280 +0100
+++ /var/tmp/diff_new_pack.QM7l8Z/_new  2025-12-17 17:38:42.977569280 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package openQA-client-test
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-client
 Name:           %{short_name}-test
-Version:        5.1765805960.2112d43d
+Version:        5.1765887110.8fc02990
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA-devel-test.spec ++++++
--- /var/tmp/diff_new_pack.QM7l8Z/_old  2025-12-17 17:38:43.041571970 +0100
+++ /var/tmp/diff_new_pack.QM7l8Z/_new  2025-12-17 17:38:43.045572137 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package openQA-devel-test
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-devel
 Name:           %{short_name}-test
-Version:        5.1765805960.2112d43d
+Version:        5.1765887110.8fc02990
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA-test.spec ++++++
--- /var/tmp/diff_new_pack.QM7l8Z/_old  2025-12-17 17:38:43.113574996 +0100
+++ /var/tmp/diff_new_pack.QM7l8Z/_new  2025-12-17 17:38:43.125575500 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package openQA-test
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define         short_name openQA
 Name:           %{short_name}-test
-Version:        5.1765805960.2112d43d
+Version:        5.1765887110.8fc02990
 Release:        0
 Summary:        Test package for openQA
 License:        GPL-2.0-or-later

++++++ openQA-worker-test.spec ++++++
--- /var/tmp/diff_new_pack.QM7l8Z/_old  2025-12-17 17:38:43.173577517 +0100
+++ /var/tmp/diff_new_pack.QM7l8Z/_new  2025-12-17 17:38:43.181577853 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package openQA-worker-test
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-worker
 Name:           %{short_name}-test
-Version:        5.1765805960.2112d43d
+Version:        5.1765887110.8fc02990
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA.spec ++++++
--- /var/tmp/diff_new_pack.QM7l8Z/_old  2025-12-17 17:38:43.225579702 +0100
+++ /var/tmp/diff_new_pack.QM7l8Z/_new  2025-12-17 17:38:43.233580039 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package openQA
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright 2018-2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,10 +12,10 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via https://bugs.opensuse.org/
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
 #
 
-
+# can't use linebreaks here!
 %define openqa_main_service openqa-webui.service
 %define openqa_extra_services openqa-gru.service openqa-websockets.service 
openqa-scheduler.service openqa-enqueue-audit-event-cleanup.service 
openqa-enqueue-audit-event-cleanup.timer openqa-enqueue-asset-cleanup.service 
openqa-enqueue-git-auto-update.service openqa-enqueue-asset-cleanup.timer 
openqa-enqueue-result-cleanup.service openqa-enqueue-result-cleanup.timer 
openqa-enqueue-bug-cleanup.service openqa-enqueue-bug-cleanup.timer 
openqa-enqueue-git-auto-update.timer openqa-enqueue-needle-ref-cleanup.service 
openqa-enqueue-needle-ref-cleanup.timer 
openqa-enqueue-scheduled-product-cleanup.service 
openqa-enqueue-scheduled-product-cleanup.timer
 %define openqa_services %{openqa_main_service} %{openqa_extra_services}
@@ -99,11 +99,11 @@
 %define devel_requires %devel_no_selenium_requires chromedriver
 
 Name:           openQA
-Version:        5.1765805960.2112d43d
+Version:        5.1765887110.8fc02990
 Release:        0
 Summary:        The openQA web-frontend, scheduler and tools
 License:        GPL-2.0-or-later
-URL:            http://os-autoinst.github.io/openQA/
+Url:            http://os-autoinst.github.io/openQA/
 Source0:        %{name}-%{version}.tar.xz
 Source2:        node_modules.spec.inc
 %include        %{_sourcedir}/node_modules.spec.inc
@@ -113,10 +113,10 @@
 BuildRequires:  %{build_requires}
 BuildRequires:  apparmor-rpm-macros
 BuildRequires:  local-npm-registry
+Requires:       perl(Minion) >= 10.0
 Requires:       %{main_requires}
 Requires:       openQA-client = %{version}
 Requires:       openQA-common = %{version}
-Requires:       perl(Minion) >= 10.0
 # we need to have the same sha1 as expected
 %requires_eq    perl-Mojolicious-Plugin-AssetPack
 Recommends:     %{name}-local-db
@@ -225,8 +225,8 @@
 
 %package client
 Summary:        Client tools for remote openQA management
-Requires:       %client_requires
 Requires:       openQA-common = %{version}
+Requires:       %client_requires
 
 %description client
 Tools and support files for openQA client script. Client script is
@@ -256,8 +256,8 @@
 Summary:        Convenience package for a single-instance setup using apache 
proxy
 Provides:       %{name}-single-instance-apache
 Provides:       %{name}-single-instance-apache2
-Requires:       %{name} = %{version}
 Requires:       %{name}-local-db
+Requires:       %{name} = %{version}
 Requires:       %{name}-worker = %{version}
 Requires:       apache2
 
@@ -266,8 +266,8 @@
 
 %package single-instance-nginx
 Summary:        Convenience package for a single-instance setup using nginx 
proxy
-Requires:       %{name} = %{version}
 Requires:       %{name}-local-db
+Requires:       %{name} = %{version}
 Requires:       %{name}-worker = %{version}
 Requires:       nginx
 
@@ -315,9 +315,9 @@
 %if %{with munin_package}
 %package munin
 Summary:        Munin scripts
-Requires:       curl
 Requires:       munin
 Requires:       munin-node
+Requires:       curl
 Requires:       perl
 
 %description munin
@@ -325,6 +325,7 @@
 statistics.
 %endif
 
+
 %prep
 %setup -q
 sed -e 's,/bin/env python,/bin/python,' -i script/openqa-label-all
@@ -440,7 +441,6 @@
 %if 0%{?suse_version} > 1500
 %pre -f %{name}.pre
 %else
-
 %pre
 if ! getent passwd geekotest > /dev/null; then
     %{_sbindir}/useradd -r -g nogroup -c "openQA user" \
@@ -467,7 +467,6 @@
 %if 0%{?suse_version} > 1500
 %pre worker -f openQA-worker.pre
 %else
-
 %pre worker
 if ! getent passwd _openqa-worker > /dev/null; then
   %{_sbindir}/useradd -r -g nogroup -c "openQA worker" \

++++++ openQA-5.1765805960.2112d43d.obscpio -> 
openQA-5.1765887110.8fc02990.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1765805960.2112d43d/lib/OpenQA/ScreenshotDeletion.pm 
new/openQA-5.1765887110.8fc02990/lib/OpenQA/ScreenshotDeletion.pm
--- old/openQA-5.1765805960.2112d43d/lib/OpenQA/ScreenshotDeletion.pm   
2025-12-15 14:39:20.000000000 +0100
+++ new/openQA-5.1765887110.8fc02990/lib/OpenQA/ScreenshotDeletion.pm   
2025-12-16 13:11:50.000000000 +0100
@@ -7,6 +7,7 @@
 use File::Basename qw(basename dirname);
 use File::Spec::Functions qw(catfile);
 use OpenQA::Log qw(log_debug);
+use OpenQA::SignalBlocker;
 use OpenQA::Utils qw(imagesdir);
 use Feature::Compat::Try;
 
@@ -30,6 +31,9 @@
     # note: This might fail due to foreign key violation because a new 
screenshot link might
     #       have just been created. In this case the screenshot should not be 
deleted in the
     #       database or the file system.
+    #       Using OpenQA::SignalBlocker to delay handling cancellation signals 
to avoid doing
+    #       only some of the deletions if the Minion job is aborted.
+    my $signal_blocker = OpenQA::SignalBlocker->new;
     try { $self->{_deletion_query}->execute($screenshot_id) }
     catch ($e) { return undef }
     # keep track of the deleted size
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1765805960.2112d43d/lib/OpenQA/SignalBlocker.pm 
new/openQA-5.1765887110.8fc02990/lib/OpenQA/SignalBlocker.pm
--- old/openQA-5.1765805960.2112d43d/lib/OpenQA/SignalBlocker.pm        
1970-01-01 01:00:00.000000000 +0100
+++ new/openQA-5.1765887110.8fc02990/lib/OpenQA/SignalBlocker.pm        
2025-12-16 13:11:50.000000000 +0100
@@ -0,0 +1,35 @@
+# Copyright SUSE LLC
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+package OpenQA::SignalBlocker;
+use Mojo::Base -base, -signatures;
+use Scalar::Util qw(weaken);
+
+my @SIGNALS = qw(TERM INT QUIT);
+
+# delays execution of signal handlers while an instance exists
+sub new ($class, @attributes) {
+    my $self = $class->SUPER::new(@attributes);
+    $self->{_fired_signals} = [];
+    $self->{_blocked_handlers} = {map { ($_ => $SIG{$_}) } @SIGNALS};
+
+    # assign closure to global signal handlers using a weak reference to $self 
so DESTROY will still run
+    my $self_weak = $self;
+    weaken $self_weak;
+    my $handler = sub ($signal) { push @{$self_weak->{_fired_signals}}, 
$signal };
+    $SIG{$_} = $handler for @SIGNALS;
+    return $self;
+}
+
+sub DESTROY ($self) {
+    my $blocked_handlers = $self->{_blocked_handlers};
+    $SIG{$_} = $blocked_handlers->{$_} for @SIGNALS;
+
+    # execute signals that have fired while the blocker was present
+    for my $signal (@{$self->{_fired_signals}}) {
+        next unless my $handler = $blocked_handlers->{$signal};
+        $handler->($signal) unless $handler eq 'IGNORE';
+    }
+}
+
+1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1765805960.2112d43d/lib/OpenQA/Task/SignalGuard.pm 
new/openQA-5.1765887110.8fc02990/lib/OpenQA/Task/SignalGuard.pm
--- old/openQA-5.1765805960.2112d43d/lib/OpenQA/Task/SignalGuard.pm     
2025-12-15 14:39:20.000000000 +0100
+++ new/openQA-5.1765887110.8fc02990/lib/OpenQA/Task/SignalGuard.pm     
2025-12-16 13:11:50.000000000 +0100
@@ -34,6 +34,7 @@
 
 sub _handle_signal ($self_weak, $signal) {
     # abort job if the corresponding flag is set
+    return undef unless $self_weak;
     my $job = $self_weak->{_job};
     if ($self_weak->abort) {
         $job->note(signal_handler => "Received signal $signal, aborting");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1765805960.2112d43d/t/16-utils.t 
new/openQA-5.1765887110.8fc02990/t/16-utils.t
--- old/openQA-5.1765805960.2112d43d/t/16-utils.t       2025-12-15 
14:39:20.000000000 +0100
+++ new/openQA-5.1765887110.8fc02990/t/16-utils.t       2025-12-16 
13:11:50.000000000 +0100
@@ -23,12 +23,14 @@
 use lib "$FindBin::Bin/lib", 
"$FindBin::Bin/../external/os-autoinst-common/lib";
 use OpenQA::Utils (qw(:DEFAULT prjdir sharedir resultdir assetdir imagesdir 
base_host random_string random_hex),
     qw(download_rate download_speed usleep_backoff));
+use OpenQA::SignalBlocker;
 use OpenQA::Task::SignalGuard;
 use OpenQA::Test::TimeLimit '10';
 use Scalar::Util 'reftype';
 use Test::MockObject;
 use Test::MockModule;
 use Mojo::File qw(path tempdir tempfile);
+use Mojo::Util qw(scope_guard);
 
 subtest 'service ports' => sub {
     local $ENV{OPENQA_BASE_PORT} = undef;
@@ -495,6 +497,32 @@
 is $SIG{TERM}, $current_term_handler, 'SIGTERM handler restored after signal 
guard goes out of scope';
 is $SIG{INT}, $current_int_handler, 'SIGINT handler restored after signal 
guard goes out of scope';
 
+subtest 'signal blocker' => sub {
+    my $restore_signals = scope_guard sub {
+        $SIG{TERM} = $current_term_handler;
+        $SIG{TERM} = $current_int_handler;
+    };
+
+    my $sigterm_handled = 0;
+    my $sigint_handled = 0;
+    my $sigterm_handler = sub { ++$sigterm_handled };
+    my $sigint_handler = sub { ++$sigint_handled };
+    $SIG{TERM} = $sigterm_handler;
+    $SIG{INT} = $sigint_handler;
+
+    my $blocker = OpenQA::SignalBlocker->new;
+    kill $_ => $$ for qw(INT TERM);
+    is $sigterm_handled, 0, 'SIGTERM handler has not been called while 
$blocker still present';
+    is $sigint_handled, 0, 'SIGINT handler has not been called while $blocker 
still present';
+
+    undef $blocker;
+    is $sigterm_handled, 1, 'SIGTERM handler has been called after $blocker 
was destroyed';
+    is $sigint_handled, 1, 'SIGINT handler has been called after $blocker was 
destroyed';
+
+    is $SIG{TERM}, $sigterm_handler, 'SIGTERM handler was restored after 
$blocker was destroyed';
+    is $SIG{INT}, $sigint_handler, 'SIGINT handler was restored after $blocker 
was destroyed';
+};
+
 subtest 'human readable size' => sub {
     is(human_readable_size(0), '0 Byte', 'zero');
     is(human_readable_size(1), '1 Byte', 'one');

++++++ openQA.obsinfo ++++++
--- /var/tmp/diff_new_pack.QM7l8Z/_old  2025-12-17 17:39:07.014579476 +0100
+++ /var/tmp/diff_new_pack.QM7l8Z/_new  2025-12-17 17:39:07.054581157 +0100
@@ -1,5 +1,5 @@
 name: openQA
-version: 5.1765805960.2112d43d
-mtime: 1765805960
-commit: 2112d43d5f5e9f9bb32e20b6468f6275daefa250
+version: 5.1765887110.8fc02990
+mtime: 1765887110
+commit: 8fc02990d191051d7fd201ea553ee3112c911efd
 

Reply via email to