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 )