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
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs