From 7cfecb0f2c0d57e062561841005efeee705cc2f7 Mon Sep 17 00:00:00 2001 From: Antoine Musso Date: Sun, 14 Aug 2011 08:51:36 +0000 Subject: [PATCH] (bug 28273) Merge purgeList and purgeNamespace scripts Nothing fancy, just copy pasted from purgeNamespace into purgeList. This need to be in 1.18 to avoid publishing purgeNamespace to everyone and removing it in 1.19 =) --- maintenance/purgeList.php | 79 ++++++++++++++++++++++++++-- maintenance/purgeNamespace.php | 96 ---------------------------------- 2 files changed, 74 insertions(+), 101 deletions(-) delete mode 100644 maintenance/purgeNamespace.php diff --git a/maintenance/purgeList.php b/maintenance/purgeList.php index 9072b4215c..adfcbd7c3b 100644 --- a/maintenance/purgeList.php +++ b/maintenance/purgeList.php @@ -27,9 +27,21 @@ class PurgeList extends Maintenance { parent::__construct(); $this->mDescription = "Send purge requests for listed pages to squid"; $this->addOption( 'purge', 'Whether to update page_touched.' , false, false ); + $this->addOption( 'namespace', 'Namespace number', false, true ); + $this->setBatchSize( 100 ); } public function execute() { + if( $this->hasOption( 'namespace' ) ) { + $this->purgeNamespace(); + } else { + $this->purgeList(); + } + $this->output( "Done!\n" ); + } + + /** Purge URL coming from stdin */ + private function purgeList() { $stdin = $this->getStdin(); $urls = array(); @@ -51,13 +63,70 @@ class PurgeList extends Maintenance { } } } + $this->sendPurgeRequest( $urls ); + } + + /** Purge a namespace given by --namespace */ + private function purgeNamespace() { + $dbr = wfGetDB( DB_SLAVE ); + $ns = $dbr->addQuotes( $this->getOption( 'namespace') ); + + $result = $dbr->select( + array( 'page' ), + array( 'page_namespace', 'page_title' ), + array( "page_namespace = $ns" ), + __METHOD__, + array( 'ORDER BY' => 'page_id' ) + ); + + $start = 0; + $end = $dbr->numRows( $result ); + $this->output( "Will purge $end pages from namespace $ns\n" ); + + # Do remaining chunk + $end += $this->mBatchSize - 1; + $blockStart = $start; + $blockEnd = $start + $this->mBatchSize - 1; + + while( $blockEnd <= $end ) { + # Select pages we will purge: + $result = $dbr->select( + array( 'page' ), + array( 'page_namespace', 'page_title' ), + array( "page_namespace = $ns" ), + __METHOD__, + array( # conditions + 'ORDER BY' => 'page_id', + 'LIMIT' => $this->mBatchSize, + 'OFFSET' => $blockStart, + ) + ); + # Initialize/reset URLs to be purged + $urls = array(); + foreach( $result as $row ) { + $title = Title::makeTitle( $row->page_namespace, $row->page_title ); + $url = $title->getFullUrl(); + $urls[] = $url; + } + + $this->sendPurgeRequest( $urls ); + + $blockStart += $this->mBatchSize; + $blockEnd += $this->mBatchSize; + } + } + + /** + * Helper to purge an array of $urls + * @param $urls array List of URLS to purge from squids + */ + private function sendPurgeRequest( $urls ) { + $this->output( "Purging " . count( $urls ). " urls\n" ); + $u = new SquidUpdate( $urls ); + $u->doUpdate(); + } - $this->output( "Purging " . count( $urls ) . " urls...\n" ); - $u = new SquidUpdate( $urls ); - $u->doUpdate(); - $this->output( "Done!\n" ); - } } $maintClass = "PurgeList"; diff --git a/maintenance/purgeNamespace.php b/maintenance/purgeNamespace.php deleted file mode 100644 index 0759ca0f3c..0000000000 --- a/maintenance/purgeNamespace.php +++ /dev/null @@ -1,96 +0,0 @@ -mDescription = "Purge squids pages for a given namespace"; - $this->addOption( "namespace", "Namespace number", true, true ); - $this->setBatchSize( 100 ); - parent::__construct(); - } - - public function execute() { - $dbr = wfGetDB( DB_SLAVE ); - $ns = $dbr->addQuotes( $this->getOption( 'namespace') ); - - $result = $dbr->select( - array( 'page' ), - array( 'page_namespace', 'page_title' ), - array( "page_namespace = $ns" ), - __METHOD__, - array( 'ORDER BY' => 'page_id' ) - ); - - $start = 0; - $end = $dbr->numRows( $result ); - $this->output( "Will purge $end pages from namespace $ns\n" ); - - # Do remaining chunk - $end += $this->mBatchSize - 1; - $blockStart = $start; - $blockEnd = $start + $this->mBatchSize - 1; - - while( $blockEnd <= $end ) { - # Select pages we will purge: - $result = $dbr->select( - array( 'page' ), - array( 'page_namespace', 'page_title' ), - array( "page_namespace = $ns" ), - __METHOD__, - array( # conditions - 'ORDER BY' => 'page_id', - 'LIMIT' => $this->mBatchSize, - 'OFFSET' => $blockStart, - ) - ); - - # Initialize/reset URLs to be purged - $urls = array(); - foreach( $result as $row ) { - $title = Title::makeTitle( $row->page_namespace, $row->page_title ); - $url = $title->getFullUrl(); - $urls[] = $url; - } - - $this->sendPurgeRequest( $urls ); - - $blockStart += $this->mBatchSize; - $blockEnd += $this->mBatchSize; - } - - $this->output( "Done!\n" ); - } - - private function sendPurgeRequest( $urls ) { - $this->output( "Purging " . count( $urls ). " urls\n" ); - $u = new SquidUpdate( $urls ); - $u->doUpdate(); - } -} - -$maintClass = "PurgeNamespace"; -require_once( RUN_MAINTENANCE_IF_MAIN ); - -- 2.20.1