]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/InProcessCache/InProcessCachePlugin.php
Introduced common_location_shared() to check if location sharing is always,
[quix0rs-gnu-social.git] / plugins / InProcessCache / InProcessCachePlugin.php
index 1b6fbcdbea372f70e7521333349d350ddbe5c17b..4684d0169ff201e0771670c585f6724cde658ae2 100644 (file)
@@ -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';
 
         $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;