Merge "Limit DELETE in purgeExpiredRestrictions() and use primary key"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 20 May 2016 02:48:00 +0000 (02:48 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 20 May 2016 02:48:00 +0000 (02:48 +0000)
1  2 
includes/Title.php

diff --combined includes/Title.php
@@@ -908,9 -908,7 +908,9 @@@ class Title implements LinkTarget 
         * @return string Content model id
         */
        public function getContentModel( $flags = 0 ) {
 -              if ( !$this->mContentModel && $this->getArticleID( $flags ) ) {
 +              if ( ( !$this->mContentModel || $flags === Title::GAID_FOR_UPDATE ) &&
 +                      $this->getArticleID( $flags )
 +              ) {
                        $linkCache = LinkCache::singleton();
                        $linkCache->addLinkObj( $this ); # in case we already had an article ID
                        $this->mContentModel = $linkCache->getGoodLinkFieldObj( $this, 'model' );
  
        /**
         * Purge expired restrictions from the page_restrictions table
+        *
+        * This will purge no more than $wgUpdateRowsPerQuery page_restrictions rows
         */
        static function purgeExpiredRestrictions() {
                if ( wfReadOnly() ) {
                        wfGetDB( DB_MASTER ),
                        __METHOD__,
                        function ( IDatabase $dbw, $fname ) {
-                               $dbw->delete(
+                               $config = MediaWikiServices::getInstance()->getMainConfig();
+                               $ids = $dbw->selectFieldValues(
                                        'page_restrictions',
+                                       'pr_id',
                                        [ 'pr_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ],
-                                       $fname
+                                       $fname,
+                                       [ 'LIMIT' => $config->get( 'UpdateRowsPerQuery' ) ] // T135470
                                );
+                               if ( $ids ) {
+                                       $dbw->delete( 'page_restrictions', [ 'pr_id' => $ids ], $fname );
+                               }
+                       }
+               ) );
+               DeferredUpdates::addUpdate( new AtomicSectionUpdate(
+                       wfGetDB( DB_MASTER ),
+                       __METHOD__,
+                       function ( IDatabase $dbw, $fname ) {
                                $dbw->delete(
                                        'protected_titles',
                                        [ 'pt_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ],