forked from GNUsocial/gnu-social
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:
@@ -51,6 +51,8 @@ if (!defined('STATUSNET')) {
|
||||
|
||||
class MemcachePlugin extends Plugin
|
||||
{
|
||||
static $cacheInitialized = false;
|
||||
|
||||
private $_conn = null;
|
||||
public $servers = array('127.0.0.1;11211');
|
||||
|
||||
@@ -71,10 +73,21 @@ class MemcachePlugin extends Plugin
|
||||
|
||||
function onInitializePlugin()
|
||||
{
|
||||
if (is_null($this->persistent)) {
|
||||
if (self::$cacheInitialized) {
|
||||
$this->persistent = true;
|
||||
} else {
|
||||
// If we're a parent command-line process we need
|
||||
// to be able to close out the connection after
|
||||
// forking, so disable persistence.
|
||||
//
|
||||
// We'll turn it back on again the second time
|
||||
// through which will either be in a child process,
|
||||
// or a single-process script which is switching
|
||||
// configurations.
|
||||
$this->persistent = (php_sapi_name() == 'cli') ? false : true;
|
||||
}
|
||||
$this->_ensureConn();
|
||||
self::$cacheInitialized = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -121,6 +134,24 @@ class MemcachePlugin extends Plugin
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Atomically increment an existing numeric key value.
|
||||
* Existing expiration time will not be changed.
|
||||
*
|
||||
* @param string &$key in; Key to use for lookups
|
||||
* @param int &$step in; Amount to increment (default 1)
|
||||
* @param mixed &$value out; Incremented value, or false if key not set.
|
||||
*
|
||||
* @return boolean hook success
|
||||
*/
|
||||
function onStartCacheIncrement(&$key, &$step, &$value)
|
||||
{
|
||||
$this->_ensureConn();
|
||||
$value = $this->_conn->increment($key, $step);
|
||||
Event::handle('EndCacheIncrement', array($key, $step, $value));
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a value associated with a key
|
||||
*
|
||||
|
Reference in New Issue
Block a user