Minion-Backend-SQLite
view release on metacpan or search on metacpan
lib/Minion/Backend/SQLite.pm view on Meta::CPAN
until ($remaining = $end - steady_time) <= 0
or $job = $self->_try($id, $options);
}
return $job || $self->_try($id, $options);
}
sub dispatch_schedules {
my $self = shift;
my $db = $self->sqlite->db;
my $timeout = $db->dbh->sqlite_busy_timeout // 0;
$db->dbh->sqlite_busy_timeout(1000);
my ($tx, $errored, $error);
{
local $@;
unless (eval { $tx = $db->begin('immediate'); 1 }) {
my $errcode = $db->dbh->err;
if ($errcode and $errcode == SQLITE_BUSY) {
$db->dbh->sqlite_busy_timeout($timeout);
$db->dbh->rollback; # clear internal transaction state
return [];
} else {
$errored = 1;
$error = $@;
}
}
}
$db->dbh->sqlite_busy_timeout($timeout);
die $error if $errored;
my $due = $db->query(
q{select id, args, attempts, cron, expire, lax, name, strftime('%s',next_run) as next_run,
strftime('%s','now') as now, notes, priority, queue, task
from minion_schedules where next_run <= datetime('now') and not paused}
)->expand(json => [qw(args notes)])->hashes;
my @dispatched;
for my $s (@$due) {
( run in 1.305 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )