From: Siebrand Mazeland Date: Fri, 12 Sep 2008 08:06:00 +0000 (+0000) Subject: Revert 40741. Causes "Division by zero in includes/LinksUpdate.php on line 210" X-Git-Tag: 1.31.0-rc.0~45355 X-Git-Url: http://git.cyclocoop.org/%24action?a=commitdiff_plain;h=a3b1485c47c9ac1090d588b23699dc44d3a69a35;p=lhc%2Fweb%2Fwiklou.git Revert 40741. Causes "Division by zero in includes/LinksUpdate.php on line 210" --- diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 19d349ef23..30ce952b30 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -146,7 +146,6 @@ $wgAutoloadLocalClasses = array( 'RdfMetaData' => 'includes/Metadata.php', 'RecentChange' => 'includes/RecentChange.php', 'RefreshLinksJob' => 'includes/RefreshLinksJob.php', - 'RefreshLinksJob2' => 'includes/RefreshLinksJob.php', 'RegexlikeReplacer' => 'includes/StringUtils.php', 'ReplacementArray' => 'includes/StringUtils.php', 'Replacer' => 'includes/StringUtils.php', diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index d149d9fcdd..eda1a6fe8a 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1621,7 +1621,6 @@ $wgAllowSlowParserFunctions = false; */ $wgJobClasses = array( 'refreshLinks' => 'RefreshLinksJob', - 'refreshLinks2' => 'RefreshLinksJob2', 'htmlCacheUpdate' => 'HTMLCacheUpdateJob', 'html_cache_update' => 'HTMLCacheUpdateJob', // backwards-compatible 'sendMail' => 'EmaillingJob', diff --git a/includes/LinksUpdate.php b/includes/LinksUpdate.php index a30cd94f0a..696ca8e7da 100644 --- a/includes/LinksUpdate.php +++ b/includes/LinksUpdate.php @@ -193,46 +193,34 @@ class LinksUpdate { } function queueRecursiveJobs() { - global $wgUpdateRowsPerJob; wfProfileIn( __METHOD__ ); + $batchSize = 100; $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( 'templatelinks', - array( 'tl_from' ), - array( + $res = $dbr->select( array( 'templatelinks', 'page' ), + array( 'page_namespace', 'page_title' ), + array( + 'page_id=tl_from', 'tl_namespace' => $this->mTitle->getNamespace(), 'tl_title' => $this->mTitle->getDBkey() ), __METHOD__ ); - $numRows = $res->numRows(); - $numBatches = ceil( $numRows / $wgUpdateRowsPerJob ); - $realBatchSize = $numRows / $numBatches; - $start = false; - $jobs = array(); - do { - for( $i = 0; $i <= $realBatchSize - 1; $i++ ) { - $row = $res->fetchRow(); - if( $row ) { - $id = $row[0]; - } else { - $id = false; + $done = false; + while ( !$done ) { + $jobs = array(); + for ( $i = 0; $i < $batchSize; $i++ ) { + $row = $dbr->fetchObject( $res ); + if ( !$row ) { + $done = true; break; } + $title = Title::makeTitle( $row->page_namespace, $row->page_title ); + $jobs[] = new RefreshLinksJob( $title, '' ); } - $params = array( - 'start' => $start, - 'end' => ( $id !== false ? $id - 1 : false ), - ); - $jobs[] = new RefreshLinksJob2( $this->mTitle, $params ); - - $start = $id; - } while ( $start ); - + Job::batchInsert( $jobs ); + } $dbr->freeResult( $res ); - - Job::batchInsert( $jobs ); - wfProfileOut( __METHOD__ ); } diff --git a/includes/RefreshLinksJob.php b/includes/RefreshLinksJob.php index 1c119a8dd4..f95e5a505e 100644 --- a/includes/RefreshLinksJob.php +++ b/includes/RefreshLinksJob.php @@ -47,87 +47,3 @@ class RefreshLinksJob extends Job { return true; } } - -/** - * Background job to update links for a given title. - * Newer version for high use templates. - * - * @ingroup JobQueue - */ -class RefreshLinksJob2 extends Job { - - function __construct( $title, $params, $id = 0 ) { - parent::__construct( 'refreshLinks2', $title, $params, $id ); - } - - /** - * Run a refreshLinks2 job - * @return boolean success - */ - function run() { - global $wgParser; - - wfProfileIn( __METHOD__ ); - - $linkCache = LinkCache::singleton(); - $linkCache->clear(); - - if( is_null( $this->title ) ) { - $this->error = "refreshLinks2: Invalid title"; - wfProfileOut( __METHOD__ ); - return false; - } - if( !isset($this->params['start']) || !isset($this->params['end']) ) { - $this->error = "refreshLinks2: Invalid params"; - wfProfileOut( __METHOD__ ); - return false; - } - $start = intval($this->params['start']); - $end = intval($this->params['end']); - - $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( array( 'templatelinks', 'page' ), - array( 'page_namespace', 'page_title' ), - array( - 'page_id=tl_from', - "tl_from >= '$start'", - "tl_from <= '$end'", - 'tl_namespace' => $this->title->getNamespace(), - 'tl_title' => $this->title->getDBkey() - ), __METHOD__ - ); - - # Not suitable for page load triggered job running! - # Gracefully switch to refreshLinks jobs if this happens. - if( php_sapi_name() != 'cli' ) { - $jobs = array(); - while( $row = $dbr->fetchObject( $res ) ) { - $title = Title::makeTitle( $row->page_namespace, $row->page_title ); - $jobs[] = new RefreshLinksJob( $title, '' ); - } - Job::batchInsert( $jobs ); - return true; - } - # Re-parse each page that transcludes this page and update their tracking links... - while( $row = $dbr->fetchObject( $res ) ) { - $title = Title::makeTitle( $row->page_namespace, $row->page_title ); - $revision = Revision::newFromTitle( $title ); - if ( !$revision ) { - $this->error = 'refreshLinks: Article not found "' . $title->getPrefixedDBkey() . '"'; - wfProfileOut( __METHOD__ ); - return false; - } - wfProfileIn( __METHOD__.'-parse' ); - $options = new ParserOptions; - $parserOutput = $wgParser->parse( $revision->getText(), $title, $options, true, true, $revision->getId() ); - wfProfileOut( __METHOD__.'-parse' ); - wfProfileIn( __METHOD__.'-update' ); - $update = new LinksUpdate( $title, $parserOutput, false ); - $update->doUpdate(); - wfProfileOut( __METHOD__.'-update' ); - wfProfileOut( __METHOD__ ); - } - - return true; - } -}