From: jenkins-bot Date: Wed, 12 Jul 2017 07:43:15 +0000 (+0000) Subject: Merge "Add hook for cleaning up data that depends on purged recentchanges rows" X-Git-Tag: 1.31.0-rc.0~2735 X-Git-Url: http://git.cyclocoop.org/%7B%24admin_url%7Dcompta/comptes/journal.php?a=commitdiff_plain;h=33eabfd8d6a738ae3ed13e3f52c0bbd7664e581a;hp=1d12fd51ef3d8f432422461d2f953ec7c6c2d88e;p=lhc%2Fweb%2Fwiklou.git Merge "Add hook for cleaning up data that depends on purged recentchanges rows" --- diff --git a/RELEASE-NOTES-1.30 b/RELEASE-NOTES-1.30 index be21a7d9b2..453368bebb 100644 --- a/RELEASE-NOTES-1.30 +++ b/RELEASE-NOTES-1.30 @@ -35,6 +35,8 @@ production. LanguageConverter variant. This allows English-speaking developers to develop and test LanguageConverter more easily. Pig Latin can be enabled by setting $wgUsePigLatinVariant to true. +* Added RecentChangesPurgeRows hook to allow extensions to purge data that + depends on the recentchanges table. === Languages updated in 1.30 === diff --git a/docs/hooks.txt b/docs/hooks.txt index 8485b024b7..fec7d44d5e 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -2716,6 +2716,11 @@ random pages. 'RecentChange_save': Called at the end of RecentChange::save(). &$recentChange: RecentChange object +'RecentChangesPurgeRows': Called when old recentchanges rows are purged, after +deleting those rows but within the same transaction. +$rows: The deleted rows as an array of recentchanges row objects (with up to + $wgUpdateRowsPerQuery items). + 'RedirectSpecialArticleRedirectParams': Lets you alter the set of parameter names such as "oldid" that are preserved when using redirecting special pages such as Special:MyPage and Special:MyTalk. diff --git a/includes/jobqueue/jobs/RecentChangesUpdateJob.php b/includes/jobqueue/jobs/RecentChangesUpdateJob.php index ca57d62340..6f349d4447 100644 --- a/includes/jobqueue/jobs/RecentChangesUpdateJob.php +++ b/includes/jobqueue/jobs/RecentChangesUpdateJob.php @@ -86,14 +86,21 @@ class RecentChangesUpdateJob extends Job { $ticket = $factory->getEmptyTransactionTicket( __METHOD__ ); $cutoff = $dbw->timestamp( time() - $wgRCMaxAge ); do { - $rcIds = $dbw->selectFieldValues( 'recentchanges', - 'rc_id', + $rcIds = []; + $rows = []; + $res = $dbw->select( 'recentchanges', + RecentChange::selectFields(), [ 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ], __METHOD__, [ 'LIMIT' => $wgUpdateRowsPerQuery ] ); + foreach ( $res as $row ) { + $rcIds[] = $row->rc_id; + $rows[] = $row; + } if ( $rcIds ) { $dbw->delete( 'recentchanges', [ 'rc_id' => $rcIds ], __METHOD__ ); + Hooks::run( 'RecentChangesPurgeRows', [ $rows ] ); // There might be more, so try waiting for replica DBs try { $factory->commitAndWaitForReplication(