MediaWiki master
MediaWiki\Storage\SqlBlobStore Class Reference

Service for storing and loading Content objects representing revision data blobs. More...

Inherits MediaWiki\Storage\BlobStore.

Collaboration diagram for MediaWiki\Storage\SqlBlobStore:

Public Member Functions

 __construct (ILoadBalancer $dbLoadBalancer, ExternalStoreAccess $extStoreAccess, WANObjectCache $cache, $dbDomain=false)
 
 compressData (&$blob)
 If $wgCompressRevisions is enabled, we will compress data.
 
 decompressData (string $blob, array $blobFlags)
 Re-converts revision text according to its flags.
 
 expandBlob ( $raw, $flags, $blobAddress=null)
 Expand a raw data blob according to the flags given.
 
 getBlob ( $blobAddress, $queryFlags=0)
 Retrieve a blob, given an address.
 
 getBlobBatch ( $blobAddresses, $queryFlags=0)
 A batched version of BlobStore::getBlob.
 
 getCacheExpiry ()
 
 getCompressBlobs ()
 
 getLegacyEncoding ()
 
 getTextIdFromAddress ( $address)
 Returns an ID corresponding to the old_id field in the text table, corresponding to the given $address.
 
 getUseExternalStore ()
 
 isReadOnly ()
 Check if the blob metadata or backing blob data store is read-only.
 
 setCacheExpiry (int $cacheExpiry)
 
 setCompressBlobs ( $compressBlobs)
 
 setLegacyEncoding (string $legacyEncoding)
 Set the legacy encoding to assume for blobs that do not have the utf-8 flag set.
 
 setUseExternalStore (bool $useExternalStore)
 
 storeBlob ( $data, $hints=[])
 Stores an arbitrary blob of data and returns an address that can be used with getBlob() to retrieve the same blob of data,.
 

Static Public Member Functions

static explodeFlags (string $flagsString)
 Split a comma-separated old_flags value into its constituent parts.
 
static makeAddressFromTextId ( $id)
 Returns an address referring to content stored in the text table row with the given ID.
 
static splitBlobAddress ( $address)
 Splits a blob address into three parts: the schema, the ID, and parameters/flags.
 

Public Attributes

const DEFAULT_TTL = 7 * 24 * 3600
 
const TEXT_CACHE_GROUP = 'revisiontext:10'
 
- Public Attributes inherited from MediaWiki\Storage\BlobStore
const DESIGNATION_HINT = 'designation'
 Hint key for use with storeBlob, indicating the general role the block takes in the application.
 
const FORMAT_HINT = 'cont_format'
 Hint key for use with storeBlob, indicating the serialization format used to create the blob, as a MIME type.
 
const IMAGE_HINT = 'img_name'
 Hint key for an image name.
 
const MODEL_HINT = 'cont_model'
 Hint key for use with storeBlob, indicating the model of the content encoded in the given blob.
 
const PAGE_HINT = 'page_id'
 Hint key for use with storeBlob, indicating the page the blob is associated with.
 
const PARENT_HINT = 'rev_parent_id'
 Hint key for use with storeBlob, indicating the parent revision of the revision the blob is associated with.
 
const REVISION_HINT = 'rev_id'
 Hint key for use with storeBlob, indicating the revision the blob is associated with.
 
const ROLE_HINT = 'role_name'
 Hint key for use with storeBlob, indicating the slot the blob is associated with.
 
const SHA1_HINT = 'cont_sha1'
 Hint key for use with storeBlob, providing the SHA1 hash of the blob as passed to the method.
 

Detailed Description

Service for storing and loading Content objects representing revision data blobs.

Since
1.31
Note
This was written to act as a drop-in replacement for the corresponding static methods in the old Revision class (which was later removed in 1.37).

Definition at line 50 of file SqlBlobStore.php.

Constructor & Destructor Documentation

◆ __construct()

MediaWiki\Storage\SqlBlobStore::__construct ( ILoadBalancer $dbLoadBalancer,
ExternalStoreAccess $extStoreAccess,
WANObjectCache $cache,
$dbDomain = false )
Parameters
ILoadBalancer$dbLoadBalancerA load balancer for acquiring database connections
ExternalStoreAccess$extStoreAccessAccess layer for external storage
WANObjectCache$cacheA cache manager for caching blobs. This can be the local wiki's default instance even if $dbDomain refers to a different wiki, since makeGlobalKey() is used to construct a key that allows cached blobs from the same database to be re-used between wikis. For example, wiki A and wiki B will use the same cache keys for blobs fetched from wiki C, regardless of the wiki-specific default key space.
bool | string$dbDomainThe ID of the target wiki database. Use false for the local wiki.

