Skip to content

Commit 13c6e63

Browse files
committed
Deduplicate index jobs
1 parent eab038b commit 13c6e63

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

lib/Cavil/Command/unpack.pm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ sub run ($self, @args) {
3131
$minion->unlock("processing_pkg_$id");
3232
}
3333

34-
my $job = $app->packages->unpack($id);
35-
print STDOUT "Triggered unpack job $job\n";
34+
if (my $job = $app->packages->unpack($id)) { print STDOUT "Triggered unpack job $job\n" }
35+
else { print STDOUT "Unpacking already in progress\n" }
3636
}
3737

3838
1;

lib/Cavil/Model/Packages.pm

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,8 +543,13 @@ sub _check_field ($self, $field, $id) {
543543
}
544544

545545
sub _enqueue ($self, $task, $id, $priority = 5, $parents = [], $delay = 0) {
546+
my $minion = $self->minion;
547+
548+
# Deduplicate jobs for same package
549+
return undef if $self->minion->jobs({tasks => [$task], states => ['inactive'], notes => ["pkg_$id"]})->total;
550+
546551
my $pkg = $self->find($id);
547-
return $self->minion->enqueue(
552+
return $minion->enqueue(
548553
$task => [$id] => {
549554
delay => $delay,
550555
parents => $parents,

t/command_unpack.t

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,21 @@ subtest 'Unpack' => sub {
4848
is $app->minion->jobs({tasks => ['unpack']})->total, 2, 'two unpack jobs';
4949
};
5050

51+
subtest 'Unpacking in progress' => sub {
52+
my $buffer = '';
53+
{
54+
open my $handle, '>', \$buffer;
55+
local *STDOUT = $handle;
56+
$app->start('unpack', '2');
57+
}
58+
like $buffer, qr/Unpacking already in progress/, 'in progress';
59+
is $app->minion->jobs({tasks => ['unpack']})->total, 2, 'two unpack jobs';
60+
};
61+
62+
my $worker = $app->minion->worker->register;
63+
my $job = $worker->dequeue(0);
64+
$job->fail('Something went wrong');
65+
5166
subtest 'Unlock failed prior attempt' => sub {
5267
is $app->minion->jobs({tasks => ['unpack']})->total, 2, 'two unpack jobs';
5368
$minion->lock('processing_pkg_2', 172800);

t/manual_review.t

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,14 @@ subtest 'Reindex (with updated stats)' => sub {
241241

242242
$t->app->minion->enqueue('pattern_stats');
243243
$t->app->minion->perform_jobs;
244-
$t->app->packages->reindex(1);
244+
245+
subtest 'Index jobs are deduplicated' => sub {
246+
$t->app->packages->reindex(1);
247+
is $t->app->minion->jobs({tasks => ['index'], states => ['inactive']})->total, 1, 'one index job';
248+
$t->app->packages->reindex(1);
249+
is $t->app->minion->jobs({tasks => ['index'], states => ['inactive']})->total, 1, 'one index job';
250+
};
251+
245252
$t->get_ok('/reviews/report/1')->status_is(408)->content_like(qr/package being processed/);
246253
$t->app->minion->perform_jobs;
247254

0 commit comments

Comments
 (0)