Merge "Update getWithSetCallback() callers to the newer signature"
[lhc/web/wiklou.git] / includes / changetags / ChangeTags.php
index bf8386f..55fc104 100644 (file)
@@ -153,8 +153,10 @@ class ChangeTags {
         *
         * @since 1.25
         */
-       public static function updateTags( $tagsToAdd, $tagsToRemove, &$rc_id = null,
-               &$rev_id = null, &$log_id = null, $params = null ) {
+       public static function updateTags(
+               $tagsToAdd, $tagsToRemove,
+               &$rc_id = null, &$rev_id = null, &$log_id = null, $params = null
+       ) {
 
                $tagsToAdd = array_filter( (array)$tagsToAdd ); // Make sure we're submitting all tags...
                $tagsToRemove = array_filter( (array)$tagsToRemove );
@@ -169,18 +171,28 @@ class ChangeTags {
                // Might as well look for rcids and so on.
                if ( !$rc_id ) {
                        // Info might be out of date, somewhat fractionally, on slave.
+                       // LogEntry/LogPage and WikiPage match rev/log/rc timestamps,
+                       // so use that relation to avoid full table scans.
                        if ( $log_id ) {
                                $rc_id = $dbw->selectField(
-                                       'recentchanges',
+                                       array( 'logging', 'recentchanges' ),
                                        'rc_id',
-                                       array( 'rc_logid' => $log_id ),
+                                       array(
+                                               'log_id' => $log_id,
+                                               'rc_timestamp = log_timestamp',
+                                               'rc_logid = log_id'
+                                       ),
                                        __METHOD__
                                );
                        } elseif ( $rev_id ) {
                                $rc_id = $dbw->selectField(
-                                       'recentchanges',
+                                       array( 'revision', 'recentchanges' ),
                                        'rc_id',
-                                       array( 'rc_this_oldid' => $rev_id ),
+                                       array(
+                                               'rev_id' => $rev_id,
+                                               'rc_timestamp = rev_timestamp',
+                                               'rc_this_oldid = rev_id'
+                                       ),
                                        __METHOD__
                                );
                        }
@@ -1078,15 +1090,19 @@ class ChangeTags {
        public static function listExtensionActivatedTags() {
                return ObjectCache::getMainWANInstance()->getWithSetCallback(
                        wfMemcKey( 'active-tags' ),
-                       function() {
+                       300,
+                       function ( $oldValue, &$ttl, array &$setOpts ) {
+                               $setOpts += Database::getCacheSetOptions( wfGetDB( DB_SLAVE ) );
+
                                // Ask extensions which tags they consider active
                                $extensionActive = array();
                                Hooks::run( 'ChangeTagsListActive', array( &$extensionActive ) );
                                return $extensionActive;
                        },
-                       300,
-                       array( wfMemcKey( 'active-tags' ) ),
-                       array( 'lockTSE' => INF )
+                       array(
+                               'checkKeys' => array( wfMemcKey( 'active-tags' ) ),
+                               'lockTSE' => INF
+                       )
                );
        }
 
@@ -1118,16 +1134,20 @@ class ChangeTags {
 
                return ObjectCache::getMainWANInstance()->getWithSetCallback(
                        wfMemcKey( 'valid-tags-db' ),
-                       function() use ( $fname ) {
+                       300,
+                       function ( $oldValue, &$ttl, array &$setOpts ) use ( $fname ) {
                                $dbr = wfGetDB( DB_SLAVE );
-                               $tags = $dbr->selectFieldValues(
-                                       'valid_tag', 'vt_tag', array(), $fname );
+
+                               $setOpts += Database::getCacheSetOptions( $dbr );
+
+                               $tags = $dbr->selectFieldValues( 'valid_tag', 'vt_tag', array(), $fname );
 
                                return array_filter( array_unique( $tags ) );
                        },
-                       300,
-                       array( wfMemcKey( 'valid-tags-db' ) ),
-                       array( 'lockTSE' => INF )
+                       array(
+                               'checkKeys' => array( wfMemcKey( 'valid-tags-db' ) ),
+                               'lockTSE' => INF
+                       )
                );
        }
 
@@ -1143,14 +1163,18 @@ class ChangeTags {
        public static function listExtensionDefinedTags() {
                return ObjectCache::getMainWANInstance()->getWithSetCallback(
                        wfMemcKey( 'valid-tags-hook' ),
-                       function() {
+                       300,
+                       function ( $oldValue, &$ttl, array &$setOpts ) {
+                               $setOpts += Database::getCacheSetOptions( wfGetDB( DB_SLAVE ) );
+
                                $tags = array();
                                Hooks::run( 'ListDefinedTags', array( &$tags ) );
                                return array_filter( array_unique( $tags ) );
                        },
-                       300,
-                       array( wfMemcKey( 'valid-tags-hook' ) ),
-                       array( 'lockTSE' => INF )
+                       array(
+                               'checkKeys' => array( wfMemcKey( 'valid-tags-hook' ) ),
+                               'lockTSE' => INF
+                       )
                );
        }
 
@@ -1200,10 +1224,12 @@ class ChangeTags {
                $fname = __METHOD__;
                $cachedStats = ObjectCache::getMainWANInstance()->getWithSetCallback(
                        wfMemcKey( 'change-tag-statistics' ),
-                       function() use ( $fname ) {
-                               $out = array();
-
+                       300,
+                       function ( $oldValue, &$ttl, array &$setOpts ) use ( $fname ) {
                                $dbr = wfGetDB( DB_SLAVE, 'vslow' );
+
+                               $setOpts += Database::getCacheSetOptions( $dbr );
+
                                $res = $dbr->select(
                                        'change_tag',
                                        array( 'ct_tag', 'hitcount' => 'count(*)' ),
@@ -1212,15 +1238,17 @@ class ChangeTags {
                                        array( 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount DESC' )
                                );
 
+                               $out = array();
                                foreach ( $res as $row ) {
                                        $out[$row->ct_tag] = $row->hitcount;
                                }
 
                                return $out;
                        },
-                       300,
-                       array( wfMemcKey( 'change-tag-statistics' ) ),
-                       array( 'lockTSE' => INF )
+                       array(
+                               'checkKeys' => array( wfMemcKey( 'change-tag-statistics' ) ),
+                               'lockTSE' => INF
+                       )
                );
 
                return $cachedStats;