X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fjobqueue%2Fjobs%2FRecentChangesUpdateJob.php;h=77daca7676e43a3cedfd7c57835273c3da41b8b4;hp=6f349d444703feb5b869509a7069f536e3c26cf8;hb=a2c8c2969420a0f150c03f76e3a0bf9028fcda43;hpb=4a5f646a7fea7cbe0421c5cf38b72bae5c1bcf65 diff --git a/includes/jobqueue/jobs/RecentChangesUpdateJob.php b/includes/jobqueue/jobs/RecentChangesUpdateJob.php index 6f349d4447..77daca7676 100644 --- a/includes/jobqueue/jobs/RecentChangesUpdateJob.php +++ b/includes/jobqueue/jobs/RecentChangesUpdateJob.php @@ -76,23 +76,25 @@ class RecentChangesUpdateJob extends Job { $lockKey = wfWikiID() . ':recentchanges-prune'; $dbw = wfGetDB( DB_MASTER ); - if ( !$dbw->lockIsFree( $lockKey, __METHOD__ ) - || !$dbw->lock( $lockKey, __METHOD__, 1 ) - ) { - return; // already in progress + if ( !$dbw->lock( $lockKey, __METHOD__, 0 ) ) { + // already in progress + return; } $factory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); $ticket = $factory->getEmptyTransactionTicket( __METHOD__ ); $cutoff = $dbw->timestamp( time() - $wgRCMaxAge ); + $rcQuery = RecentChange::getQueryInfo(); do { $rcIds = []; $rows = []; - $res = $dbw->select( 'recentchanges', - RecentChange::selectFields(), + $res = $dbw->select( + $rcQuery['tables'], + $rcQuery['fields'], [ 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ], __METHOD__, - [ 'LIMIT' => $wgUpdateRowsPerQuery ] + [ 'LIMIT' => $wgUpdateRowsPerQuery ], + $rcQuery['joins'] ); foreach ( $res as $row ) { $rcIds[] = $row->rc_id; @@ -135,7 +137,7 @@ class RecentChangesUpdateJob extends Job { $dbw->setSessionOptions( [ 'connTimeout' => 900 ] ); $lockKey = wfWikiID() . '-activeusers'; - if ( !$dbw->lockIsFree( $lockKey, __METHOD__ ) || !$dbw->lock( $lockKey, __METHOD__, 1 ) ) { + if ( !$dbw->lock( $lockKey, __METHOD__, 0 ) ) { // Exclusive update (avoids duplicate entries)… it's usually fine to just drop out here, // if the Job is already running. return; @@ -156,11 +158,15 @@ class RecentChangesUpdateJob extends Job { $eTimestamp = min( $sTimestamp + $window, $nowUnix ); // Get all the users active since the last update + $actorQuery = ActorMigration::newMigration()->getJoin( 'rc_user' ); $res = $dbw->select( - [ 'recentchanges' ], - [ 'rc_user_text', 'lastedittime' => 'MAX(rc_timestamp)' ], + [ 'recentchanges' ] + $actorQuery['tables'], [ - 'rc_user > 0', // actual accounts + 'rc_user_text' => $actorQuery['fields']['rc_user_text'], + 'lastedittime' => 'MAX(rc_timestamp)' + ], + [ + $actorQuery['fields']['rc_user'] . ' > 0', // actual accounts 'rc_type != ' . $dbw->addQuotes( RC_EXTERNAL ), // no wikidata 'rc_log_type IS NULL OR rc_log_type != ' . $dbw->addQuotes( 'newusers' ), 'rc_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $sTimestamp ) ), @@ -170,7 +176,8 @@ class RecentChangesUpdateJob extends Job { [ 'GROUP BY' => [ 'rc_user_text' ], 'ORDER BY' => 'NULL' // avoid filesort - ] + ], + $actorQuery['joins'] ); $names = []; foreach ( $res as $row ) {