X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=includes%2FStorage%2FSqlBlobStore.php;h=031cb587ed617082e1f0107ab08a789e3ff3556c;hb=d6c6aaeadd10f2f3f96248a28d8c6714bbc9ee15;hp=5ddbd34ccb96f2643bcf5430d2a8792b865470d3;hpb=fded33d6deb75ecd50eb5ba8f1bea03106474308;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Storage/SqlBlobStore.php b/includes/Storage/SqlBlobStore.php index 5ddbd34ccb..031cb587ed 100644 --- a/includes/Storage/SqlBlobStore.php +++ b/includes/Storage/SqlBlobStore.php @@ -35,6 +35,7 @@ use Language; use MWException; use WANObjectCache; use Wikimedia\Assert\Assert; +use Wikimedia\Rdbms\Database; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\LoadBalancer; @@ -269,7 +270,10 @@ class SqlBlobStore implements IDBAccessObject, BlobStore { // TODO: change key, since this is not necessarily revision text! $this->cache->makeKey( 'revisiontext', 'textid', $blobAddress ), $this->getCacheTTL(), - function () use ( $blobAddress, $queryFlags ) { + function ( $unused, &$ttl, &$setOpts ) use ( $blobAddress, $queryFlags ) { + list( $index ) = DBAccessObjectUtils::getDBOptions( $queryFlags ); + $setOpts += Database::getCacheSetOptions( $this->getDBConnection( $index ) ); + return $this->fetchBlob( $blobAddress, $queryFlags ); }, [ 'pcGroup' => self::TEXT_CACHE_GROUP, 'pcTTL' => IExpiringStore::TTL_PROC_LONG ] @@ -365,6 +369,8 @@ class SqlBlobStore implements IDBAccessObject, BlobStore { * May be the blob itself, or the blob compressed, or just the address * of the actual blob, depending on $flags. * @param string|string[] $flags Blob flags, such as 'external' or 'gzip'. + * Note that not including 'utf-8' in $flags will cause the data to be decoded + * according to the legacy encoding specified via setLegacyEncoding. * @param string|null $cacheKey May be used for caching if given * * @return false|string The expanded blob or false on failure @@ -427,7 +433,8 @@ class SqlBlobStore implements IDBAccessObject, BlobStore { $blobFlags = []; // Revisions not marked as UTF-8 will have legacy decoding applied by decompressData(). - // XXX: if $this->legacyEncoding is not set, we could skip this. May be risky, though. + // XXX: if $this->legacyEncoding is not set, we could skip this. That would however be + // risky, since $this->legacyEncoding being set in the future would lead to data corruption. $blobFlags[] = 'utf-8'; if ( $this->compressBlobs ) { @@ -456,11 +463,13 @@ class SqlBlobStore implements IDBAccessObject, BlobStore { * @todo make this private, there should be no need to use this method outside this class. * * @param mixed $blob Reference to a text - * @param array $blobFlags Compression flags + * @param array $blobFlags Compression flags, such as 'gzip'. + * Note that not including 'utf-8' in $blobFlags will cause the data to be decoded + * according to the legacy encoding specified via setLegacyEncoding. * * @return string|bool Decompressed text, or false on failure */ - public function decompressData( $blob, $blobFlags ) { + public function decompressData( $blob, array $blobFlags ) { if ( $blob === false ) { // Text failed to be fetched; nothing to do return false;