http://www.mediawiki.org/wiki/Special:Code/MediaWiki/100107
Revision: 100107 Author: aaron Date: 2011-10-18 04:05:04 +0000 (Tue, 18 Oct 2011) Log Message: ----------- Migrated html cache purge script to use Maintenance class Modified Paths: -------------- trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.php Removed Paths: ------------- trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.inc Deleted: trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.inc =================================================================== --- trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.inc 2011-10-18 03:21:37 UTC (rev 100106) +++ trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.inc 2011-10-18 04:05:04 UTC (rev 100107) @@ -1,77 +0,0 @@ -<?php - -function list_reviewable_pages( $db, $fileHandle ) { - global $wgFlaggedRevsNamespaces, $wgUseSquid, $wgUseFileCache; - echo "Building list of all reviewable pages to purge ...\n"; - if ( !$wgUseSquid && !$wgUseFileCache ) { - echo "Squid/file cache not enabled ... nothing to purge.\n"; - return; - } elseif ( empty( $wgFlaggedRevsNamespaces ) ) { - echo "There are no reviewable namespaces ... nothing to purge.\n"; - return; - } - $BATCH_SIZE = 1000; - $start = $db->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ ); - $end = $db->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ ); - if ( is_null( $start ) || is_null( $end ) ) { - echo "... page table seems to be empty.\n"; - return; - } - # Do remaining chunk - $end += $BATCH_SIZE - 1; - $blockStart = $start; - $blockEnd = $start + $BATCH_SIZE - 1; - $count = 0; - while ( $blockEnd <= $end ) { - echo "... doing page_id from $blockStart to $blockEnd\n"; - $res = $db->select( 'page', '*', - array( - "page_id BETWEEN $blockStart AND $blockEnd", - 'page_namespace' => $wgFlaggedRevsNamespaces ), - __FUNCTION__ - ); - # Go through and append each purgeable page... - foreach ( $res as $row ) { - $title = Title::newFromRow( $row ); - $fa = FlaggableWikiPage::getTitleInstance( $title ); - if ( $fa->isReviewable() ) { - # Need to purge this page - add to list - fwrite( $fileHandle, $title->getPrefixedDBKey() . "\n" ); - $count++; - } - } - $db->freeResult( $res ); - $blockStart += $BATCH_SIZE - 1; - $blockEnd += $BATCH_SIZE - 1; - wfWaitForSlaves( 5 ); // not really needed - } - echo "List of reviewable pages to purge complete ... {$count} pages\n"; -} - -function purge_reviewable_pages( $db, $fileHandle ) { - global $wgUseSquid, $wgUseFileCache; - echo "Purging squid cache for list of pages to purge ...\n"; - if ( !$wgUseSquid && !$wgUseFileCache ) { - echo "Squid/file cache not enabled ... nothing to purge.\n"; - return; - } - $BATCH_SIZE = 500; - $count = 0; - while ( !feof( $fileHandle ) ) { - $dbKey = trim( fgets( $fileHandle ) ); - if ( $dbKey == '' ) continue; // last line? - $title = Title::newFromDBkey( $dbKey ); - if ( $title ) { - $title->purgeSquid(); // send PURGE - HTMLFileCache::clearFileCache( $title ); // purge poor-mans's squid - $count++; - echo "... $dbKey\n"; - if ( $count % $BATCH_SIZE ) { - wfWaitForSlaves( 5 ); // not really needed - } - } else { - echo "Invalid title - cannot purge: $dbKey\n"; - } - } - echo "Squid/file cache purge of page list complete ... {$count} pages\n"; -} Modified: trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.php =================================================================== --- trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.php 2011-10-18 03:21:37 UTC (rev 100106) +++ trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.php 2011-10-18 04:05:04 UTC (rev 100107) @@ -1,55 +1,132 @@ <?php - +/** + * @ingroup Maintenance + */ if ( getenv( 'MW_INSTALL_PATH' ) ) { - $IP = getenv( 'MW_INSTALL_PATH' ); + $IP = getenv( 'MW_INSTALL_PATH' ); } else { - $IP = dirname(__FILE__).'/../../..'; + $IP = dirname(__FILE__).'/../../..'; } -require "$IP/maintenance/commandLine.inc"; -require dirname(__FILE__) . '/purgeReviewablePages.inc'; -$makeList = isset( $options['makelist'] ); -$purgeList = isset( $options['purgelist'] ); +require_once( "$IP/maintenance/Maintenance.php" ); -if ( isset( $options['help'] ) || ( !$makeList && !$purgeList ) ) { - echo <<<TEXT -Purpose: - Use to purge squid/file cache for all reviewable pages -Usage: - php purgeReviewablePages.php --help - php purgeReviewablePages.php --makelist - php purgeReviewablePages.php --purgelist +class PurgeReviewablePages extends Maintenance { - --help : This help message - --makelist : Build the list of reviewable pages to pagesToPurge.list - --purgelist : Purge the list of pages in pagesToPurge.list + public function __construct() { + $this->mDescription = "Use to purge squid/file cache for all reviewable pages"; + $this->addOption( 'makelist', "Build the list of reviewable pages to pagesToPurge.list", false, false ); + $this->addOption( 'purgelist', "Purge the list of pages in pagesToPurge.list", false, false ); + $this->setBatchSize( 1000 ); + } -TEXT; - exit( 0 ); -} + public function execute() { + $fileName = "pagesToPurge.list"; + // Build the list file... + if ( $this->getOption( 'makelist' ) ) { + $fileHandle = fopen( $fileName, 'w+' ); + if ( !$fileHandle ) { + $this->error( "Can't open file to create purge list.", 1 ); + } + $this->list_reviewable_pages( $fileHandle ); + fclose( $fileHandle ); + // Purge pages on the list file... + } elseif ( $this->getOption( 'purgelist' ) ) { + $fileHandle = fopen( $fileName, 'r' ); + if ( !$fileHandle ) { + $this->error( "Can't open file to read purge list.", 1 ); + } + $this->purge_reviewable_pages( $fileHandle ); + fclose( $fileHandle ); + } else { + $this->error( "No purge list action specified.", 1 ); + } + } -error_reporting( E_ALL ); + protected function list_reviewable_pages( $fileHandle ) { + global $wgFlaggedRevsNamespaces, $wgUseSquid, $wgUseFileCache; -$fileName = "pagesToPurge.list"; + $this->output( "Building list of all reviewable pages to purge ...\n" ); + if ( !$wgUseSquid && !$wgUseFileCache ) { + $this->output( "Squid/file cache not enabled ... nothing to purge.\n" ); + return; + } elseif ( empty( $wgFlaggedRevsNamespaces ) ) { + $this->output( "There are no reviewable namespaces ... nothing to purge.\n" ); + return; + } -if ( $makeList ) { - $db = wfGetDB( DB_MASTER ); - $fileHandle = fopen( $fileName, 'w+' ); - if ( !$fileHandle ) { - echo "Can't open file to create purge list.\n"; - exit( -1 ); + $db = wfGetDB( DB_MASTER ); + + $start = $db->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ ); + $end = $db->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ ); + if ( is_null( $start ) || is_null( $end ) ) { + $this->output( "... page table seems to be empty.\n" ); + return; + } + # Do remaining chunk + $end += $this->mBatchSize - 1; + $blockStart = $start; + $blockEnd = $start + $this->mBatchSize - 1; + + $count = 0; + while ( $blockEnd <= $end ) { + $this->output( "... doing page_id from $blockStart to $blockEnd\n" ); + $res = $db->select( 'page', '*', + array( + "page_id BETWEEN $blockStart AND $blockEnd", + 'page_namespace' => $wgFlaggedRevsNamespaces ), + __FUNCTION__ + ); + # Go through and append each purgeable page... + foreach ( $res as $row ) { + $title = Title::newFromRow( $row ); + $fa = FlaggableWikiPage::getTitleInstance( $title ); + if ( $fa->isReviewable() ) { + # Need to purge this page - add to list + fwrite( $fileHandle, $title->getPrefixedDBKey() . "\n" ); + $count++; + } + } + $db->freeResult( $res ); + $blockStart += $this->mBatchSize - 1; + $blockEnd += $this->mBatchSize - 1; + wfWaitForSlaves( 5 ); // not really needed + } + $this->output( "List of reviewable pages to purge complete ... {$count} pages\n" ); } - list_reviewable_pages( $db, $fileHandle ); - fclose( $fileHandle ); -} -if ( $purgeList ) { - $db = wfGetDB( DB_MASTER ); - $fileHandle = fopen( $fileName, 'r' ); - if ( !$fileHandle ) { - echo "Can't open file to read purge list.\n"; - exit( -1 ); + protected function purge_reviewable_pages( $fileHandle ) { + global $wgUseSquid, $wgUseFileCache; + $this->output( "Purging squid cache for list of pages to purge ...\n" ); + if ( !$wgUseSquid && !$wgUseFileCache ) { + $this->output( "Squid/file cache not enabled ... nothing to purge.\n" ); + return; + } + + $db = wfGetDB( DB_MASTER ); + + $count = 0; + while ( !feof( $fileHandle ) ) { + $dbKey = trim( fgets( $fileHandle ) ); + if ( $dbKey == '' ) { + continue; // last line? + } + $title = Title::newFromDBkey( $dbKey ); + if ( $title ) { + $title->purgeSquid(); // send PURGE + HTMLFileCache::clearFileCache( $title ); // purge poor-mans's squid + $this->output( "... $dbKey\n" ); + + $count++; + if ( ( $count % $this->mBatchSize ) == 0 ) { + wfWaitForSlaves( 5 ); // not really needed + } + } else { + $this->output( "Invalid title - cannot purge: $dbKey\n" ); + } + } + $this->output( "Squid/file cache purge of page list complete ... {$count} pages\n" ); } - purge_reviewable_pages( $db, $fileHandle ); - fclose( $fileHandle ); } + +$maintClass = "PurgeReviewablePages"; +require_once( RUN_MAINTENANCE_IF_MAIN ); _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs