X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FInProcessCache%2FInProcessCachePlugin.php;h=4bcfb8e2da3ff025103cad9955b425d1a83dceba;hb=8c9efff1ace2d5e466691abf038f096eb5dd5f51;hp=1b6fbcdbea372f70e7521333349d350ddbe5c17b;hpb=99f3964394e18af6c139c5a1c804ced727e5b1a4;p=quix0rs-gnu-social.git diff --git a/plugins/InProcessCache/InProcessCachePlugin.php b/plugins/InProcessCache/InProcessCachePlugin.php index 1b6fbcdbea..4bcfb8e2da 100644 --- a/plugins/InProcessCache/InProcessCachePlugin.php +++ b/plugins/InProcessCache/InProcessCachePlugin.php @@ -39,7 +39,7 @@ if (!defined('STATUSNET')) { * * This plugin adds an extra level of in-process caching to any regular * cache system like APC, XCache, or Memcache. - * + * * Note that since most caching plugins return false for StartCache* * methods, you should add this plugin before them, i.e. * @@ -53,15 +53,30 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class InProcessCachePlugin extends Plugin { private $_items = array(); private $_hits = array(); + private $active; + + /** + * Constructor checks if it's safe to use the in-process cache. + * On CLI scripts, we'll disable ourselves to avoid data corruption + * due to keeping stale data around. + * + * On web requests we'll roll the dice; they're short-lived so have + * less chance of stale data. Race conditions are still possible, + * so beware! + */ + function __construct() + { + parent::__construct(); + $this->active = (PHP_SAPI != 'cli'); + } /** * Get an item from the cache - * + * * Called before other cache systems are called (iif this * plugin was loaded correctly, see class comment). If we * have the data, return it, and don't hit the other cache @@ -72,10 +87,9 @@ class InProcessCachePlugin extends Plugin * * @return boolean false if found, else true */ - function onStartCacheGet(&$key, &$value) { - if (array_key_exists($key, $this->_items)) { + if ($this->active && array_key_exists($key, $this->_items)) { $value = $this->_items[$key]; if (array_key_exists($key, $this->_hits)) { $this->_hits[$key]++; @@ -100,11 +114,10 @@ class InProcessCachePlugin extends Plugin * * @return boolean hook value, true */ - function onEndCacheGet($key, &$value) { - if (!array_key_exists($key, $this->_items) || - $this->_items[$key] != $value) { + if ($this->active && (!array_key_exists($key, $this->_items) || + $this->_items[$key] != $value)) { $this->_items[$key] = $value; } return true; @@ -112,7 +125,7 @@ class InProcessCachePlugin extends Plugin /** * Called at the end of setting a cache element - * + * * Always set the cache element; may overwrite existing * data. * @@ -123,10 +136,11 @@ class InProcessCachePlugin extends Plugin * * @return boolean true */ - function onEndCacheSet($key, $value, $flag, $expiry) { - $this->_items[$key] = $value; + if ($this->active) { + $this->_items[$key] = $value; + } return true; } @@ -141,10 +155,9 @@ class InProcessCachePlugin extends Plugin * * @return boolean true */ - function onStartCacheDelete(&$key, &$success) { - if (array_key_exists($key, $this->_items)) { + if ($this->active && array_key_exists($key, $this->_items)) { unset($this->_items[$key]); } return true; @@ -157,16 +170,16 @@ class InProcessCachePlugin extends Plugin * * @return boolean true */ - - function onPluginVersion(&$versions) + function onPluginVersion(array &$versions) { - $url = 'http://status.net/wiki/Plugin:InProcessCache'; + $url = 'https://git.gnu.io/gnu/gnu-social/tree/master/plugins/InProcessCache'; $versions[] = array('name' => 'InProcessCache', - 'version' => STATUSNET_VERSION, + 'version' => GNUSOCIAL_VERSION, 'author' => 'Evan Prodromou', 'homepage' => $url, 'description' => + // TRANS: Plugin dscription. _m('Additional in-process cache for plugins.')); return true; } @@ -179,17 +192,16 @@ class InProcessCachePlugin extends Plugin * * @return boolean true */ - function cleanup() { - if (common_config('inprocess', 'stats')) { - $this->log(LOG_INFO, "cache size: " . + if ($this->active && common_config('inprocess', 'stats')) { + $this->log(LOG_INFO, "cache size: " . count($this->_items)); $sum = 0; foreach ($this->_hits as $hitcount) { $sum += $hitcount; } - $this->log(LOG_INFO, $sum . " hits on " . + $this->log(LOG_INFO, $sum . " hits on " . count($this->_hits) . " keys"); } return true;