X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fdeferred%2FSqlDataUpdate.php;h=ff06915a7729e24497c336ab7c66deedae9bd148;hb=d5a7166771613dfe4ed9fb75fa5efeced6134bd1;hp=9740cbe254cc6994966cfe51e295b328074fcd9d;hpb=fc1ca75323b5f424a9f8d28d42d85a311ed2f721;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/deferred/SqlDataUpdate.php b/includes/deferred/SqlDataUpdate.php index 9740cbe254..2411beff89 100644 --- a/includes/deferred/SqlDataUpdate.php +++ b/includes/deferred/SqlDataUpdate.php @@ -21,130 +21,20 @@ * @file */ +use Wikimedia\Rdbms\IDatabase; + /** - * Abstract base class for update jobs that put some secondary data extracted - * from article content into the database. - * - * @note subclasses should NOT start or commit transactions in their doUpdate() method, - * a transaction will automatically be wrapped around the update. Starting another - * one would break the outer transaction bracket. If need be, subclasses can override - * the beginTransaction() and commitTransaction() methods. + * @deprecated Since 1.28 Use DataUpdate directly, injecting the database */ abstract class SqlDataUpdate extends DataUpdate { /** @var IDatabase Database connection reference */ protected $mDb; - /** @var array SELECT options to be used (array) */ protected $mOptions = []; - /** @var bool Whether a transaction is open on this object (internal use only!) */ - private $mHasTransaction; - - /** @var bool Whether this update should be wrapped in a transaction */ - protected $mUseTransaction; - - /** - * Constructor - * - * @param bool $withTransaction Whether this update should be wrapped in a - * transaction (default: true). A transaction is only started if no - * transaction is already in progress, see beginTransaction() for details. - */ - public function __construct( $withTransaction = true ) { + public function __construct() { parent::__construct(); $this->mDb = wfGetLB()->getLazyConnectionRef( DB_MASTER ); - - $this->mWithTransaction = $withTransaction; - $this->mHasTransaction = false; - } - - /** - * Begin a database transaction, if $withTransaction was given as true in - * the constructor for this SqlDataUpdate. - * - * Because nested transactions are not supported by the Database class, - * this implementation checks Database::trxLevel() and only opens a - * transaction if none is already active. - */ - public function beginTransaction() { - if ( !$this->mWithTransaction ) { - return; - } - - // NOTE: nested transactions are not supported, only start a transaction if none is open - if ( $this->mDb->trxLevel() === 0 ) { - $this->mDb->begin( get_class( $this ) . '::beginTransaction' ); - $this->mHasTransaction = true; - } - } - - /** - * Commit the database transaction started via beginTransaction (if any). - */ - public function commitTransaction() { - if ( $this->mHasTransaction ) { - $this->mDb->commit( get_class( $this ) . '::commitTransaction' ); - $this->mHasTransaction = false; - } - } - - /** - * Abort the database transaction started via beginTransaction (if any). - */ - public function abortTransaction() { - if ( $this->mHasTransaction ) { // XXX: actually... maybe always? - $this->mDb->rollback( get_class( $this ) . '::abortTransaction' ); - $this->mHasTransaction = false; - } - } - - /** - * Invalidate the cache of a list of pages from a single namespace. - * This is intended for use by subclasses. - * - * @param int $namespace Namespace number - * @param array $dbkeys - */ - protected function invalidatePages( $namespace, array $dbkeys ) { - if ( $dbkeys === [] ) { - return; - } - - $dbw = $this->mDb; - $dbw->onTransactionPreCommitOrIdle( function() use ( $dbw, $namespace, $dbkeys ) { - /** - * Determine which pages need to be updated - * This is necessary to prevent the job queue from smashing the DB with - * large numbers of concurrent invalidations of the same page - */ - $now = $dbw->timestamp(); - $ids = $dbw->selectFieldValues( 'page', - 'page_id', - [ - 'page_namespace' => $namespace, - 'page_title' => $dbkeys, - 'page_touched < ' . $dbw->addQuotes( $now ) - ], - __METHOD__ - ); - - if ( $ids === [] ) { - return; - } - - /** - * Do the update - * We still need the page_touched condition, in case the row has changed since - * the non-locking select above. - */ - $dbw->update( 'page', - [ 'page_touched' => $now ], - [ - 'page_id' => $ids, - 'page_touched < ' . $dbw->addQuotes( $now ) - ], __METHOD__ - ); - } ); } }