wiki.techinc.nl/includes/jobqueue/jobs/UserGroupExpiryJob.php
Eddie Greiner-Petter edba39ab60 Be more db-friendly when purging expired userrights
Each expired row has to be fetched from the user_groups table, deleted
from that table and added to the user_former_groups table.  Per Jaimes
request, let's not do this for all rows at once but for smaller chunks
and wait for replication to catch up after each chunk has been
processed. In addition the function to purge the expired rows now sets a
lock so that there won't be multiple concurrent runs.

Also, cleaning this table up isn't urgent and thus should be done in a
job and not a deferred update, so let's move it there.

Bug: T176754
Change-Id: I671d4b9d09677a2f474477ba7fea33a44d6318aa
2018-02-14 09:02:33 +00:00

39 lines
1.2 KiB
PHP

<?php
/**
* Job that purges expired user group memberships.
*
* 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 3 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 JobQueue
*/
class UserGroupExpiryJob extends Job {
public function __construct( $params = false ) {
parent::__construct( 'userGroupExpiry', Title::newMainPage(), $params );
$this->removeDuplicates = true;
}
/**
* Run the job
* @return bool Success
*/
public function run() {
UserGroupMembership::purgeExpired();
return true;
}
}