MediaWiki  master
cleanupRemovedModules.php
Go to the documentation of this file.
1 <?php
27 
28 require_once __DIR__ . '/Maintenance.php';
29 
37 
38  public function __construct() {
39  parent::__construct();
40  $this->addDescription(
41  'Remove cache entries for removed ResourceLoader modules from the database' );
42  $this->setBatchSize( 500 );
43  }
44 
45  public function execute() {
46  $this->output( "Cleaning up module_deps table...\n" );
47 
48  $dbw = $this->getDB( DB_PRIMARY );
49  $rl = MediaWikiServices::getInstance()->getResourceLoader();
50  $moduleNames = $rl->getModuleNames();
51  $res = $dbw->newSelectQueryBuilder()
52  ->select( [ 'md_module', 'md_skin' ] )
53  ->from( 'module_deps' )
54  ->where( $moduleNames ? 'md_module NOT IN (' . $dbw->makeList( $moduleNames ) . ')' : '1=1' )
55  ->caller( __METHOD__ )
56  ->fetchResultSet();
57  $rows = iterator_to_array( $res, false );
58 
59  $modDeps = $dbw->tableName( 'module_deps' );
60  $i = 1;
61  foreach ( array_chunk( $rows, $this->getBatchSize() ) as $chunk ) {
62  // WHERE ( mod=A AND skin=A ) OR ( mod=A AND skin=B) ..
63  $conds = array_map( static function ( stdClass $row ) use ( $dbw ) {
64  return $dbw->makeList( (array)$row, IDatabase::LIST_AND );
65  }, $chunk );
66  $conds = $dbw->makeList( $conds, IDatabase::LIST_OR );
67 
68  $this->beginTransaction( $dbw, __METHOD__ );
69  $dbw->query( "DELETE FROM $modDeps WHERE $conds", __METHOD__ );
70  $numRows = $dbw->affectedRows();
71  $this->output( "Batch $i: $numRows rows\n" );
72  $this->commitTransaction( $dbw, __METHOD__ );
73 
74  $i++;
75  }
76 
77  $this->output( "Done\n" );
78  }
79 }
80 
81 $maintClass = CleanupRemovedModules::class;
82 require_once RUN_MAINTENANCE_IF_MAIN;
const LIST_OR
Definition: Defines.php:46
const LIST_AND
Definition: Defines.php:43
Maintenance script to remove cache entries for removed ResourceLoader modules from the database.
execute()
Do the actual work.
__construct()
Default constructor.
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
Definition: Maintenance.php:66
getDB( $db, $groups=[], $dbDomain=false)
Returns a database to be used by current maintenance script.
beginTransaction(IDatabase $dbw, $fname)
Begin a transaction on a DB.
commitTransaction(IDatabase $dbw, $fname)
Commit the transaction on a DB handle and wait for replica DBs to catch up.
output( $out, $channel=null)
Throw some output to the user.
getBatchSize()
Returns batch size.
addDescription( $text)
Set the description text.
setBatchSize( $s=0)
Service locator for MediaWiki core services.
Basic database interface for live and lazy-loaded relation database handles.
Definition: IDatabase.php:39
const DB_PRIMARY
Definition: defines.php:28