Merge "ApiQueryLogEvents: Add IGNORE INDEX to avoid MariaDB optimizer bug"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 8 Mar 2019 23:12:20 +0000 (23:12 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 8 Mar 2019 23:12:20 +0000 (23:12 +0000)
1  2 
includes/api/ApiQueryLogEvents.php

@@@ -112,7 -112,7 +112,7 @@@ class ApiQueryLogEvents extends ApiQuer
  
                if ( !is_null( $params['tag'] ) ) {
                        $this->addTables( 'change_tag' );
 -                      $this->addJoinConds( [ 'change_tag' => [ 'INNER JOIN',
 +                      $this->addJoinConds( [ 'change_tag' => [ 'JOIN',
                                [ 'log_id=ct_log_id' ] ] ] );
                        $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
                        try {
                                $db, 'log_user', User::newFromName( $params['user'], false )
                        );
                        $this->addWhere( $q['conds'] );
+                       // T71222: MariaDB's optimizer, at least 10.1.37 and .38, likes to choose a wildly bad plan for
+                       // some reason for this code path. Tell it not to use the wrong index it wants to pick.
+                       $this->addOption( 'IGNORE INDEX', [ 'logging' => [ 'times' ] ] );
                }
  
                $title = $params['title'];