Result::TaskRetries: Teach about requeue

This commit is contained in:
Graham Christensen 2021-08-26 17:32:32 -04:00
parent 42c2d2f387
commit 147fa4d029
2 changed files with 46 additions and 1 deletions

View file

@ -105,6 +105,16 @@ __PACKAGE__->set_primary_key("id");
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-08-26 16:30:59
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:4MC8UnsgrvJVRrIURvSH5A
use Hydra::Math qw(exponential_backoff);
sub requeue {
my ($self) = @_;
$self->update({
attempts => $self->attempts + 1,
retry_at => time() + exponential_backoff($self->attempts + 1),
});
}
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;

View file

@ -0,0 +1,35 @@
use strict;
use warnings;
use Setup;
my %ctx = test_init();
require Hydra::Schema;
require Hydra::Model::DB;
use Test2::V0;
my $db = Hydra::Model::DB->new;
hydra_setup($db);
my $taskretries = $db->resultset('TaskRetries');
subtest "requeue" => sub {
my $task = $taskretries->create({
channel => "bogus",
pluginname => "bogus",
payload => "bogus",
attempts => 1,
retry_at => time(),
});
$task->requeue();
is($task->attempts, 2, "We should have stored a second retry");
is($task->retry_at, within(time() + 4, 2), "Delayed two exponential backoff step");
$task->requeue();
is($task->attempts, 3, "We should have stored a third retry");
is($task->retry_at, within(time() + 8, 2), "Delayed a third exponential backoff step");
};
done_testing;