|
MediaWiki REL1_39
|
RDBMS-based caching module. More...


Public Member Functions | |
| __construct ( $params) | |
| Create a new backend instance from parameters injected by ObjectCache::newFromParams() | |
| createTables () | |
| Create the shard tables on all databases. | |
| decr ( $key, $value=1, $flags=0) | |
| Decrease stored value of $key by $value while preserving its TTL. | |
| deleteAll () | |
| Delete content of shard tables in every server. | |
| deleteObjectsExpiringBefore ( $timestamp, callable $progress=null, $limit=INF, string $tag=null) | |
| Delete all objects expiring before a certain date. | |
| doChangeTTLMulti (array $keys, $exptime, $flags=0) | |
| doLock ( $key, $timeout=6, $exptime=6) | |
| doUnlock ( $key) | |
| expireAll () | |
| incr ( $key, $value=1, $flags=0) | |
| Increase stored value of $key by $value while preserving its TTL. | |
| makeKeyInternal ( $keyspace, $components) | |
| Make a cache key for the given keyspace and components. | |
Public Member Functions inherited from MediumSpecificBagOStuff | |
| __construct (array $params=[]) | |
| add ( $key, $value, $exptime=0, $flags=0) | |
| Insert an item if it does not already exist. | |
| addBusyCallback (callable $workCallback) | |
| Let a callback be run to avoid wasting time on special blocking calls. | |
| changeTTL ( $key, $exptime=0, $flags=0) | |
| Change the expiration on a key if it exists. | |
| changeTTLMulti (array $keys, $exptime, $flags=0) | |
| Change the expiration of multiple keys that exist. | |
| delete ( $key, $flags=0) | |
| Delete an item. | |
| deleteMulti (array $keys, $flags=0) | |
| Batch deletion. | |
| get ( $key, $flags=0) | |
| Get an item with the given key. | |
| getMulti (array $keys, $flags=0) | |
| Get an associative array containing the item for each of the keys that have items. | |
| getQoS ( $flag) | |
| getSegmentationSize () | |
| getSegmentedValueMaxSize () | |
| incrWithInit ( $key, $exptime, $step=1, $init=null, $flags=0) | |
| Increase the value of the given key (no TTL change) if it exists or create it otherwise. | |
| lock ( $key, $timeout=6, $exptime=6, $rclass='') | |
| makeGlobalKey ( $collection,... $components) | |
| Make a cache key for the default keyspace and given components. | |
| makeKey ( $collection,... $components) | |
| Make a cache key for the global keyspace and given components. | |
| merge ( $key, callable $callback, $exptime=0, $attempts=10, $flags=0) | |
| Merge changes into the existing cache value (possibly creating a new one) | |
| set ( $key, $value, $exptime=0, $flags=0) | |
| Set an item. | |
| setMulti (array $valueByKey, $exptime=0, $flags=0) | |
| Batch insertion/replace. | |
| setNewPreparedValues (array $valueByKey) | |
| Stage a set of new key values for storage and estimate the amount of bytes needed. | |
| unlock ( $key) | |
| Release an advisory lock on a key string. | |
Public Member Functions inherited from BagOStuff | |
| clearLastError () | |
| Clear the "last error" registry. | |
| getCurrentTime () | |
| getLastError ( $watchPoint=0) | |
| Get the "last error" registry. | |
| getLogger () | |
| getScopedLock ( $key, $timeout=6, $expiry=30, $rclass='') | |
| Get a lightweight exclusive self-unlocking lock. | |
| getWithSetCallback ( $key, $exptime, $callback, $flags=0) | |
| Get an item, regenerating and setting it if not found. | |
| isKeyGlobal ( $key) | |
| Check whether a cache key is in the global keyspace. | |
| registerWrapperInfoForStats (string $prefixComponent, string $statsGroup, callable $collectionCallback) | |
| Register info about a caching layer class that uses BagOStuff as a backing store. | |
| setLogger (LoggerInterface $logger) | |
| setMockTime (&$time) | |
| watchErrors () | |
| Get a "watch point" token that can be used to get the "last error" to occur after now. | |
Protected Member Functions | |
| doAdd ( $key, $value, $exptime=0, $flags=0) | |
| Insert an item if it does not already exist. | |
| doCas ( $casToken, $key, $value, $exptime=0, $flags=0) | |
| Set an item if the current CAS token matches the provided CAS token. | |
| doChangeTTL ( $key, $exptime, $flags) | |
| doDelete ( $key, $flags=0) | |
| Delete an item. | |
| doDeleteMulti (array $keys, $flags=0) | |
| doGet ( $key, $flags=0, &$casToken=null) | |
| Get an item. | |
| doGetMulti (array $keys, $flags=0) | |
| Get an associative array containing the item for each of the keys that have items. | |
| doIncrWithInit ( $key, $exptime, $step, $init, $flags) | |
| doSet ( $key, $value, $exptime=0, $flags=0) | |
| Set an item. | |
| doSetMulti (array $data, $exptime=0, $flags=0) | |
| serialize ( $value) | |
| unserialize ( $value) | |
Protected Member Functions inherited from MediumSpecificBagOStuff | |
| cas ( $casToken, $key, $value, $exptime=0, $flags=0) | |
| Set an item if the current CAS token matches the provided CAS token. | |
| convertGenericKey ( $key) | |
| Convert a "generic" reversible cache key into one for this cache. | |
| debug ( $text) | |
| getExpirationAsTimestamp ( $exptime) | |
| Convert an optionally relative timestamp to an absolute time. | |
| getExpirationAsTTL ( $exptime) | |
| Convert an optionally absolute expiry time to a relative time. | |
| getSerialized ( $value, $key) | |
| Get the serialized form a value, using any applicable prepared value. | |
| guessSerialSizeOfValues (array $values) | |
| Estimate the size of a each variable once serialized. | |
| guessSerialValueSize ( $value, $depth=0, &$loops=0) | |
| Estimate the size of a variable once serialized. | |
| isInteger ( $value) | |
| Check if a value is an integer. | |
| isRelativeExpiration ( $exptime) | |
| makeLockKey ( $key) | |
| makeValueOrSegmentList ( $key, $value, $exptime, $flags, &$ok) | |
| Make the entry to store at a key (inline or segment list), storing any segments. | |
| mergeViaCas ( $key, callable $callback, $exptime, $attempts, $flags) | |
| resolveSegments ( $key, $mainValue) | |
| Get and reassemble the chunks of blob at the given key. | |
| tokensMatch ( $value, $otherValue) | |
| updateOpStats (string $op, array $keyInfo) | |
Protected Member Functions inherited from BagOStuff | |
| componentsFromGenericKey ( $key) | |
| Extract the components from a "generic" reversible cache key. | |
| determineKeyPrefixForStats ( $key) | |
| fieldHasFlags ( $field, $flags) | |
| genericKeyFromComponents (... $components) | |
| At a minimum, there must be a keyspace and collection name component. | |
| mergeFlagMaps (array $bags) | |
| Merge the flag maps of one or more BagOStuff objects into a "lowest common denominator" map. | |
| proxyCall (string $method, int $arg0Sig, int $resSig, array $genericArgs, BagOStuff $wrapper) | |
| Call a method on behalf of wrapper BagOStuff instance that uses "generic" keys. | |
| setLastError ( $error) | |
| Set the "last error" registry due to a problem encountered during an attempted operation. | |
Protected Attributes | |
| Exception[] | $connFailureErrors = [] |
| Map of (shard index => Exception) | |
| float[] | $connFailureTimes = [] |
| Map of (shard index => UNIX timestamps) | |
| IMaintainableDatabase[] | $conns |
| Map of (shard index => DB handle) | |
| string false null | $dbDomain |
| DB name used for keys using the LoadBalancer. | |
| float | $lastGarbageCollect = 0 |
| UNIX timestamp. | |
| ILoadBalancer null | $loadBalancer |
| callable null | $loadBalancerCallback |
| Injected function which returns a LoadBalancer. | |
| bool | $multiPrimaryMode |
| Whether multi-primary mode is enabled. | |
| int | $numTableShards = 1 |
| Number of table shards to use on each server. | |
| int | $purgeLimit = 100 |
| Max expired rows to purge during randomized garbage collection. | |
| int | $purgePeriod = 10 |
| Average number of writes required to trigger garbage collection. | |
| bool | $replicaOnly |
| Whether to use replicas instead of primaries (if using LoadBalancer) | |
| array[] | $serverInfos = [] |
| (server index => server config) | |
| string[] | $serverTags = [] |
| (server index => tag/host name) | |
| string | $tableName = 'objectcache' |
| bool | $useLB = false |
| Whether to use the LoadBalancer. | |
| int | $writeBatchSize = 100 |
Protected Attributes inherited from MediumSpecificBagOStuff | |
| array< string, array > | $locks = [] |
| Map of (key => (class, depth, expiry) | |
| array[] | $preparedValues = [] |
| Map of (key => (PHP variable value, serialized value)) | |
| int | $segmentationSize |
| Bytes; chunk size of segmented cache values. | |
| int | $segmentedValueMaxSize |
| Bytes; maximum total size of a segmented cache value. | |
| const | LOCK_DEPTH = 1 |
| const | LOCK_EXPIRY = 3 |
| const | LOCK_RCLASS = 0 |
| const | LOCK_TIME = 2 |
| const | METRIC_OP_ADD = 'add' |
| const | METRIC_OP_CAS = 'cas' |
| const | METRIC_OP_CHANGE_TTL = 'change_ttl' |
| const | METRIC_OP_DECR = 'decr' |
| const | METRIC_OP_DELETE = 'delete' |
| const | METRIC_OP_GET = 'get' |
| const | METRIC_OP_INCR = 'incr' |
| const | METRIC_OP_SET = 'set' |
| const | PASS_BY_REF = -1 |
| Idiom for doGet() to return extra information by reference. | |
Protected Attributes inherited from BagOStuff | |
| callable null | $asyncHandler |
| int[] | $attrMap = [] |
| Map of (BagOStuff:ATTR_* constant => BagOStuff:QOS_* constant) | |
| string | $keyspace |
| Default keyspace; used by makeKey() | |
| int | $lastError = self::ERR_NONE |
| BagOStuff:ERR_* constant of the last error that occurred. | |
| int | $lastErrorId = 0 |
| Error event sequence number of the last error that occurred. | |
| LoggerInterface | $logger |
| StatsdDataFactoryInterface | $stats |
| array< string, array > | $wrapperInfoByPrefix = [] |
| Cache key processing callbacks and info for metrics. | |
Additional Inherited Members | |
Public Attributes inherited from BagOStuff | |
| const | MAX_CONFLICTS_ONE = 1 |
| Abort after the first merge conflict. | |
| const | READ_LATEST = 1 |
| Bitfield constants for get()/getMulti(); these are only advisory. | |
| const | READ_VERIFIED = 2 |
| Promise that the caller handles detection of staleness. | |
| const | WRITE_ALLOW_SEGMENTS = 16 |
| Allow partitioning of the value if it is a large string. | |
| const | WRITE_BACKGROUND = 64 |
| If supported, do not block on write operation completion; instead, treat writes as succesful based on whether they could be buffered. | |
| const | WRITE_CACHE_ONLY = 8 |
| Bitfield constants for set()/merge(); these are only advisory. | |
| const | WRITE_PRUNE_SEGMENTS = 32 |
| Delete all the segments if the value is partitioned. | |
Public Attributes inherited from Wikimedia\LightweightObjectStore\StorageAwareness | |
| const | ATTR_DURABILITY = 2 |
| Durability of writes; see QOS_DURABILITY_* (higher means stronger) | |
| const | ATTR_EMULATION = 1 |
| Emulation/fallback mode; see QOS_EMULATION_*; higher is better. | |
| const | ERR_NO_RESPONSE = 1 |
| Storage medium failed to yield a complete response to an operation. | |
| const | ERR_NONE = 0 |
| No storage medium error. | |
| const | ERR_UNEXPECTED = 3 |
| Storage medium operation failed due to usage limitations or an I/O error. | |
| const | ERR_UNREACHABLE = 2 |
| Storage medium could not be reached to establish a connection. | |
| const | QOS_DURABILITY_DISK = 4 |
| Data is saved to disk and writes do not usually block on fsync() | |
| const | QOS_DURABILITY_NONE = 1 |
| Data is never saved to begin with (blackhole store) | |
| const | QOS_DURABILITY_RDBMS = 5 |
| Data is saved to disk and writes usually block on fsync(), like a standard RDBMS. | |
| const | QOS_DURABILITY_SCRIPT = 2 |
| Data is lost at the end of the current web request or CLI script. | |
| const | QOS_DURABILITY_SERVICE = 3 |
| Data is lost once the service storing the data restarts. | |
| const | QOS_EMULATION_SQL = 1 |
| Fallback disk-based SQL store. | |
| const | QOS_UNKNOWN = INF |
| Generic "unknown" value; useful for comparisons (always "good enough") | |
Static Protected Attributes inherited from BagOStuff | |
| static int | $nextErrorMonitorId = 1 |
| Next sequence number to use for watch/error events. | |
RDBMS-based caching module.
The following database sharding schemes are supported:
The following database replication topologies are supported:
Definition at line 50 of file SqlBagOStuff.php.
| SqlBagOStuff::__construct | ( | $params | ) |
Create a new backend instance from parameters injected by ObjectCache::newFromParams()
The database servers must be provided by either the "server" parameter, the "servers" parameter or the "loadBalancer" parameter.
The parameters are as described at \\MediaWiki\\MainConfigSchema::ObjectCaches except that:
| array | $params |
|
Definition at line 143 of file SqlBagOStuff.php.
| SqlBagOStuff::createTables | ( | ) |
Create the shard tables on all databases.
This is typically called manually by a sysadmin via eval.php, e.g. for ParserCache:
This is different from $services->getParserCache()->getCacheStorage()->createTables(), which would use the backend set via $wgParserCacheType, which shouldn't be set yet for the backend you are creating shard tables on. The expectation is to first add the new backend to $wgObjectCaches, run the above, and then enable it for live ParserCache traffic by setting $wgParserCacheType.
Definition at line 1821 of file SqlBagOStuff.php.
References Wikimedia\Rdbms\IDatabase\getType(), Wikimedia\Rdbms\IDatabase\query(), and Wikimedia\Rdbms\Platform\ISQLPlatform\tableName().
| SqlBagOStuff::decr | ( | $key, | |
| $value = 1, | |||
| $flags = 0 ) |
Decrease stored value of $key by $value while preserving its TTL.
| string | $key | |
| int | $value | Value to subtract from $key (default: 1) [optional] |
| int | $flags | Bit field of class WRITE_* constants [optional] |
Reimplemented from BagOStuff.
Definition at line 293 of file SqlBagOStuff.php.
| SqlBagOStuff::deleteAll | ( | ) |
Delete content of shard tables in every server.
Return true if the operation is successful, false otherwise.
Definition at line 1542 of file SqlBagOStuff.php.
References Wikimedia\Rdbms\IDatabase\delete().
| SqlBagOStuff::deleteObjectsExpiringBefore | ( | $timestamp, | |
| callable | $progress = null, | ||
| $limit = INF, | |||
| string | $tag = null ) |
Delete all objects expiring before a certain date.
| string | int | $timestamp | The reference date in MW or TS_UNIX format |
| callable | null | $progress | Optional, a function which will be called regularly during long-running operations with the percentage progress as the first parameter. [optional] |
| int | float | $limit | Maximum number of keys to delete [default: INF] |
| string | null | $tag | Tag to purge a single shard only. This is only supported when server tags are used in configuration. |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 1391 of file SqlBagOStuff.php.
Referenced by expireAll().
|
protected |
Insert an item if it does not already exist.
| string | $key | |
| mixed | $value | |
| int | $exptime | |
| int | $flags | Bitfield of BagOStuff::WRITE_* constants (since 1.33) |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 228 of file SqlBagOStuff.php.
|
protected |
Set an item if the current CAS token matches the provided CAS token.
| mixed | $casToken | CAS token from an existing version of the key |
| string | $key | |
| mixed | $value | |
| int | $exptime | Either an interval in seconds or a unix timestamp for expiry |
| int | $flags | Bitfield of BagOStuff::WRITE_* constants |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 243 of file SqlBagOStuff.php.
|
protected |
| string | $key | |
| int | $exptime | |
| int | $flags |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 258 of file SqlBagOStuff.php.
References BagOStuff\getCurrentTime().
| SqlBagOStuff::doChangeTTLMulti | ( | array | $keys, |
| $exptime, | |||
| $flags = 0 ) |
| string[] | $keys | List of keys |
| int | $exptime | TTL or UNIX timestamp |
| int | $flags | Bitfield of BagOStuff::WRITE_* constants |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 382 of file SqlBagOStuff.php.
References $keys, and BagOStuff\getCurrentTime().
|
protected |
Delete an item.
| string | $key | |
| int | $flags | Bitfield of BagOStuff::WRITE_* constants |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 217 of file SqlBagOStuff.php.
References BagOStuff\getCurrentTime().
|
protected |
| string[] | $keys | List of keys |
| int | $flags | Bitfield of BagOStuff::WRITE_* constants |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 371 of file SqlBagOStuff.php.
References $keys, and BagOStuff\getCurrentTime().
|
protected |
Get an item.
The CAS token should be null if the key does not exist or the value is corrupt
| string | $key | |
| int | $flags | Bitfield of BagOStuff::READ_* constants [optional] |
| mixed | &$casToken | CAS token if MediumSpecificBagOStuff::PASS_BY_REF [returned] |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 185 of file SqlBagOStuff.php.
References unserialize(), and MediumSpecificBagOStuff\updateOpStats().
|
protected |
Get an associative array containing the item for each of the keys that have items.
| string[] | $keys | List of keys |
| int | $flags | Bitfield; supports READ_LATEST [optional] |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 330 of file SqlBagOStuff.php.
References $keys, unserialize(), and MediumSpecificBagOStuff\updateOpStats().
|
protected |
| string | $key | |
| int | $exptime | |
| int | $step | |
| int | $init | |
| int | $flags |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 269 of file SqlBagOStuff.php.
References BagOStuff\getCurrentTime().
| SqlBagOStuff::doLock | ( | $key, | |
| $timeout = 6, | |||
| $exptime = 6 ) |
| string | $key | |
| int | $timeout | Lock wait timeout; 0 for non-blocking [optional] |
| int | $exptime | Lock time-to-live 1 day maximum [optional] |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 1560 of file SqlBagOStuff.php.
References Wikimedia\Rdbms\IDatabase\lock().
|
protected |
Set an item.
| string | $key | |
| mixed | $value | |
| int | $exptime | Either an interval in seconds or a unix timestamp for expiry |
| int | $flags | Bitfield of BagOStuff::WRITE_* constants |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 206 of file SqlBagOStuff.php.
References BagOStuff\getCurrentTime().
|
protected |
| mixed[] | $data | Map of (key => value) |
| int | $exptime | Either an interval in seconds or a unix timestamp for expiry |
| int | $flags | Bitfield of BagOStuff::WRITE_* constants |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 355 of file SqlBagOStuff.php.
References BagOStuff\getCurrentTime().
| SqlBagOStuff::doUnlock | ( | $key | ) |
| string | $key |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 1581 of file SqlBagOStuff.php.
References Wikimedia\Rdbms\IDatabase\unlock().
| SqlBagOStuff::expireAll | ( | ) |
Definition at line 1387 of file SqlBagOStuff.php.
References deleteObjectsExpiringBefore(), and BagOStuff\getCurrentTime().
| SqlBagOStuff::incr | ( | $key, | |
| $value = 1, | |||
| $flags = 0 ) |
Increase stored value of $key by $value while preserving its TTL.
| string | $key | Key to increase |
| int | $value | Value to add to $key (default: 1) [optional] |
| int | $flags | Bit field of class WRITE_* constants [optional] |
Reimplemented from BagOStuff.
Definition at line 289 of file SqlBagOStuff.php.
| SqlBagOStuff::makeKeyInternal | ( | $keyspace, | |
| $components ) |
Make a cache key for the given keyspace and components.
Long components might be converted to respective hashes due to size constraints. In extreme cases, all of them might be combined into a single hash component.
| string | $keyspace | Keyspace component |
| string[] | int[] | $components | Key components (key collection name first) |
Reimplemented from BagOStuff.
Definition at line 1598 of file SqlBagOStuff.php.
References BagOStuff\$keyspace.
|
protected |
| mixed | $value |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 1624 of file SqlBagOStuff.php.
References serialize().
|
protected |
| string | int | false | $value |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 1638 of file SqlBagOStuff.php.
References MediumSpecificBagOStuff\isInteger(), and unserialize().
|
protected |
Map of (shard index => Exception)
Definition at line 86 of file SqlBagOStuff.php.
|
protected |
Map of (shard index => UNIX timestamps)
Definition at line 84 of file SqlBagOStuff.php.
|
protected |
Map of (shard index => DB handle)
Definition at line 82 of file SqlBagOStuff.php.
|
protected |
DB name used for keys using the LoadBalancer.
Definition at line 56 of file SqlBagOStuff.php.
|
protected |
UNIX timestamp.
Definition at line 65 of file SqlBagOStuff.php.
|
protected |
Definition at line 54 of file SqlBagOStuff.php.
|
protected |
Injected function which returns a LoadBalancer.
Definition at line 52 of file SqlBagOStuff.php.
|
protected |
Whether multi-primary mode is enabled.
Definition at line 79 of file SqlBagOStuff.php.
|
protected |
Number of table shards to use on each server.
Definition at line 71 of file SqlBagOStuff.php.
|
protected |
Max expired rows to purge during randomized garbage collection.
Definition at line 69 of file SqlBagOStuff.php.
|
protected |
Average number of writes required to trigger garbage collection.
Definition at line 67 of file SqlBagOStuff.php.
|
protected |
Whether to use replicas instead of primaries (if using LoadBalancer)
Definition at line 77 of file SqlBagOStuff.php.
|
protected |
(server index => server config)
Definition at line 61 of file SqlBagOStuff.php.
|
protected |
(server index => tag/host name)
Definition at line 63 of file SqlBagOStuff.php.
|
protected |
Definition at line 75 of file SqlBagOStuff.php.
|
protected |
Whether to use the LoadBalancer.
Definition at line 58 of file SqlBagOStuff.php.
|
protected |
Definition at line 73 of file SqlBagOStuff.php.