* @ingroup JobQueue
* @since 1.31
*/
-class ClearUserWatchlistJob extends Job {
+class ClearUserWatchlistJob extends Job implements GenericParameterJob {
+ /**
+ * @param array $params
+ * - userId, The ID for the user whose watchlist is being cleared.
+ * - maxWatchlistId, The maximum wl_id at the time the job was first created,
+ */
+ public function __construct( array $params ) {
+ parent::__construct( 'clearUserWatchlist', $params );
+
+ $this->removeDuplicates = true;
+ }
/**
* @param User $user User to clear the watchlist for.
* @return ClearUserWatchlistJob
*/
public static function newForUser( User $user, $maxWatchlistId ) {
- return new self(
- null,
- [ 'userId' => $user->getId(), 'maxWatchlistId' => $maxWatchlistId ]
- );
- }
-
- /**
- * @param Title|null $title Not used by this job.
- * @param array $params
- * - batchSize, Number of watchlist entries to remove at once.
- * - userId, The ID for the user whose watchlist is being cleared.
- * - maxWatchlistId, The maximum wl_id at the time the job was first created,
- */
- public function __construct( Title $title = null, array $params ) {
- if ( !array_key_exists( 'batchSize', $params ) ) {
- $params['batchSize'] = 1000;
- }
-
- parent::__construct(
- 'clearUserWatchlist',
- SpecialPage::getTitleFor( 'EditWatchlist', 'clear' ),
- $params
- );
-
- $this->removeDuplicates = true;
+ return new self( [ 'userId' => $user->getId(), 'maxWatchlistId' => $maxWatchlistId ] );
}
public function run() {
+ global $wgUpdateRowsPerQuery;
$userId = $this->params['userId'];
$maxWatchlistId = $this->params['maxWatchlistId'];
+ $batchSize = $wgUpdateRowsPerQuery;
$loadBalancer = MediaWikiServices::getInstance()->getDBLoadBalancer();
$dbw = $loadBalancer->getConnection( DB_MASTER );
// Wait before lock to try to reduce time waiting in the lock.
if ( !$loadBalancer->safeWaitForMasterPos( $dbr ) ) {
- $this->setLastError( 'Timed out while waiting for slave to catch up before lock' );
+ $this->setLastError( 'Timed out waiting for replica to catch up before lock' );
return false;
}
}
if ( !$loadBalancer->safeWaitForMasterPos( $dbr ) ) {
- $this->setLastError( 'Timed out while waiting for slave to catch up within lock' );
+ $this->setLastError( 'Timed out waiting for replica to catch up within lock' );
return false;
}
__METHOD__,
[
'ORDER BY' => 'wl_id ASC',
- 'LIMIT' => $this->params['batchSize'],
+ 'LIMIT' => $batchSize,
]
);
$lbf->commitMasterChanges( __METHOD__ );
unset( $scopedLock );
- if ( count( $watchlistIds ) == $this->params['batchSize'] ) {
- JobQueueGroup::singleton()->push( new self( $this->getTitle(), $this->getParams() ) );
+ if ( count( $watchlistIds ) === (int)$batchSize ) {
+ // Until we get less results than the limit, recursively push
+ // the same job again.
+ JobQueueGroup::singleton()->push( new self( $this->getParams() ) );
}
return true;