From 69171cde6d9d8c8c529eae32bb7f37772de540e0 Mon Sep 17 00:00:00 2001 From: Roan Kattouw Date: Wed, 27 Oct 2010 20:08:04 +0000 Subject: [PATCH] Re-add maintenance script from r75555, not totally broken this time --- maintenance/cleanupRemovedModules.php | 84 +++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 maintenance/cleanupRemovedModules.php diff --git a/maintenance/cleanupRemovedModules.php b/maintenance/cleanupRemovedModules.php new file mode 100644 index 0000000000..68a6613392 --- /dev/null +++ b/maintenance/cleanupRemovedModules.php @@ -0,0 +1,84 @@ + + */ + +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); + +class CleanupRemovedModules extends Maintenance { + + public function __construct() { + parent::__construct(); + $this->mDescription = 'Remove cache entries for removed ResourceLoader modules from the database'; + $this->addOption( 'batchsize', 'Delete rows in batches of this size. Default: 500', false, true ); + $this->addOption( 'max-slave-lag', 'If the slave lag exceeds this many seconds, wait until it drops below this value. Default: 5', false, true ); + } + + public function execute() { + $dbw = wfGetDB( DB_MASTER ); + $rl = new ResourceLoader(); + $moduleNames = array_keys( $rl->getModules() ); + $moduleList = implode( ', ', array_map( array( $dbw, 'addQuotes' ), $moduleNames ) ); + $limit = max( 1, intval( $this->getOption( 'batchsize', 500 ) ) ); + $maxlag = intval( $this->getOption( 'max-slave-lag', 5 ) ); + + $this->output( "Cleaning up module_deps table...\n" ); + $i = 1; + do { + // $dbw->delete() doesn't support LIMIT :( + $where = $moduleList ? "md_module NOT IN ($moduleList)" : '1=1'; + $dbw->query( "DELETE FROM module_deps WHERE $where LIMIT $limit", __METHOD__ ); + $numRows = $dbw->affectedRows(); + $this->output( "Batch $i: $numRows rows\n" ); + $i++; + wfWaitForSlaves( $maxlag ); + } while( $numRows > 0 ); + $this->output( "done\n" ); + + $this->output( "Cleaning up msg_resource table...\n" ); + $i = 1; + do { + $where = $moduleList ? "mr_resource NOT IN ($moduleList)" : '1=1'; + $dbw->query( "DELETE FROM msg_resource WHERE $where LIMIT $limit", __METHOD__ ); + $numRows = $dbw->affectedRows(); + $this->output( "Batch $i: $numRows rows\n" ); + $i++; + wfWaitForSlaves( $maxlag ); + } while( $numRows > 0 ); + $this->output( "done\n" ); + + $this->output( "Cleaning up msg_resource_links table...\n" ); + $i = 1; + do { + $where = $moduleList ? "mrl_resource NOT IN ($moduleList)" : '1=1'; + $dbw->query( "DELETE FROM msg_resource_links WHERE $where LIMIT $limit", __METHOD__ ); + $numRows = $dbw->affectedRows(); + $this->output( "Batch $i: $numRows rows\n" ); + $i++; + wfWaitForSlaves( $maxlag ); + } while( $numRows > 0 ); + $this->output( "done\n" ); + } +} + +$maintClass = "CleanupRemovedModules"; +require_once( DO_MAINTENANCE ); \ No newline at end of file -- 2.20.1