forked from lix-project/hydra
ResultSet::TaskRetries: teach about saving tasks
This commit is contained in:
parent
147fa4d029
commit
d0b0fc21b3
|
@ -5,6 +5,7 @@ use warnings;
|
|||
use utf8;
|
||||
use base 'DBIx::Class::ResultSet';
|
||||
use List::Util qw(max);
|
||||
use Hydra::Math qw(exponential_backoff);
|
||||
|
||||
=head2 get_seconds_to_next_retry
|
||||
|
||||
|
@ -38,4 +39,32 @@ sub get_seconds_to_next_retry {
|
|||
}
|
||||
}
|
||||
|
||||
=head2 save_task
|
||||
|
||||
Save a failing L<Hydra::Task> in the database, with a retry scheduled
|
||||
for a few seconds away.
|
||||
|
||||
Arguments:
|
||||
|
||||
=over 1
|
||||
|
||||
=item C<$task>
|
||||
|
||||
L<Hydra::Task> The failing task to retry.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
sub save_task {
|
||||
my ($self, $task) = @_;
|
||||
|
||||
return $self->create({
|
||||
channel => $task->{"event"}->{"channel_name"},
|
||||
pluginname => $task->{"plugin_name"},
|
||||
payload => $task->{"event"}->{"payload"},
|
||||
attempts => 1,
|
||||
retry_at => time() + exponential_backoff(1),
|
||||
});
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -4,6 +4,8 @@ use Setup;
|
|||
|
||||
my %ctx = test_init();
|
||||
|
||||
use Hydra::Event;
|
||||
use Hydra::Task;
|
||||
require Hydra::Schema;
|
||||
require Hydra::Model::DB;
|
||||
|
||||
|
@ -42,4 +44,20 @@ subtest "get_seconds_to_next_retry" => sub {
|
|||
}
|
||||
};
|
||||
|
||||
subtest "save_task" => sub {
|
||||
my $event = Hydra::Event->new_event("build_started", "1");
|
||||
my $task = Hydra::Task->new(
|
||||
$event,
|
||||
"FooPluginName",
|
||||
);
|
||||
|
||||
my $retry = $taskretries->save_task($task);
|
||||
|
||||
is($retry->channel, "build_started", "Channel name should match");
|
||||
is($retry->pluginname, "FooPluginName", "Plugin name should match");
|
||||
is($retry->payload, "1", "Payload should match");
|
||||
is($retry->attempts, 1, "We've had one attempt");
|
||||
is($retry->retry_at, within(time() + 1, 2), "The retry at should be approximately one second away");
|
||||
};
|
||||
|
||||
done_testing;
|
||||
|
|
Loading…
Reference in a new issue