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_MASTER );
49  $rl = MediaWikiServices::getInstance()->getResourceLoader();
50  $moduleNames = $rl->getModuleNames();
51  $res = $dbw->select( 'module_deps',
52  [ 'md_module', 'md_skin' ],
53  $moduleNames ? 'md_module NOT IN (' . $dbw->makeList( $moduleNames ) . ')' : '1=1',
54  __METHOD__
55  );
56  $rows = iterator_to_array( $res, false );
57 
58  $modDeps = $dbw->tableName( 'module_deps' );
59  $i = 1;
60  foreach ( array_chunk( $rows, $this->getBatchSize() ) as $chunk ) {
61  // WHERE ( mod=A AND skin=A ) OR ( mod=A AND skin=B) ..
62  $conds = array_map( function ( stdClass $row ) use ( $dbw ) {
63  return $dbw->makeList( (array)$row, IDatabase::LIST_AND );
64  }, $chunk );
65  $conds = $dbw->makeList( $conds, IDatabase::LIST_OR );
66 
67  $this->beginTransaction( $dbw, __METHOD__ );
68  $dbw->query( "DELETE FROM $modDeps WHERE $conds", __METHOD__ );
69  $numRows = $dbw->affectedRows();
70  $this->output( "Batch $i: $numRows rows\n" );
71  $this->commitTransaction( $dbw, __METHOD__ );
72 
73  $i++;
74  }
75 
76  $this->output( "Done\n" );
77  }
78 }
79 
80 $maintClass = CleanupRemovedModules::class;
81 require_once RUN_MAINTENANCE_IF_MAIN;
RUN_MAINTENANCE_IF_MAIN
const RUN_MAINTENANCE_IF_MAIN
Definition: Maintenance.php:38
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:154
Maintenance\addDescription
addDescription( $text)
Set the description text.
Definition: Maintenance.php:327
Maintenance
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
Definition: Maintenance.php:55
$res
$res
Definition: testCompression.php:57
LIST_AND
const LIST_AND
Definition: Defines.php:48
Wikimedia\Rdbms\IDatabase
Basic database interface for live and lazy-loaded relation database handles.
Definition: IDatabase.php:38
Maintenance\beginTransaction
beginTransaction(IDatabase $dbw, $fname)
Begin a transcation on a DB.
Definition: Maintenance.php:1397
LIST_OR
const LIST_OR
Definition: Defines.php:51
DB_MASTER
const DB_MASTER
Definition: defines.php:26
$maintClass
$maintClass
Definition: cleanupRemovedModules.php:80
Maintenance\commitTransaction
commitTransaction(IDatabase $dbw, $fname)
Commit the transcation on a DB handle and wait for replica DBs to catch up.
Definition: Maintenance.php:1412
Maintenance\getDB
getDB( $db, $groups=[], $dbDomain=false)
Returns a database to be used by current maintenance script.
Definition: Maintenance.php:1366
Maintenance\getBatchSize
getBatchSize()
Returns batch size.
Definition: Maintenance.php:366
Maintenance\output
output( $out, $channel=null)
Throw some output to the user.
Definition: Maintenance.php:434
CleanupRemovedModules\execute
execute()
Do the actual work.
Definition: cleanupRemovedModules.php:45
CleanupRemovedModules\__construct
__construct()
Default constructor.
Definition: cleanupRemovedModules.php:38
CleanupRemovedModules
Maintenance script to remove cache entries for removed ResourceLoader modules from the database.
Definition: cleanupRemovedModules.php:36
Maintenance\setBatchSize
setBatchSize( $s=0)
Set the batch size.
Definition: Maintenance.php:374