require_once(INSTALLDIR.'/classes/Queue_item.php');
require_once(INSTALLDIR.'/classes/Notice.php');
-define('CLAIM_TIMEOUT', 1200);
-
/**
* Queue handling daemon...
*
function __construct($id=null, $daemonize=true, $threads=1, $allsites=false)
{
parent::__construct($id, $daemonize, $threads);
- $this->all = $allsites;
+ $this->allsites = $allsites;
}
/**
{
$this->log(LOG_INFO, 'checking for queued notices');
- $master = new QueueMaster($this->get_id());
- $master->init($this->all);
- $master->service();
+ $master = new QueueMaster($this->get_id(), $this->processManager());
+ $master->init($this->allsites);
+ try {
+ $master->service();
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Unhandled exception: " . $e->getMessage() . ' ' .
+ str_replace("\n", " ", $e->getTraceAsString()));
+ return self::EXIT_ERR;
+ }
$this->log(LOG_INFO, 'finished servicing the queue');
$this->log(LOG_INFO, 'terminating normally');
- return true;
+ return $master->respawn ? self::EXIT_RESTART : self::EXIT_SHUTDOWN;
}
}
class QueueMaster extends IoMaster
{
+ protected $processManager;
+
+ function __construct($id, $processManager)
+ {
+ parent::__construct($id);
+ $this->processManager = $processManager;
+ }
+
/**
- * Initialize IoManagers for the currently configured site
- * which are appropriate to this instance.
+ * Initialize IoManagers which are appropriate to this instance.
*/
function initManagers()
{
- $classes = array();
- if (Event::handle('StartQueueDaemonIoManagers', array(&$classes))) {
- $classes[] = 'QueueManager';
+ $managers = array();
+ if (Event::handle('StartQueueDaemonIoManagers', array(&$managers))) {
+ $qm = QueueManager::get();
+ $qm->setActiveGroup('main');
+ $managers[] = $qm;
+ $managers[] = $this->processManager;
}
- Event::handle('EndQueueDaemonIoManagers', array(&$classes));
+ Event::handle('EndQueueDaemonIoManagers', array(&$managers));
- foreach ($classes as $class) {
- $this->instantiate($class);
+ foreach ($managers as $manager) {
+ $this->instantiate($manager);
}
}
}