Resque_Worker::pruneDeadWorkers PHP Method

pruneDeadWorkers() public method

This is a form of garbage collection to handle cases where the server may have been killed and the Resque workers did not die gracefully and therefore leave state information in Redis.
public pruneDeadWorkers ( )
    public function pruneDeadWorkers()
    {
        $workerPids = $this->workerPids();
        $workers = self::all();
        foreach ($workers as $worker) {
            if (is_object($worker)) {
                list($host, $pid, $queues) = explode(':', (string) $worker, 3);
                if ($host != $this->hostname || in_array($pid, $workerPids) || $pid == getmypid()) {
                    continue;
                }
                $this->logger->log(Psr\Log\LogLevel::INFO, 'Pruning dead worker: {worker}', array('worker' => (string) $worker));
                $worker->unregisterWorker();
            }
        }
    }

Usage Example

コード例 #1
0
ファイル: WorkerTest.php プロジェクト: Balamir/php-resque
 public function testDeadWorkerCleanUpDoesNotCleanUnknownWorkers()
 {
     // Register a bad worker on this machine
     $worker = new Resque_Worker('jobs');
     $worker->setLogger(new Resque_Log());
     $workerId = explode(':', $worker);
     $worker->setId($workerId[0] . ':1:jobs');
     $worker->registerWorker();
     // Register some other false workers
     $worker = new Resque_Worker('jobs');
     $worker->setLogger(new Resque_Log());
     $worker->setId('my.other.host:1:jobs');
     $worker->registerWorker();
     $this->assertEquals(2, count(Resque_Worker::all()));
     $worker->pruneDeadWorkers();
     // my.other.host should be left
     $workers = Resque_Worker::all();
     $this->assertEquals(1, count($workers));
     $this->assertEquals((string) $worker, (string) $workers[0]);
 }
All Usage Examples Of Resque_Worker::pruneDeadWorkers