public function migrate($queue = null)
{
if (null === $queue) {
$list = $this->getQueueNames();
foreach ($list as $item) {
$this->migrate($item);
}
return true;
}
$keyReady = $this->getKeyReady($queue);
$keyDelayed = $this->getKeyDelayed($queue);
$redisJobNamespace = $this->getRedisJobNamespace();
$this->getRedis()->transaction(['cas' => true, 'watch' => [$keyReady, $keyDelayed], 'retry' => 10], function ($tx) use($queue, $keyReady, $keyDelayed, $redisJobNamespace) {
/** @var $tx \Predis\Client */
$time = $this->getTime();
// get expired jobs from "delayed queue"
$jobIds = $tx->zrangebyscore($keyDelayed, '-inf', $time);
if (count($jobIds) > 0) {
// remove jobs from "delayed queue"
$tx->multi();
$tx->zremrangebyscore($keyDelayed, '-inf', $time);
foreach ($jobIds as $id) {
$tx->hset($redisJobNamespace, $id, self::buildPayload($queue, self::STATE_READY));
$tx->rpush($keyReady, $id);
}
}
});
return true;
}