Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-Minion for openSUSE:Factory checked in at 2021-03-10 08:57:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Minion (Old) and /work/SRC/openSUSE:Factory/.perl-Minion.new.2378 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Minion" Wed Mar 10 08:57:31 2021 rev:65 rq:878032 version:10.17 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Minion/perl-Minion.changes 2021-02-17 18:13:34.058040133 +0100 +++ /work/SRC/openSUSE:Factory/.perl-Minion.new.2378/perl-Minion.changes 2021-03-10 08:58:43.870980387 +0100 @@ -1,0 +2,14 @@ +Sun Mar 7 03:07:20 UTC 2021 - Tina M??ller <timueller+p...@suse.de> + +- updated to 10.17 + see /usr/share/doc/packages/perl-Minion/Changes + + 10.17 2021-03-05 + - Added support for high priority fast lane. + - Added each method to Minion::Iterator. + - Added min_priority option to dequeue methods in Minion::Worker and Minion::Backend::Pg. + - Added spare and spare_min_priority options to run method in Minion::Worker. + - Added -s and -S options to worker command. + - Added --retry-failed and --remove-failed options to job command. + +------------------------------------------------------------------- Old: ---- Minion-10.16.tar.gz New: ---- Minion-10.17.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Minion.spec ++++++ --- /var/tmp/diff_new_pack.5evMEJ/_old 2021-03-10 08:58:44.266980796 +0100 +++ /var/tmp/diff_new_pack.5evMEJ/_new 2021-03-10 08:58:44.270980800 +0100 @@ -18,7 +18,7 @@ %define cpan_name Minion Name: perl-Minion -Version: 10.16 +Version: 10.17 Release: 0 Summary: Job queue License: Artistic-2.0 @@ -34,10 +34,10 @@ %description Minion is a high performance job queue for the Perl programming language, -with support for multiple named queues, priorities, delayed jobs, job -dependencies, job progress, job results, retries with backoff, rate -limiting, unique jobs, expiring jobs, statistics, distributed workers, -parallel processing, autoscaling, remote control, at +with support for multiple named queues, priorities, high priority fast +lane, delayed jobs, job dependencies, job progress, job results, retries +with backoff, rate limiting, unique jobs, expiring jobs, statistics, +distributed workers, parallel processing, autoscaling, remote control, at https://mojolicious.org admin ui, resource leak protection and multiple backends (such as at https://www.postgresql.org). ++++++ Minion-10.16.tar.gz -> Minion-10.17.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/Changes new/Minion-10.17/Changes --- old/Minion-10.16/Changes 2021-02-16 10:59:43.000000000 +0100 +++ new/Minion-10.17/Changes 2021-03-06 03:08:22.000000000 +0100 @@ -1,4 +1,12 @@ +10.17 2021-03-05 + - Added support for high priority fast lane. + - Added each method to Minion::Iterator. + - Added min_priority option to dequeue methods in Minion::Worker and Minion::Backend::Pg. + - Added spare and spare_min_priority options to run method in Minion::Worker. + - Added -s and -S options to worker command. + - Added --retry-failed and --remove-failed options to job command. + 10.16 2021-02-16 - Fixed Mojolicious 9.0 compatibility. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/META.json new/Minion-10.17/META.json --- old/Minion-10.16/META.json 2021-02-16 11:00:31.000000000 +0100 +++ new/Minion-10.17/META.json 2021-03-06 16:04:33.000000000 +0100 @@ -4,7 +4,7 @@ "Sebastian Riedel <s...@cpan.org>" ], "dynamic_config" : 0, - "generated_by" : "ExtUtils::MakeMaker version 7.58, CPAN::Meta::Converter version 2.150010", + "generated_by" : "ExtUtils::MakeMaker version 7.60, CPAN::Meta::Converter version 2.150010", "license" : [ "artistic_2" ], @@ -57,6 +57,6 @@ "web" : "https://webchat.freenode.net/#mojo" } }, - "version" : "10.16", + "version" : "10.17", "x_serialization_backend" : "JSON::PP version 4.06" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/META.yml new/Minion-10.17/META.yml --- old/Minion-10.16/META.yml 2021-02-16 11:00:31.000000000 +0100 +++ new/Minion-10.17/META.yml 2021-03-06 16:04:33.000000000 +0100 @@ -7,7 +7,7 @@ configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 0 -generated_by: 'ExtUtils::MakeMaker version 7.58, CPAN::Meta::Converter version 2.150010' +generated_by: 'ExtUtils::MakeMaker version 7.60, CPAN::Meta::Converter version 2.150010' license: artistic_2 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -29,5 +29,5 @@ homepage: https://mojolicious.org license: http://www.opensource.org/licenses/artistic-license-2.0 repository: https://github.com/mojolicious/minion.git -version: '10.16' +version: '10.17' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/README.md new/Minion-10.17/README.md --- old/Minion-10.16/README.md 2020-08-01 00:57:23.000000000 +0200 +++ new/Minion-10.17/README.md 2021-03-05 17:35:43.000000000 +0100 @@ -4,9 +4,9 @@  A high performance job queue for the Perl programming language, with support for multiple named queues, priorities, - delayed jobs, job dependencies, job progress, job results, retries with backoff, rate limiting, unique jobs, expiring - jobs, statistics, distributed workers, parallel processing, autoscaling, remote control, - [Mojolicious](https://mojolicious.org) admin ui, resource leak protection and multiple backends (such as + high priority fast lane, delayed jobs, job dependencies, job progress, job results, retries with backoff, rate + limiting, unique jobs, expiring jobs, statistics, distributed workers, parallel processing, autoscaling, remote + control, [Mojolicious](https://mojolicious.org) admin ui, resource leak protection and multiple backends (such as [PostgreSQL](https://www.postgresql.org)). Job queues allow you to process time and/or computationally intensive tasks in background processes, outside of the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/lib/Minion/Backend/Pg.pm new/Minion-10.17/lib/Minion/Backend/Pg.pm --- old/Minion-10.16/lib/Minion/Backend/Pg.pm 2021-01-17 15:58:56.000000000 +0100 +++ new/Minion-10.17/lib/Minion/Backend/Pg.pm 2021-03-06 02:06:07.000000000 +0100 @@ -269,13 +269,14 @@ SELECT 1 FROM minion_jobs WHERE id = ANY (j.parents) AND ( state = 'active' OR (state = 'failed' AND NOT j.lax) OR (state = 'inactive' AND (expires IS NULL OR expires > NOW()))) - )) AND queue = ANY (?) AND state = 'inactive' AND task = ANY (?) AND (EXPIRES IS NULL OR expires > NOW()) + )) AND priority >= COALESCE(?, priority) AND queue = ANY (?) AND state = 'inactive' AND task = ANY (?) + AND (EXPIRES IS NULL OR expires > NOW()) ORDER BY priority DESC, id LIMIT 1 FOR UPDATE SKIP LOCKED ) - RETURNING id, args, retries, task}, $id, $options->{id}, $options->{queues} || ['default'], - [keys %{$self->minion->tasks}] + RETURNING id, args, retries, task}, $id, $options->{id}, $options->{min_priority}, + $options->{queues} || ['default'], [keys %{$self->minion->tasks}] )->expand->hash; } @@ -352,6 +353,12 @@ Dequeue a specific job. +=item min_priority + + min_priority => 3 + +Do not dequeue jobs with a lower priority. + =item queues queues => ['important'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/lib/Minion/Backend.pm new/Minion-10.17/lib/Minion/Backend.pm --- old/Minion-10.16/lib/Minion/Backend.pm 2021-01-17 15:58:55.000000000 +0100 +++ new/Minion-10.17/lib/Minion/Backend.pm 2021-03-04 18:45:08.000000000 +0100 @@ -119,6 +119,12 @@ Dequeue a specific job. +=item min_priority + + min_priority => 3 + +Do not dequeue jobs with a lower priority. + =item queues queues => ['important'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/lib/Minion/Command/minion/job.pm new/Minion-10.17/lib/Minion/Command/minion/job.pm --- old/Minion-10.16/lib/Minion/Command/minion/job.pm 2021-01-17 15:58:56.000000000 +0100 +++ new/Minion-10.17/lib/Minion/Command/minion/job.pm 2021-03-06 03:20:26.000000000 +0100 @@ -28,7 +28,9 @@ 'p|priority=i' => \$options->{priority}, 'q|queue=s' => sub { push @{$options->{queues}}, $options->{queue} = $_[1] }, 'R|retry' => \my $retry, + 'retry-failed' => \my $retry_failed, 'remove' => \my $remove, + 'remove-failed' => \my $remove_failed, 'S|state=s' => sub { push @{$options->{states}}, $_[1] }, 's|stats' => \my $stats, 'T|tasks' => \my $tasks, @@ -53,6 +55,10 @@ # List tasks return print tablify [map { [$_, $minion->class_for_task($_)] } keys %{$minion->tasks}] if $tasks; + # Iterate through failed jobs + return $minion->jobs({states => ['failed']})->each(sub { $minion->job($_->{id})->remove }) if $remove_failed; + return $minion->jobs({states => ['failed']})->each(sub { $minion->job($_->{id})->retry }) if $retry_failed; + # Locks return $minion->unlock($unlock) if $unlock; return $self->_list_locks($offset, $limit, @args ? {names => \@args} : ()) if $locks; @@ -128,6 +134,7 @@ ./myapp.pl minion job -e 'foo' -n '{"test":123}' ./myapp.pl minion job -R -d 10 -E 300 10023 ./myapp.pl minion job --remove 10023 + ./myapp.pl minion job --retry-failed ./myapp.pl minion job -n '["test"]' ./myapp.pl minion job -L ./myapp.pl minion job -L some_lock some_other_lock @@ -168,7 +175,9 @@ -q, --queue <name> Queue to put new job in, defaults to "default", or list only jobs in these queues -R, --retry Retry job + --retry-failed Retry all failed jobs at once --remove Remove job + --remove-failed Remove all failed jobs at once -S, --state <name> List only jobs in these states -s, --stats Show queue statistics -T, --tasks List available tasks diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/lib/Minion/Command/minion/worker.pm new/Minion-10.17/lib/Minion/Command/minion/worker.pm --- old/Minion-10.16/lib/Minion/Command/minion/worker.pm 2021-01-17 15:58:56.000000000 +0100 +++ new/Minion-10.17/lib/Minion/Command/minion/worker.pm 2021-03-05 18:00:20.000000000 +0100 @@ -17,7 +17,9 @@ 'I|heartbeat-interval=i' => \$status->{heartbeat_interval}, 'j|jobs=i' => \$status->{jobs}, 'q|queue=s' => \my @queues, - 'R|repair-interval=i' => \$status->{repair_interval}; + 'R|repair-interval=i' => \$status->{repair_interval}, + 's|spare=i' => \$status->{spare}, + 'S|spare-min-priority=i' => \$status->{spare_min_priority}; $status->{queues} = \@queues if @queues; my $log = $self->app->log; @@ -60,7 +62,8 @@ MOJO_HOME or auto-detection -I, --heartbeat-interval <seconds> Heartbeat interval, defaults to 300 -j, --jobs <number> Maximum number of jobs to perform - parallel in forked worker processes, + parallel in forked worker processes + (not including spare processes), defaults to 4 -m, --mode <name> Operating mode for your application, defaults to the value of @@ -71,6 +74,11 @@ value can be subtracted randomly to make sure not all workers repair at the same time, defaults to 21600 (6 hours) + -s, --spare <number> Number of spare worker processes to + reserve for high priority jobs, + defaults to 1 + -S, --spare-min-priority <number> Minimum priority of jobs to use spare + worker processes for, defaults to 1 =head1 DESCRIPTION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/lib/Minion/Iterator.pm new/Minion-10.17/lib/Minion/Iterator.pm --- old/Minion-10.16/lib/Minion/Iterator.pm 2021-01-17 15:58:56.000000000 +0100 +++ new/Minion-10.17/lib/Minion/Iterator.pm 2021-03-06 03:00:38.000000000 +0100 @@ -4,6 +4,11 @@ has fetch => 10; has [qw(minion options)]; +sub each { + my ($self, $cb) = @_; + while ($_ = $self->next) { $cb->($_) } +} + sub next { shift @{shift->_fetch(0)->{results}} } sub total { shift->_fetch(1)->{total} } @@ -73,6 +78,13 @@ L<Minion::Iterator> inherits all methods from L<Mojo::Base> and implements the following new ones. +=head2 each + + $iter->each(sub {...}); + +Evaluate callback for each element in collection. The element will be the first argument passed to the callback, and is +also available as C<$_>. + =head2 next my $value = $iter->next; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/lib/Minion/Worker.pm new/Minion-10.17/lib/Minion/Worker.pm --- old/Minion-10.16/lib/Minion/Worker.pm 2021-01-17 15:58:55.000000000 +0100 +++ new/Minion-10.17/lib/Minion/Worker.pm 2021-03-05 18:00:07.000000000 +0100 @@ -60,6 +60,8 @@ $status->{performed} //= 0; $status->{repair_interval} //= 21600; $status->{repair_interval} -= int rand $status->{repair_interval} / 2; + $status->{spare} //= 1; + $status->{spare_min_priority} //= 1; # Reset event loop Mojo::IOLoop->reset; @@ -119,11 +121,13 @@ @$jobs = map { $_->is_finished && ++$status->{performed} ? () : $_ } @$jobs; # Job limit has been reached or worker is stopping - return $self->emit('busy') if $status->{jobs} <= @$jobs || $self->{finished}; + my @extra; + if ($self->{finished} || ($status->{jobs} + $status->{spare}) <= @$jobs) { return $self->emit('busy') } + elsif ($status->{jobs} <= @$jobs) { @extra = (min_priority => $status->{spare_min_priority}) } # Try to get more jobs my ($max, $queues) = @{$status}{qw(dequeue_timeout queues)}; - my $job = $self->emit('wait')->dequeue($max => {queues => $queues}); + my $job = $self->emit('wait')->dequeue($max => {queues => $queues, @extra}); push @$jobs, $job->start if $job; } @@ -277,6 +281,12 @@ Dequeue a specific job. +=item min_priority + + min_priority => 3 + +Do not dequeue jobs with a lower priority. + =item queues queues => ['important'] @@ -389,7 +399,7 @@ jobs => 12 -Maximum number of jobs to perform parallel in forked worker processes, defaults to C<4>. +Maximum number of jobs to perform parallel in forked worker processes (not including spare processes), defaults to C<4>. =item queues @@ -404,6 +414,18 @@ Repair interval, up to half of this value can be subtracted randomly to make sure not all workers repair at the same time, defaults to C<21600> (6 hours). +=item spare + + spare => 2 + +Number of spare worker processes to reserve for high priority jobs, defaults to C<1>. + +=item spare_min_priority + + spare_min_priority => 7 + +Minimum priority of jobs to use spare worker processes for, defaults to C<1>. + =back These remote control L</"commands"> are currently available: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/lib/Minion.pm new/Minion-10.17/lib/Minion.pm --- old/Minion-10.16/lib/Minion.pm 2021-01-29 18:05:37.000000000 +0100 +++ new/Minion-10.17/lib/Minion.pm 2021-03-06 02:06:07.000000000 +0100 @@ -20,7 +20,7 @@ has [qw(remove_after stuck_after)] => 172800; has tasks => sub { {} }; -our $VERSION = '10.16'; +our $VERSION = '10.17'; sub add_task { my ($self, $name, $task) = @_; @@ -217,9 +217,9 @@ =end html L<Minion> is a high performance job queue for the Perl programming language, with support for multiple named queues, -priorities, delayed jobs, job dependencies, job progress, job results, retries with backoff, rate limiting, unique -jobs, expiring jobs, statistics, distributed workers, parallel processing, autoscaling, remote control, -L<Mojolicious|https://mojolicious.org> admin ui, resource leak protection and multiple backends (such as +priorities, high priority fast lane, delayed jobs, job dependencies, job progress, job results, retries with backoff, +rate limiting, unique jobs, expiring jobs, statistics, distributed workers, parallel processing, autoscaling, remote +control, L<Mojolicious|https://mojolicious.org> admin ui, resource leak protection and multiple backends (such as L<PostgreSQL|https://www.postgresql.org>). Job queues allow you to process time and/or computationally intensive tasks in background processes, outside of the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/t/pg.t new/Minion-10.17/t/pg.t --- old/Minion-10.16/t/pg.t 2021-01-29 18:05:38.000000000 +0100 +++ new/Minion-10.17/t/pg.t 2021-03-06 02:57:37.000000000 +0100 @@ -545,6 +545,10 @@ is $jobs->next, undef, 'no more results'; is $jobs->total, 4, 'four jobs'; + my @tasks; + $minion->jobs->each(sub { push @tasks, [shift->{task}, $_->{task}] }); + is_deeply \@tasks, [['add', 'add'], ['fail', 'fail'], ['fail', 'fail'], ['fail', 'fail']], 'right structure'; + $jobs = $minion->jobs->fetch(2); is $jobs->options->{before}, undef, 'no before'; is $jobs->next->{task}, 'add', 'right task'; @@ -688,6 +692,28 @@ is $job->info->{retries}, 2, 'job has been retried twice'; is $job->info->{priority}, 0, 'low priority'; ok $job->finish, 'job finished'; + + $id = $minion->enqueue(add => [2, 6], {priority => 2}); + ok !$worker->dequeue(0, {min_priority => 5}); + ok !$worker->dequeue(0, {min_priority => 3}); + ok $job = $worker->dequeue(0, {min_priority => 2}); + is $job->id, $id, 'right id'; + is $job->info->{priority}, 2, 'expected priority'; + ok $job->finish, 'job finished'; + $minion->enqueue(add => [2, 8], {priority => 0}); + $minion->enqueue(add => [2, 7], {priority => 5}); + $minion->enqueue(add => [2, 8], {priority => -2}); + ok !$worker->dequeue(0, {min_priority => 6}); + ok $job = $worker->dequeue(0, {min_priority => 0}); + is $job->info->{priority}, 5, 'expected priority'; + ok $job->finish, 'job finished'; + ok $job = $worker->dequeue(0, {min_priority => 0}); + is $job->info->{priority}, 0, 'expected priority'; + ok $job->finish, 'job finished'; + ok !$worker->dequeue(0, {min_priority => 0}); + ok $job = $worker->dequeue(0, {min_priority => -10}); + is $job->info->{priority}, -2, 'expected priority'; + ok $job->finish, 'job finished'; $worker->unregister; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-10.16/t/pg_worker.t new/Minion-10.17/t/pg_worker.t --- old/Minion-10.16/t/pg_worker.t 2021-01-29 18:05:39.000000000 +0100 +++ new/Minion-10.17/t/pg_worker.t 2021-03-05 17:27:53.000000000 +0100 @@ -91,6 +91,8 @@ is_deeply $status->{queues}, ['default'], 'right structure'; is $status->{performed}, 1, 'right value'; ok $status->{repair_interval}, 'has a value'; + is $status->{spare}, 1, 'right value'; + is $status->{spare_min_priority}, 1, 'right value'; }; # Clean up once we are done