Why: * In the CheckUser extension, a maintenance script named 'purgeOldData.php' purges data from the recentchanges table. * This script is run on WMF production daily to ensure private data is purged. * This should instead be in core, so that the functionality can be used when CheckUser is not installed and also not duplicate existing code used for the job that purges the table. What: * Create purgeRecentChanges.php which purges expired rows in the recentchanges table by running the code in the RecentChangesUpdateJob directly (without using the job queue, as there is no need to do that because we are in a maintenance script context). * Add a test for this maintenance script * Test the purging features of the existing job to ensure that this code is reliable. Bug: T373032 Change-Id: Id32780c00b053d7fec94a00812f8d40a6bf2e40c
49 lines
1.8 KiB
PHP
49 lines
1.8 KiB
PHP
<?php
|
|
/**
|
|
* Purges rows from recentchanges which are older than wgRCMaxAge. Useful to run
|
|
* on wikis which are infrequently edited and therefore the PurgeRecentChanges
|
|
* job may not be run frequently enough.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
* @ingroup Maintenance
|
|
*/
|
|
|
|
require_once __DIR__ . '/Maintenance.php';
|
|
|
|
/**
|
|
* @ingroup Maintenance
|
|
* @since 1.43
|
|
*/
|
|
class PurgeRecentChanges extends Maintenance {
|
|
public function __construct() {
|
|
parent::__construct();
|
|
$this->addDescription( 'Purge rows from the recentchanges table which are older than wgRCMaxAge.' );
|
|
}
|
|
|
|
public function execute() {
|
|
// Run directly instead of pushing to the job queue, so that the script will exit only once the
|
|
// purge is complete. If a job is already running to do the purge, then the script will exit early.
|
|
// However, this is fine because a purge is already in progress.
|
|
$recentChangesPruneJob = RecentChangesUpdateJob::newPurgeJob();
|
|
$recentChangesPruneJob->run();
|
|
$this->output( "Finished purging data from recentchanges.\n" );
|
|
}
|
|
}
|
|
|
|
$maintClass = PurgeRecentChanges::class;
|
|
require_once RUN_MAINTENANCE_IF_MAIN;
|