Definition at line 109 of file SqlBlobStore.php.

Member Function Documentation

◆ compressData()

MediaWiki\Storage\SqlBlobStore::compressData ( & $blob)

If $wgCompressRevisions is enabled, we will compress data.

The input string is modified in place. Return value is the flags field: contains 'gzip' if the data is compressed, and 'utf-8' if we're saving in UTF-8 mode.

MCR migration note: this replaced Revision::compressRevisionText

Note
direct use is deprecated!
Todo
make this private, there should be no need to use this method outside this class.
Parameters
string&$blob
Returns
string

Definition at line 592 of file SqlBlobStore.php.

References wfDebug(), and wfLogWarning().

Referenced by MediaWiki\Storage\SqlBlobStore\storeBlob().

◆ decompressData()

MediaWiki\Storage\SqlBlobStore::decompressData ( string $blob,
array $blobFlags )

Re-converts revision text according to its flags.

MCR migration note: this replaced Revision::decompressRevisionText

Note
direct use is deprecated, use getBlob() or SlotRecord::getContent() instead.
Todo
make this private, there should be no need to use this method outside this class.
Parameters
string$blobBlob in compressed/encoded form.
array$blobFlagsCompression 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.
Returns
string|bool Decompressed text, or false on failure

Definition at line 632 of file SqlBlobStore.php.

References HistoryBlobUtils\unserialize(), and wfWarn().

Referenced by MediaWiki\Storage\SqlBlobStore\expandBlob().

◆ expandBlob()

MediaWiki\Storage\SqlBlobStore::expandBlob ( $raw,
$flags,
$blobAddress = null )

Expand a raw data blob according to the flags given.

MCR migration note: this replaced Revision::getRevisionText

Note
direct use is deprecated, use getBlob() or SlotRecord::getContent() instead.
Todo
make this private, there should be no need to use this method outside this class.
Parameters
string$rawThe raw blob data, to be processed according to $flags. May be the blob itself, or the blob compressed, or just the address of the actual blob, depending on $flags.
string | string[]$flagsBlob 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.
string | null$blobAddressA blob address for use in the cache key. If not given, caching is disabled.
Returns
false|string The expanded blob or false on failure
Exceptions
BlobAccessException

Definition at line 535 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\decompressData(), MediaWiki\Storage\SqlBlobStore\explodeFlags(), and getCacheKey().

◆ explodeFlags()

static MediaWiki\Storage\SqlBlobStore::explodeFlags ( string $flagsString)
static

Split a comma-separated old_flags value into its constituent parts.

Parameters
string$flagsString
Returns
array

Definition at line 759 of file SqlBlobStore.php.

Referenced by MediaWiki\Storage\SqlBlobStore\expandBlob().

◆ getBlob()

MediaWiki\Storage\SqlBlobStore::getBlob ( $blobAddress,
$queryFlags = 0 )

Retrieve a blob, given an address.

Currently hardcoded to the 'text' table storage engine.

MCR migration note: this replaced Revision::loadText

Parameters
string$blobAddress
int$queryFlags
Exceptions
BlobAccessException
Returns
string

Implements MediaWiki\Storage\BlobStore.

Definition at line 258 of file SqlBlobStore.php.

References getCacheKey().

◆ getBlobBatch()

MediaWiki\Storage\SqlBlobStore::getBlobBatch ( $blobAddresses,
$queryFlags = 0 )

A batched version of BlobStore::getBlob.

Parameters
string[]$blobAddressesAn array of blob addresses.
int$queryFlagsSee IDBAccessObject.
Exceptions
BlobAccessException
Returns
StatusValue A status with a map of blobAddress => binary blob data or null if fetching the blob has failed. Fetch failures errors are the warnings in the status object.
Since
1.34

Implements MediaWiki\Storage\BlobStore.

Definition at line 301 of file SqlBlobStore.php.

◆ getCacheExpiry()

MediaWiki\Storage\SqlBlobStore::getCacheExpiry ( )
Returns
int Time for which blobs can be cached, in seconds

Definition at line 124 of file SqlBlobStore.php.

◆ getCompressBlobs()

MediaWiki\Storage\SqlBlobStore::getCompressBlobs ( )
Returns
bool Whether blobs should be compressed for storage

Definition at line 138 of file SqlBlobStore.php.

◆ getLegacyEncoding()

MediaWiki\Storage\SqlBlobStore::getLegacyEncoding ( )
Returns
false|string The legacy encoding to assume for blobs that are not marked as utf8. False means handling of legacy encoding is disabled, and utf8 assumed.

Definition at line 153 of file SqlBlobStore.php.

◆ getTextIdFromAddress()

