Restore index forcing in ContribsPager
authorBrad Jorsch <bjorsch@wikimedia.org>
Tue, 6 Mar 2018 17:07:55 +0000 (12:07 -0500)
committerBrad Jorsch <bjorsch@wikimedia.org>
Tue, 6 Mar 2018 17:10:57 +0000 (12:10 -0500)
For now at least this will avoid a filesort for some cases. But it might
start misbehaving again when $wgActorTableSchemaMigrationStage is set to
WRITE_BOTH or WRITE_NEW.

Bug: T189026
Change-Id: Idd987181b17b824fdf1094f5c3b1c689b1792eb0

includes/specials/pagers/ContribsPager.php

index cd04995..520e88d 100644 (file)
@@ -218,8 +218,18 @@ class ContribsPager extends RangeChronologicalPager {
                                $queryInfo['conds'][] = $ipRangeConds;
                        } else {
                                // tables and joins are already handled by Revision::getQueryInfo()
-                               $queryInfo['conds'][] = ActorMigration::newMigration()
-                                       ->getWhere( $this->mDb, 'rev_user', $user )['conds'];
+                               $conds = ActorMigration::newMigration()->getWhere( $this->mDb, 'rev_user', $user );
+                               $queryInfo['conds'][] = $conds['conds'];
+                               // Force the appropriate index to avoid bad query plans (T189026)
+                               if ( count( $conds['orconds'] ) === 1 ) {
+                                       if ( isset( $conds['orconds']['actor'] ) ) {
+                                               // @todo: This will need changing when revision_comment_temp goes away
+                                               $queryInfo['options']['USE INDEX']['temp_rev_user'] = 'actor_timestamp';
+                                       } else {
+                                               $queryInfo['options']['USE INDEX']['revision'] =
+                                                       isset( $conds['orconds']['userid'] ) ? 'user_timestamp' : 'usertext_timestamp';
+                                       }
+                               }
                        }
                }