X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fobjectcache%2FSqlBagOStuff.php;h=9226875e2aa1fb2762328eb59170837ba9af2a1a;hb=bd5a37aacf600bdd5f3a6e7998f92bd1d9326a8a;hp=7fa0bfaf4ec27f7965787462b644565801139a71;hpb=50a72860b6eab430160a9504926c6aafa4fb701d;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/objectcache/SqlBagOStuff.php b/includes/objectcache/SqlBagOStuff.php index 7fa0bfaf4e..9226875e2a 100644 --- a/includes/objectcache/SqlBagOStuff.php +++ b/includes/objectcache/SqlBagOStuff.php @@ -36,7 +36,7 @@ use Wikimedia\WaitConditionLoop; * * @ingroup Cache */ -class SqlBagOStuff extends BagOStuff { +class SqlBagOStuff extends MediumSpecificBagOStuff { /** @var array[] (server index => server config) */ protected $serverInfos; /** @var string[] (server index => tag/host name) */ @@ -55,8 +55,6 @@ class SqlBagOStuff extends BagOStuff { protected $tableName = 'objectcache'; /** @var bool */ protected $replicaOnly = false; - /** @var int */ - protected $syncTimeout = 3; /** @var LoadBalancer|null */ protected $separateMainLB; @@ -159,9 +157,6 @@ class SqlBagOStuff extends BagOStuff { if ( isset( $params['shards'] ) ) { $this->shards = intval( $params['shards'] ); } - if ( isset( $params['syncTimeout'] ) ) { - $this->syncTimeout = $params['syncTimeout']; - } // Backwards-compatibility for < 1.34 $this->replicaOnly = $params['replicaOnly'] ?? ( $params['slaveOnly'] ?? false ); } @@ -174,19 +169,20 @@ class SqlBagOStuff extends BagOStuff { * @throws MWException */ protected function getDB( $serverIndex ) { - if ( !isset( $this->conns[$serverIndex] ) ) { - if ( $serverIndex >= $this->numServers ) { - throw new MWException( __METHOD__ . ": Invalid server index \"$serverIndex\"" ); - } + if ( $serverIndex >= $this->numServers ) { + throw new MWException( __METHOD__ . ": Invalid server index \"$serverIndex\"" ); + } - # Don't keep timing out trying to connect for each call if the DB is down - if ( isset( $this->connFailureErrors[$serverIndex] ) - && ( time() - $this->connFailureTimes[$serverIndex] ) < 60 - ) { - throw $this->connFailureErrors[$serverIndex]; - } + # Don't keep timing out trying to connect for each call if the DB is down + if ( + isset( $this->connFailureErrors[$serverIndex] ) && + ( time() - $this->connFailureTimes[$serverIndex] ) < 60 + ) { + throw $this->connFailureErrors[$serverIndex]; + } - if ( $this->serverInfos ) { + if ( $this->serverInfos ) { + if ( !isset( $this->conns[$serverIndex] ) ) { // Use custom database defined by server connection info $info = $this->serverInfos[$serverIndex]; $type = $info['type'] ?? 'mysql'; @@ -194,25 +190,26 @@ class SqlBagOStuff extends BagOStuff { $this->logger->debug( __CLASS__ . ": connecting to $host" ); $db = Database::factory( $type, $info ); $db->clearFlag( DBO_TRX ); // auto-commit mode + $this->conns[$serverIndex] = $db; + } + $db = $this->conns[$serverIndex]; + } else { + // Use the main LB database + $lb = MediaWikiServices::getInstance()->getDBLoadBalancer(); + $index = $this->replicaOnly ? DB_REPLICA : DB_MASTER; + if ( $lb->getServerType( $lb->getWriterIndex() ) !== 'sqlite' ) { + // Keep a separate connection to avoid contention and deadlocks + $db = $lb->getConnection( $index, [], false, $lb::CONN_TRX_AUTOCOMMIT ); } else { - // Use the main LB database - $lb = MediaWikiServices::getInstance()->getDBLoadBalancer(); - $index = $this->replicaOnly ? DB_REPLICA : DB_MASTER; - if ( $lb->getServerType( $lb->getWriterIndex() ) !== 'sqlite' ) { - // Keep a separate connection to avoid contention and deadlocks - $db = $lb->getConnection( $index, [], false, $lb::CONN_TRX_AUTOCOMMIT ); - } else { - // However, SQLite has the opposite behavior due to DB-level locking. - // Stock sqlite MediaWiki installs use a separate sqlite cache DB instead. - $db = $lb->getConnection( $index ); - } + // However, SQLite has the opposite behavior due to DB-level locking. + // Stock sqlite MediaWiki installs use a separate sqlite cache DB instead. + $db = $lb->getConnection( $index ); } - - $this->logger->debug( sprintf( "Connection %s will be used for SqlBagOStuff", $db ) ); - $this->conns[$serverIndex] = $db; } - return $this->conns[$serverIndex]; + $this->logger->debug( sprintf( "Connection %s will be used for SqlBagOStuff", $db ) ); + + return $db; } /** @@ -340,7 +337,7 @@ class SqlBagOStuff extends BagOStuff { return $values; } - public function doSetMulti( array $data, $exptime = 0, $flags = 0 ) { + protected function doSetMulti( array $data, $exptime = 0, $flags = 0 ) { return $this->modifyMulti( $data, $exptime, $flags, self::$OP_SET ); } @@ -509,7 +506,7 @@ class SqlBagOStuff extends BagOStuff { return (bool)$db->affectedRows(); } - public function doDeleteMulti( array $keys, $flags = 0 ) { + protected function doDeleteMulti( array $keys, $flags = 0 ) { return $this->modifyMulti( array_fill_keys( $keys, null ), 0, @@ -565,7 +562,7 @@ class SqlBagOStuff extends BagOStuff { return $ok; } - public function changeTTLMulti( array $keys, $exptime, $flags = 0 ) { + protected function doChangeTTLMulti( array $keys, $exptime, $flags = 0 ) { return $this->modifyMulti( array_fill_keys( $keys, null ), $exptime, @@ -634,7 +631,7 @@ class SqlBagOStuff extends BagOStuff { public function deleteObjectsExpiringBefore( $timestamp, - callable $progressCallback = null, + callable $progress = null, $limit = INF ) { /** @noinspection PhpUnusedLocalVariableInspection */ @@ -653,7 +650,7 @@ class SqlBagOStuff extends BagOStuff { $this->deleteServerObjectsExpiringBefore( $db, $timestamp, - $progressCallback, + $progress, $limit, $numServersDone, $keysDeletedCount