MediaWiki\Storage\SqlBlobStore::getTextIdFromAddress ( $address)

Returns an ID corresponding to the old_id field in the text table, corresponding to the given $address.

Currently, $address must start with 'tt:' followed by a decimal integer representing the old_id; if $address does not start with 'tt:', null is returned. However, the implementation may change to insert rows into the text table on the fly. This implies that this method cannot be static.

Note
This method exists for use with the text table based storage schema. It should not be assumed that is will function with all future kinds of content addresses.
Deprecated
since 1.31, so don't assume that all blob addresses refer to a row in the text table. This method should become private once the relevant refactoring in WikiPage is complete.
Parameters
string$address
Returns
int|null

Definition at line 720 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\splitBlobAddress().

◆ getUseExternalStore()

MediaWiki\Storage\SqlBlobStore::getUseExternalStore ( )
Returns
bool Whether to use the ExternalStore mechanism for storing blobs.

Definition at line 172 of file SqlBlobStore.php.

◆ isReadOnly()

MediaWiki\Storage\SqlBlobStore::isReadOnly ( )

Check if the blob metadata or backing blob data store is read-only.

Returns
bool

Implements MediaWiki\Storage\BlobStore.

Definition at line 785 of file SqlBlobStore.php.

◆ makeAddressFromTextId()

static MediaWiki\Storage\SqlBlobStore::makeAddressFromTextId ( $id)
static

Returns an address referring to content stored in the text table row with the given ID.

The address schema for blobs stored in the text table is "tt:" followed by an integer that corresponds to a value of the old_id field.

Access: internal
Note
This method should not be used by regular application logic. It is public so maintenance scripts can use it for bulk operations on the text table.
Parameters
int$id
Returns
string

Definition at line 749 of file SqlBlobStore.php.

Referenced by MediaWiki\Storage\SqlBlobStore\storeBlob().

◆ setCacheExpiry()

MediaWiki\Storage\SqlBlobStore::setCacheExpiry ( int $cacheExpiry)
Parameters
int$cacheExpiryTime for which blobs can be cached, in seconds

Definition at line 131 of file SqlBlobStore.php.

◆ setCompressBlobs()

MediaWiki\Storage\SqlBlobStore::setCompressBlobs ( $compressBlobs)
Parameters
bool$compressBlobsWhether blobs should be compressed for storage

Definition at line 145 of file SqlBlobStore.php.

◆ setLegacyEncoding()

MediaWiki\Storage\SqlBlobStore::setLegacyEncoding ( string $legacyEncoding)

Set the legacy encoding to assume for blobs that do not have the utf-8 flag set.

Note
The second parameter, Language $language, was removed in 1.34.
Parameters
string$legacyEncodingThe legacy encoding to assume for blobs that are not marked as utf8.

Definition at line 165 of file SqlBlobStore.php.

◆ setUseExternalStore()

MediaWiki\Storage\SqlBlobStore::setUseExternalStore ( bool $useExternalStore)
Parameters
bool$useExternalStoreWhether to use the ExternalStore mechanism for storing blobs.

Definition at line 179 of file SqlBlobStore.php.

◆ splitBlobAddress()

static MediaWiki\Storage\SqlBlobStore::splitBlobAddress ( $address)
static

Splits a blob address into three parts: the schema, the ID, and parameters/flags.

Since
1.33
Parameters
string$address
Exceptions
InvalidArgumentException
Returns
array [ $schema, $id, $parameters ], with $parameters being an assoc array.

Definition at line 773 of file SqlBlobStore.php.

References wfCgiToArray().

Referenced by MediaWiki\Storage\SqlBlobStore\getTextIdFromAddress().

◆ storeBlob()

MediaWiki\Storage\SqlBlobStore::storeBlob ( $data,
$hints = [] )

Stores an arbitrary blob of data and returns an address that can be used with getBlob() to retrieve the same blob of data,.

Parameters
string$data
array$hintsAn array of hints.
Exceptions
BlobAccessException
Returns
string an address that can be used with getBlob() to retrieve the data.

Implements MediaWiki\Storage\BlobStore.

Definition at line 210 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\compressData(), DB_PRIMARY, and MediaWiki\Storage\SqlBlobStore\makeAddressFromTextId().

Member Data Documentation

◆ DEFAULT_TTL

const MediaWiki\Storage\SqlBlobStore::DEFAULT_TTL = 7 * 24 * 3600
Access: internal

Definition at line 56 of file SqlBlobStore.php.

◆ TEXT_CACHE_GROUP

const MediaWiki\Storage\SqlBlobStore::TEXT_CACHE_GROUP = 'revisiontext:10'

Definition at line 53 of file SqlBlobStore.php.


The documentation for this class was generated from the following file: