Merge "User: Migrate from foreign cache to global cache for UserRightsProxy"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 2 Nov 2015 23:51:52 +0000 (23:51 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 2 Nov 2015 23:51:52 +0000 (23:51 +0000)
includes/User.php
includes/UserRightsProxy.php
includes/objectcache/ObjectCache.php

index eb3ab9d..b09e4e4 100644 (file)
@@ -387,6 +387,25 @@ class User implements IDBAccessObject {
                return true;
        }
 
+       /**
+        * @since 1.27
+        * @param string $wikiId
+        * @param integer $userId
+        */
+       public static function purge( $wikiId, $userId ) {
+               $cache = ObjectCache::getMainWANInstance();
+               $cache->delete( $cache->makeGlobalKey( 'user', 'id', $wikiId, $userId ) );
+       }
+
+       /**
+        * @since 1.27
+        * @param WANObjectCache $cache
+        * @return string
+        */
+       protected function getCacheKey( WANObjectCache $cache ) {
+               return $cache->makeGlobalKey( 'user', 'id', wfWikiID(), $this->mId );
+       }
+
        /**
         * Load user data from shared cache, given mId has already been set.
         *
@@ -399,8 +418,8 @@ class User implements IDBAccessObject {
                        return false;
                }
 
-               $key = wfMemcKey( 'user', 'id', $this->mId );
-               $data = ObjectCache::getMainWANInstance()->get( $key );
+               $cache = ObjectCache::getMainWANInstance();
+               $data = $cache->get( $this->getCacheKey( $cache ) );
                if ( !is_array( $data ) || $data['mVersion'] < self::VERSION ) {
                        // Object is expired
                        return false;
@@ -439,7 +458,7 @@ class User implements IDBAccessObject {
                $opts = Database::getCacheSetOptions( wfGetDB( DB_SLAVE ) );
 
                $cache = ObjectCache::getMainWANInstance();
-               $key = wfMemcKey( 'user', 'id', $this->mId );
+               $key = $this->getCacheKey( $cache );
                $cache->set( $key, $data, $cache::TTL_HOUR, $opts );
        }
 
@@ -2228,17 +2247,17 @@ class User implements IDBAccessObject {
         * @param string $mode Use 'refresh' to clear now; otherwise before DB commit
         */
        public function clearSharedCache( $mode = 'changed' ) {
-               $id = $this->getId();
-               if ( !$id ) {
+               if ( !$this->getId() ) {
                        return;
                }
 
-               $key = wfMemcKey( 'user', 'id', $id );
+               $cache = ObjectCache::getMainWANInstance();
+               $key = $this->getCacheKey( $cache );
                if ( $mode === 'refresh' ) {
-                       ObjectCache::getMainWANInstance()->delete( $key, 1 );
+                       $cache->delete( $key, 1 );
                } else {
-                       wfGetDB( DB_MASTER )->onTransactionPreCommitOrIdle( function() use ( $key ) {
-                               ObjectCache::getMainWANInstance()->delete( $key );
+                       wfGetDB( DB_MASTER )->onTransactionPreCommitOrIdle( function() use ( $cache, $key ) {
+                               $cache->delete( $key );
                        } );
                }
        }
index 3a3eb53..e686ae3 100644 (file)
@@ -278,9 +278,10 @@ class UserRightsProxy {
                        array( 'user_id' => $this->id ),
                        __METHOD__ );
 
-               $key = wfForeignMemcKey( $this->database, false, 'user', 'id', $this->id );
-               $this->db->onTransactionPreCommitOrIdle( function() use ( $key ) {
-                       ObjectCache::getMainWANInstance()->delete( $key );
+               $wikiId = $this->db->getWikiID();
+               $userId = $this->id;
+               $this->db->onTransactionPreCommitOrIdle( function() use ( $wikiId, $userId ) {
+                       User::purge( $wikiId, $userId );
                } );
        }
 }
index 217b61f..b4aecee 100644 (file)
@@ -138,19 +138,14 @@ class ObjectCache {
         * @return string
         */
        public static function getDefaultKeyspace() {
-               global $wgCachePrefix, $wgDBname, $wgDBprefix;
+               global $wgCachePrefix;
 
                $keyspace = $wgCachePrefix;
                if ( is_string( $keyspace ) && $keyspace !== '' ) {
                        return $keyspace;
                }
 
-               $keyspace = $wgDBname;
-               if ( is_string( $wgDBprefix ) && $wgDBprefix !== '' ) {
-                       $keyspace .= '-' . $wgDBprefix;
-               }
-
-               return $keyspace;
+               return wfWikiID();
        }
 
        /**