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-03-03 16:58:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openQA (Old) and /work/SRC/openSUSE:Factory/.openQA.new.19136 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA" Mon Mar 3 16:58:04 2025 rev:677 rq:1249820 version:5.1741001706.950ead88 Changes: -------- --- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2025-03-01 19:17:13.486767968 +0100 +++ /work/SRC/openSUSE:Factory/.openQA.new.19136/openQA.changes 2025-03-03 16:58:08.772170454 +0100 @@ -1,0 +2,9 @@ +Mon Mar 03 13:11:56 UTC 2025 - ok...@suse.com + +- Update to version 5.1741001706.950ead88: + * Simplify WebSockets::Worker::Controller + * t: Avoid output in non-verbose mode + * Fix non-custom OAuth2 providers + * Use signatures in WebSockets/Controller/Worker.pm + +------------------------------------------------------------------- Old: ---- openQA-5.1740761651.192e0b4f.obscpio New: ---- openQA-5.1741001706.950ead88.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openQA-client-test.spec ++++++ --- /var/tmp/diff_new_pack.8TXBsS/_old 2025-03-03 16:58:09.992221428 +0100 +++ /var/tmp/diff_new_pack.8TXBsS/_new 2025-03-03 16:58:09.996221594 +0100 @@ -18,7 +18,7 @@ %define short_name openQA-client Name: %{short_name}-test -Version: 5.1740761651.192e0b4f +Version: 5.1741001706.950ead88 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.8TXBsS/_old 2025-03-03 16:58:10.032223098 +0100 +++ /var/tmp/diff_new_pack.8TXBsS/_new 2025-03-03 16:58:10.036223266 +0100 @@ -18,7 +18,7 @@ %define short_name openQA-devel Name: %{short_name}-test -Version: 5.1740761651.192e0b4f +Version: 5.1741001706.950ead88 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-test.spec ++++++ --- /var/tmp/diff_new_pack.8TXBsS/_old 2025-03-03 16:58:10.060224269 +0100 +++ /var/tmp/diff_new_pack.8TXBsS/_new 2025-03-03 16:58:10.064224435 +0100 @@ -18,7 +18,7 @@ %define short_name openQA Name: %{short_name}-test -Version: 5.1740761651.192e0b4f +Version: 5.1741001706.950ead88 Release: 0 Summary: Test package for openQA License: GPL-2.0-or-later ++++++ openQA-worker-test.spec ++++++ --- /var/tmp/diff_new_pack.8TXBsS/_old 2025-03-03 16:58:10.092225606 +0100 +++ /var/tmp/diff_new_pack.8TXBsS/_new 2025-03-03 16:58:10.096225772 +0100 @@ -18,7 +18,7 @@ %define short_name openQA-worker Name: %{short_name}-test -Version: 5.1740761651.192e0b4f +Version: 5.1741001706.950ead88 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA.spec ++++++ --- /var/tmp/diff_new_pack.8TXBsS/_old 2025-03-03 16:58:10.144227778 +0100 +++ /var/tmp/diff_new_pack.8TXBsS/_new 2025-03-03 16:58:10.148227945 +0100 @@ -90,7 +90,7 @@ %define devel_requires %devel_no_selenium_requires chromedriver Name: openQA -Version: 5.1740761651.192e0b4f +Version: 5.1741001706.950ead88 Release: 0 Summary: The openQA web-frontend, scheduler and tools License: GPL-2.0-or-later ++++++ openQA-5.1740761651.192e0b4f.obscpio -> openQA-5.1741001706.950ead88.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1740761651.192e0b4f/lib/OpenQA/WebAPI/Auth/OAuth2.pm new/openQA-5.1741001706.950ead88/lib/OpenQA/WebAPI/Auth/OAuth2.pm --- old/openQA-5.1740761651.192e0b4f/lib/OpenQA/WebAPI/Auth/OAuth2.pm 2025-02-28 17:54:11.000000000 +0100 +++ new/openQA-5.1741001706.950ead88/lib/OpenQA/WebAPI/Auth/OAuth2.pm 2025-03-03 12:35:06.000000000 +0100 @@ -70,7 +70,7 @@ return $controller->render(text => $msg, status => 403); # return always 403 for consistency } my $details = $tx->res->json; - my $id_field = $provider_config->{id_from}; + my $id_field = $provider_config->{id_from} // 'id'; my $nickname_field = $provider_config->{nickname_from}; if (ref $details ne 'HASH' || !$details->{$id_field} || !$details->{$nickname_field}) { log_debug('OAuth2 user provider returned: ' . dumper($details)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1740761651.192e0b4f/lib/OpenQA/WebSockets/Controller/Worker.pm new/openQA-5.1741001706.950ead88/lib/OpenQA/WebSockets/Controller/Worker.pm --- old/openQA-5.1740761651.192e0b4f/lib/OpenQA/WebSockets/Controller/Worker.pm 2025-02-28 17:54:11.000000000 +0100 +++ new/openQA-5.1741001706.950ead88/lib/OpenQA/WebSockets/Controller/Worker.pm 2025-03-03 12:35:06.000000000 +0100 @@ -2,7 +2,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later package OpenQA::WebSockets::Controller::Worker; -use Mojo::Base 'Mojolicious::Controller'; +use Mojo::Base 'Mojolicious::Controller', -signatures; use DBIx::Class::Timestamps 'now'; use OpenQA::Schema; @@ -18,8 +18,7 @@ use constant LOG_WORKER_STATUS_MESSAGES => $ENV{OPENQA_LOG_WORKER_STATUS_MESSAGES} // 0; -sub ws { - my ($self) = @_; +sub ws ($self) { my $status = $self->status; # add worker connection @@ -34,8 +33,7 @@ $self->tx->max_websocket_size(10485760); } -sub _finish { - my ($self, $code, $reason) = @_; +sub _finish ($self, $code, $reason) { return undef unless $self; my $worker = OpenQA::WebSockets::Model::Status->singleton->remove_worker_connection($self->tx); @@ -51,9 +49,7 @@ # is lost unexpectedly. It will be considered offline after the configured timeout expires. } -sub _message { - my ($self, $json) = @_; - +sub _message ($self, $json) { my $app = $self->app; my $schema = $app->schema; my $tx = $self->tx; @@ -161,68 +157,54 @@ $worker_status->{last_seen} = $now; my $workers = $schema->resultset('Workers'); - my $worker = $workers->find($worker_id); + return undef unless my $worker = $workers->find($worker_id); # log that we 'saw' the worker - if ($worker) { - try { - log_debug("Updating seen of worker $worker_id from worker_status ($current_worker_status)"); - $worker->seen({error => $current_worker_error}); + try { + log_debug("Updating seen of worker $worker_id from worker_status ($current_worker_status)"); + $worker->seen({error => $current_worker_error}); - # Tell the worker that we saw it (used for tests and debugging) - $tx->send({json => {type => 'info', seen => 1}}); - } - catch { - log_error("Failed updating seen and error status of worker $worker_id: $_"); # uncoverable statement - }; + # Tell the worker that we saw it (used for tests and debugging) + $tx->send({json => {type => 'info', seen => 1}}); } + catch { + log_error("Failed updating seen and error status of worker $worker_id: $_"); # uncoverable statement + }; # find the job currently associated with that worker and check whether the worker still # executes the job it is supposed to - my $current_job_id; + my @unfinished_jobs = $worker->unfinished_jobs; + my $current_job = $worker->job // $unfinished_jobs[0] + or return undef; + my $current_job_id = $current_job->id; + my $current_job_state = $current_job->state; + + log_trace("Found job $current_job_id in DB from worker_status update sent by worker $worker_id"); + log_trace("Received request has job id: $job_id") if defined $job_id; + my $registered_job_token = $worker->get_property('JOBTOKEN'); + log_trace("Worker $worker_id for job $current_job_id has token $registered_job_token") + if defined $registered_job_token; + log_trace("Received request has token: $job_token") if defined $job_token; + + # skip any further actions if worker just does the one job we expected it to do + return undef + if ( defined $job_id + && defined $job_token + && defined $registered_job_token + && $job_id eq $current_job_id + && (my $job_token_correct = $job_token eq $registered_job_token) + && OpenQA::Jobs::Constants::meta_state($current_job_state) eq OpenQA::Jobs::Constants::EXECUTION) + && (scalar @unfinished_jobs <= 1); try { - return undef unless $worker; - - my $registered_job_token; - my $current_job_state; - my @unfinished_jobs = $worker->unfinished_jobs; - my $current_job = $worker->job // $unfinished_jobs[0]; - if ($current_job) { - $current_job_id = $current_job->id; - $current_job_state = $current_job->state; - } - - # log debugging info - log_trace("Found job $current_job_id in DB from worker_status update sent by worker $worker_id") - if defined $current_job_id; - log_trace("Received request has job id: $job_id") - if defined $job_id; - $registered_job_token = $worker->get_property('JOBTOKEN'); - log_trace("Worker $worker_id for job $current_job_id has token $registered_job_token") - if defined $current_job_id && defined $registered_job_token; - log_trace("Received request has token: $job_token") - if defined $job_token; - - # skip any further actions if worker just does the one job we expected it to do - return undef - if ( defined $job_id - && defined $current_job_id - && defined $job_token - && defined $registered_job_token - && $job_id eq $current_job_id - && (my $job_token_correct = $job_token eq $registered_job_token) - && OpenQA::Jobs::Constants::meta_state($current_job_state) eq OpenQA::Jobs::Constants::EXECUTION) - && (scalar @unfinished_jobs <= 1); - # give worker a second chance to process the job assignment # possible situation on the worker: The worker might be sending a status update claiming it is # idle (or has doing that task piled up on the event loop). At the same time a job arrives. The # message regarding that job will be processed after sending the idle status. So let's give the - # worker another change to process the message about its assigned job. - return undef unless $worker_previously_idle; - - log_debug("Rescheduling jobs assigned to worker $worker_id"); - $worker->reschedule_assigned_jobs([$current_job, @unfinished_jobs]); + # worker another chance to process the message about its assigned job. + if ($worker_previously_idle) { + log_debug("Rescheduling jobs assigned to worker $worker_id"); + $worker->reschedule_assigned_jobs([$current_job, @unfinished_jobs]); + } } catch { # uncoverable statement @@ -230,8 +212,7 @@ }; # consider the worker idle unless it claims to be broken or work on a job - $worker_status->{idle_despite_job_assignment} - = !$worker_is_broken && !defined $job_id && defined $current_job_id; + $worker_status->{idle_despite_job_assignment} = !$worker_is_broken && !defined $job_id; } else { log_error(sprintf('Received unknown message type "%s" from worker %u', $message_type, $worker_status->{id})); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1740761651.192e0b4f/t/05-scheduler-restart-and-duplicate.t new/openQA-5.1741001706.950ead88/t/05-scheduler-restart-and-duplicate.t --- old/openQA-5.1740761651.192e0b4f/t/05-scheduler-restart-and-duplicate.t 2025-02-28 17:54:11.000000000 +0100 +++ new/openQA-5.1741001706.950ead88/t/05-scheduler-restart-and-duplicate.t 2025-03-03 12:35:06.000000000 +0100 @@ -304,7 +304,7 @@ my $res = $root_1->auto_duplicate; is ref $res, 'OpenQA::Schema::Result::Jobs', 'no error when duplicating root1' or always_explain $res; my $cloned = $res->{cluster_cloned}; - always_explain $cloned; + explain $cloned; my @should_have_been_cloned = ($root_1, $parallel_parent, $parallel_child, $nested_chained_child); my @should_not_have_been_cloned = ($root_2, $chained_child); ok exists $cloned->{$_->id}, $_->TEST . ' has been cloned' for @should_have_been_cloned; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1740761651.192e0b4f/t/api/09-comments.t new/openQA-5.1741001706.950ead88/t/api/09-comments.t --- old/openQA-5.1740761651.192e0b4f/t/api/09-comments.t 2025-02-28 17:54:11.000000000 +0100 +++ new/openQA-5.1741001706.950ead88/t/api/09-comments.t 2025-03-03 12:35:06.000000000 +0100 @@ -182,7 +182,7 @@ $t->get_ok('/api/v1/jobs/99981/comments?limit=10', 'query with exceeding user-specified limit for comments') ->status_is(200); my $jobs = $t->tx->res->json; - always_explain $jobs; + explain $jobs; is ref $jobs, 'ARRAY', 'data returned (1)' and is scalar @$jobs, 5, 'maximum limit for comments is effective'; $t->get_ok('/api/v1/jobs/99981/comments?limit=3', 'query with exceeding user-specified limit for comments') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1740761651.192e0b4f/t/deploy.t new/openQA-5.1741001706.950ead88/t/deploy.t --- old/openQA-5.1740761651.192e0b4f/t/deploy.t 2025-02-28 17:54:11.000000000 +0100 +++ new/openQA-5.1741001706.950ead88/t/deploy.t 2025-03-03 12:35:06.000000000 +0100 @@ -10,6 +10,7 @@ use Test::Warnings ':report_warnings'; use Test::Mojo; +use Test::Output qw(stderr_like); use Mojo::File 'tempdir'; use DBIx::Class::DeploymentHandler; use SQL::Translator; @@ -74,7 +75,8 @@ ok($dh->version_storage->database_version, 'DB deployed'); is($dh->version_storage->database_version, $oldest_still_supported_schema_version, 'Schema at correct, old, version'); -$ret = $schema->deploy; +stderr_like { $ret = $schema->deploy } +qr{Job IDs will be converted to bigint.*Worker database IDs.*Further database IDs}s, 'Expected warnings are logged'; # insert default fixtures so this test is at least a little bit closer to migrations in production OpenQA::Test::Database->new->insert_fixtures($schema); ++++++ openQA.obsinfo ++++++ --- /var/tmp/diff_new_pack.8TXBsS/_old 2025-03-03 16:58:30.537079792 +0100 +++ /var/tmp/diff_new_pack.8TXBsS/_new 2025-03-03 16:58:30.541079959 +0100 @@ -1,5 +1,5 @@ name: openQA -version: 5.1740761651.192e0b4f -mtime: 1740761651 -commit: 192e0b4f22a5eec459b2dcdff30093e514aceec3 +version: 5.1741001706.950ead88 +mtime: 1741001706 +commit: 950ead88dab172d5830008628c1cf49c15693bb2