params ) ) ); if ( $missing != '' ) { throw new InvalidArgumentException( "Missing paramter(s) $missing" ); } $this->removeDuplicates = true; } public function run() { $services = MediaWikiServices::getInstance(); $lbFactory = $services->getDBLoadBalancerFactory(); $rowsPerQuery = $services->getMainConfig()->get( 'UpdateRowsPerQuery' ); $dbw = $lbFactory->getMainLB()->getConnection( DB_MASTER ); $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ ); $asOfTimes = array_unique( $dbw->selectFieldValues( 'watchlist', 'wl_notificationtimestamp', [ 'wl_user' => $this->params['userId'], 'wl_notificationtimestamp IS NOT NULL' ], __METHOD__, [ 'ORDER BY' => 'wl_notificationtimestamp DESC' ] ) ); foreach ( array_chunk( $asOfTimes, $rowsPerQuery ) as $asOfTimeBatch ) { $dbw->update( 'watchlist', [ 'wl_notificationtimestamp' => null ], [ 'wl_user' => $this->params['userId'], 'wl_notificationtimestamp' => $asOfTimeBatch, // New notifications since the reset should not be cleared 'wl_notificationtimestamp < ' . $dbw->addQuotes( $dbw->timestamp( $this->params['casTime'] ) ) ], __METHOD__ ); $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket ); } } }