Stomp queue restructuring for mass scalability:
- Multiplexing queues into groups and for multiple sites. - Sharing vs breakout configurable per site and per queue via $config['queue']['breakout'] - Detect how many times a message is redelivered, discard if it's killed too many daemons - count configurable with $config['queue']['max_retries'] - can dump the items to files in $config['queue']['dead_letter_dir'] Queue daemon memory & resource leak fixes: - avoid unnecessary reconnections to memcached server (switch persistent connections back in on second initialization, assuming it's child process) - monkey-patch for leaky .ini loads in DB_DataObject::databaseStructure() - was leaking 200k per active switch - applied leak fixes to Status_network as well, using intermediate base Safe_DataObject for both it and Memcache_DataObject Misc queue fixes: - correct handling of child processes exiting due to signal termination instead of regular exit - shutdown instead of infinite respawn loop if we're already past the soft memory limit at startup - Added --all option for xmppdaemon... still opens one xmpp connection per site that has xmpp active Cache updates: - add Cache::increment() method with native support for memcached atomic increment
This commit is contained in:
@@ -74,8 +74,6 @@ require_once(INSTALLDIR.'/lib/daemon.php');
|
||||
require_once(INSTALLDIR.'/classes/Queue_item.php');
|
||||
require_once(INSTALLDIR.'/classes/Notice.php');
|
||||
|
||||
define('CLAIM_TIMEOUT', 1200);
|
||||
|
||||
/**
|
||||
* Queue handling daemon...
|
||||
*
|
||||
@@ -92,7 +90,7 @@ class QueueDaemon extends SpawningDaemon
|
||||
function __construct($id=null, $daemonize=true, $threads=1, $allsites=false)
|
||||
{
|
||||
parent::__construct($id, $daemonize, $threads);
|
||||
$this->all = $allsites;
|
||||
$this->allsites = $allsites;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -108,7 +106,7 @@ class QueueDaemon extends SpawningDaemon
|
||||
$this->log(LOG_INFO, 'checking for queued notices');
|
||||
|
||||
$master = new QueueMaster($this->get_id());
|
||||
$master->init($this->all);
|
||||
$master->init($this->allsites);
|
||||
try {
|
||||
$master->service();
|
||||
} catch (Exception $e) {
|
||||
@@ -133,14 +131,16 @@ class QueueMaster extends IoMaster
|
||||
*/
|
||||
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;
|
||||
}
|
||||
Event::handle('EndQueueDaemonIoManagers', array(&$classes));
|
||||
Event::handle('EndQueueDaemonIoManagers', array(&$managers));
|
||||
|
||||
foreach ($classes as $class) {
|
||||
$this->instantiate($class);
|
||||
foreach ($managers as $manager) {
|
||||
$this->instantiate($manager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user