From 59f5c5fdd78cfc46d7db73075f23abccaad3ac1f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Tue, 29 Dec 2015 02:16:10 +0100 Subject: [PATCH] rebuildrecentchanges.php: Don't create duplicate entries for upload logs There are a few cases where we generate both a page revision and a log entry for a single action (upload; in the future, maybe also move, protect), but only one recent changes entry (matching the log entry). Bug: T116809 Change-Id: Ib95a6cb57a942a0758091ff2db9d29f3c0048598 --- maintenance/rebuildrecentchanges.php | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/maintenance/rebuildrecentchanges.php b/maintenance/rebuildrecentchanges.php index b6421f347b..34560fd4cb 100644 --- a/maintenance/rebuildrecentchanges.php +++ b/maintenance/rebuildrecentchanges.php @@ -41,6 +41,7 @@ class RebuildRecentchanges extends Maintenance { $this->rebuildRecentChangesTablePass2(); $this->rebuildRecentChangesTablePass3(); $this->rebuildRecentChangesTablePass4(); + $this->rebuildRecentChangesTablePass5(); $this->purgeFeeds(); $this->output( "Done.\n" ); } @@ -281,6 +282,46 @@ class RebuildRecentchanges extends Maintenance { } } + /** + * Rebuild pass 5: Delete duplicate entries where we generate both a page revision and a log entry + * for a single action (upload only, at the moment, but potentially also move, protect, ...). + */ + private function rebuildRecentChangesTablePass5() { + $dbw = wfGetDB( DB_MASTER ); + + $this->output( "Removing duplicate revision and logging entries...\n" ); + + $res = $dbw->select( + array( 'logging', 'log_search' ), + array( 'ls_value', 'ls_log_id' ), + array( + 'ls_log_id = log_id', + 'ls_field' => 'associated_rev_id', + 'log_type' => 'upload', + ), + __METHOD__ + ); + foreach ( $res as $obj ) { + $rev_id = $obj->ls_value; + $log_id = $obj->ls_log_id; + + // Mark the logging row as having an associated rev id + $dbw->update( + 'recentchanges', + /*SET*/ array( 'rc_this_oldid' => $rev_id ), + /*WHERE*/ array( 'rc_logid' => $log_id ), + __METHOD__ + ); + + // Delete the revision row + $dbw->delete( + 'recentchanges', + /*WHERE*/ array( 'rc_this_oldid' => $rev_id, 'rc_logid' => 0 ), + __METHOD__ + ); + } + } + /** * Purge cached feeds in $messageMemc */ -- 2.20.1