Result::TaskRetries: Teach about requeue

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

Dependencies

  • [2] ASPD4MDN Passwords: check in constant time
  • [3] 6JYDU2DM TaskRetries: init table

Change contents

  • edit in src/lib/Hydra/Schema/Result/TaskRetries.pm at line 108
    [3.1612]
    [3.1612]
    use Hydra::Math qw(exponential_backoff);
  • replacement in src/lib/Hydra/Schema/Result/TaskRetries.pm at line 110
    [3.1613][3.1613:1712]()
    # You can replace this text with custom code or comments, and it will be preserved on regeneration
    [3.1613]
    [3.1712]
    sub requeue {
    my ($self) = @_;
    $self->update({
    attempts => $self->attempts + 1,
    retry_at => time() + exponential_backoff($self->attempts + 1),
    });
    }
  • file addition: Result (d--r------)
    [2.895]
  • file addition: TaskRetries.t (----------)
    [0.210]
    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;