]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/cache.php
Translator documentation updated/added.
[quix0rs-gnu-social.git] / lib / cache.php
index 3d78c79adb2ba5f34003c3f69c60ce893a3b3d3f..eb4eb666567a9f21bf7b51e53c09bdf2a9390dd4 100644 (file)
@@ -86,6 +86,55 @@ class Cache
         return 'statusnet:' . $base_key . ':' . $extra;
     }
 
+    /**
+     * Create a cache key for data dependent on code
+     *
+     * For cache elements that are dependent on changes in code, this creates
+     * a more-or-less fingerprint of the current running code and adds it to
+     * the cache key. In the case of an upgrade of core, or addition or
+     * removal of plugins, a new unique fingerprint is generated and used.
+     * 
+     * There can still be problems with a) differences in versions of the 
+     * plugins and b) people running code between official versions. This is
+     * usually a problem only for experienced users like developers, who know
+     * how to clear their cache.
+     *
+     * For sites that run code between versions (like the status.net cloud),
+     * there's an additional build number configuration setting.
+     * 
+     * @param string $extra the real part of the key
+     *
+     * @return string full key
+     */
+    
+    static function codeKey($extra)
+    {
+        static $prefix = null;
+       
+        if (empty($prefix)) {
+           
+            $plugins     = StatusNet::getActivePlugins();
+            $names       = array();
+           
+            foreach ($plugins as $plugin) {
+                $names[] = $plugin[0];
+            }
+           
+            $names = array_unique($names);
+            asort($names);
+           
+            // Unique enough.
+       
+            $uniq = crc32(implode(',', $names));
+
+            $build = common_config('site', 'build');
+
+            $prefix = STATUSNET_VERSION.':'.$build.':'.$uniq;
+        }
+       
+        return Cache::key($prefix.':'.$extra);
+    }
+    
     /**
      * Make a string suitable for use as a key
      *
@@ -115,6 +164,7 @@ class Cache
     {
         $value = false;
 
+        common_perf_counter('Cache::get', $key);
         if (Event::handle('StartCacheGet', array(&$key, &$value))) {
             if (array_key_exists($key, $this->_items)) {
                 $value = unserialize($this->_items[$key]);
@@ -139,6 +189,7 @@ class Cache
     {
         $success = false;
 
+        common_perf_counter('Cache::set', $key);
         if (Event::handle('StartCacheSet', array(&$key, &$value, &$flag,
                                                  &$expiry, &$success))) {
 
@@ -165,6 +216,7 @@ class Cache
     function increment($key, $step=1)
     {
         $value = false;
+        common_perf_counter('Cache::increment', $key);
         if (Event::handle('StartCacheIncrement', array(&$key, &$step, &$value))) {
             // Fallback is not guaranteed to be atomic,
             // and may original expiry value.
@@ -190,6 +242,7 @@ class Cache
     {
         $success = false;
 
+        common_perf_counter('Cache::delete', $key);
         if (Event::handle('StartCacheDelete', array(&$key, &$success))) {
             if (array_key_exists($key, $this->_items)) {
                 unset($this->_items[$key]);