Disable Cache class's in-process cache on CLI runs; unsafe for long-running daemons.

Should help with situations like IM daemons coming up with false negatives on user settings lookups.
This commit is contained in:
Brion Vibber 2011-09-30 11:21:24 -07:00
parent 1d15037d6a
commit 5f2dcffb60

View File

@ -43,11 +43,23 @@
*/ */
class Cache class Cache
{ {
/**
* @var array additional in-process cache for web requests;
* disabled on CLI, unsafe for long-running daemons
*/
var $_items = array(); var $_items = array();
var $_inlineCache = true;
static $_inst = null; static $_inst = null;
const COMPRESSED = 1; const COMPRESSED = 1;
private function __constructor() {
// Potentially long-running daemons or maintenance scripts
// should not use an in-process cache as it becomes out of
// date.
$this->_inlineCache = (php_sapi_name() != 'cli');
}
/** /**
* Singleton constructor * Singleton constructor
* *
@ -166,7 +178,7 @@ class Cache
common_perf_counter('Cache::get', $key); common_perf_counter('Cache::get', $key);
if (Event::handle('StartCacheGet', array(&$key, &$value))) { if (Event::handle('StartCacheGet', array(&$key, &$value))) {
if (array_key_exists($key, $this->_items)) { if ($this->_inlineCache && array_key_exists($key, $this->_items)) {
$value = unserialize($this->_items[$key]); $value = unserialize($this->_items[$key]);
} }
Event::handle('EndCacheGet', array($key, &$value)); Event::handle('EndCacheGet', array($key, &$value));
@ -193,7 +205,9 @@ class Cache
if (Event::handle('StartCacheSet', array(&$key, &$value, &$flag, if (Event::handle('StartCacheSet', array(&$key, &$value, &$flag,
&$expiry, &$success))) { &$expiry, &$success))) {
if ($this->_inlineCache) {
$this->_items[$key] = serialize($value); $this->_items[$key] = serialize($value);
}
$success = true; $success = true;
@ -244,7 +258,7 @@ class Cache
common_perf_counter('Cache::delete', $key); common_perf_counter('Cache::delete', $key);
if (Event::handle('StartCacheDelete', array(&$key, &$success))) { if (Event::handle('StartCacheDelete', array(&$key, &$success))) {
if (array_key_exists($key, $this->_items)) { if ($this->_inlineCache && array_key_exists($key, $this->_items)) {
unset($this->_items[$key]); unset($this->_items[$key]);
} }
$success = true; $success = true;