MediaWiki REL1_40
|
RDBMS-based caching module. More...
Inherits MediumSpecificBagOStuff.
Public Member Functions | |
__construct ( $params) | |
Create a new backend instance from parameters injected by ObjectCache::newFromParams() | |
createTables () | |
Create the shard tables on all databases. | |
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 () | |
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. | |
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, $exptime=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) | |
setNewPreparedValues (array $valueByKey) | |
Stage a set of new key values for storage and estimate the amount of bytes needed. | |
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) | |
makeKeyInternal ( $keyspace, $components) | |
Make a cache key for the given keyspace and components. | |
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, logging a warning if it involves custom classes. | |
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 LOCK_* constant => value) | |
float | $maxLockSendDelay = 0.05 |
Seconds; maximum expected seconds for a lock ping to reach the backend. | |
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 51 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 144 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 1777 of file SqlBagOStuff.php.
References Wikimedia\Rdbms\IReadableDatabase\getType(), Wikimedia\Rdbms\IDatabase\query(), and Wikimedia\Rdbms\Platform\ISQLPlatform\tableName().
SqlBagOStuff::deleteAll | ( | ) |
Delete content of shard tables in every server.
Return true if the operation is successful, false otherwise.
Definition at line 1499 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 1348 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 227 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 241 of file SqlBagOStuff.php.
|
protected |
string | $key | |
int | $exptime | |
int | $flags |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 255 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 334 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 324 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 186 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 284 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 265 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 1516 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 207 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 309 of file SqlBagOStuff.php.
References BagOStuff\getCurrentTime().
SqlBagOStuff::doUnlock | ( | $key | ) |
string | $key |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 1537 of file SqlBagOStuff.php.
References Wikimedia\Rdbms\IDatabase\unlock().
SqlBagOStuff::expireAll | ( | ) |
Definition at line 1344 of file SqlBagOStuff.php.
References deleteObjectsExpiringBefore(), and BagOStuff\getCurrentTime().
|
protected |
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 MediumSpecificBagOStuff.
Definition at line 1554 of file SqlBagOStuff.php.
References BagOStuff\$keyspace.
|
protected |
mixed | $value |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 1580 of file SqlBagOStuff.php.
References serialize().
Referenced by serialize().
|
protected |
string | int | false | $value |
Reimplemented from MediumSpecificBagOStuff.
Definition at line 1594 of file SqlBagOStuff.php.
References MediumSpecificBagOStuff\isInteger(), and unserialize().
Referenced by doGet(), doGetMulti(), and unserialize().
|
protected |
Map of (shard index => Exception)
Definition at line 87 of file SqlBagOStuff.php.
|
protected |
Map of (shard index => UNIX timestamps)
Definition at line 85 of file SqlBagOStuff.php.
|
protected |
Map of (shard index => DB handle)
Definition at line 83 of file SqlBagOStuff.php.
|
protected |
DB name used for keys using the LoadBalancer.
Definition at line 57 of file SqlBagOStuff.php.
|
protected |
UNIX timestamp.
Definition at line 66 of file SqlBagOStuff.php.
|
protected |
Definition at line 55 of file SqlBagOStuff.php.
|
protected |
Injected function which returns a LoadBalancer.
Definition at line 53 of file SqlBagOStuff.php.
|
protected |
Whether multi-primary mode is enabled.
Definition at line 80 of file SqlBagOStuff.php.
|
protected |
Number of table shards to use on each server.
Definition at line 72 of file SqlBagOStuff.php.
|
protected |
Max expired rows to purge during randomized garbage collection.
Definition at line 70 of file SqlBagOStuff.php.
|
protected |
Average number of writes required to trigger garbage collection.
Definition at line 68 of file SqlBagOStuff.php.
|
protected |
Whether to use replicas instead of primaries (if using LoadBalancer)
Definition at line 78 of file SqlBagOStuff.php.
|
protected |
(server index => server config)
Definition at line 62 of file SqlBagOStuff.php.
|
protected |
(server index => tag/host name)
Definition at line 64 of file SqlBagOStuff.php.
|
protected |
Definition at line 76 of file SqlBagOStuff.php.
|
protected |
Whether to use the LoadBalancer.
Definition at line 59 of file SqlBagOStuff.php.
|
protected |
Definition at line 74 of file SqlBagOStuff.php.