ResultSet::TaskRetries: teach about saving tasks

[?]
Aug 26, 2021, 9:32 PM
IBXWOZCLZYQCWXCSXZR3VHKWICB5LEGM7JHCRJKMFLJKE5DAPE5AC

Dependencies

  • [2] GMOI3OFS ResultSet::TaskRetries: add get_seconds_to_next_retry

Change contents

  • edit in src/lib/Hydra/Schema/ResultSet/TaskRetries.pm at line 8
    [2.168]
    [2.168]
    use Hydra::Math qw(exponential_backoff);
  • edit in src/lib/Hydra/Schema/ResultSet/TaskRetries.pm at line 41
    [2.881]
    [2.881]
    =head2 save_task
    Save a failing L<Hydra::Task> in the database, with a retry scheduled
    for a few seconds away.
    Arguments:
  • edit in src/lib/Hydra/Schema/ResultSet/TaskRetries.pm at line 49
    [2.882]
    [2.882]
    =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),
    });
    }
  • edit in t/Schema/ResultSet/TaskRetries.t at line 7
    [2.1012]
    [2.1012]
    use Hydra::Event;
    use Hydra::Task;
  • edit in t/Schema/ResultSet/TaskRetries.t at line 45
    [2.2197]
    [2.2197]
    };
    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");