MediaWiki fundraising/REL1_35
RESTBagOStuff Class Reference

Interface to key-value storage behind an HTTP server. More...

Inheritance diagram for RESTBagOStuff:
Collaboration diagram for RESTBagOStuff:

Public Member Functions

 __construct ( $params)
 
 decr ( $key, $value=1, $flags=0)
 Decrease stored value of $key by $value while preserving its TTL.
 
 incr ( $key, $value=1, $flags=0)
 Increase stored value of $key by $value while preserving its TTL.
 
 setLogger (LoggerInterface $logger)
 
- 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.
 
 clearLastError ()
 Clear the "last error" registry.
 
 delete ( $key, $flags=0)
 Delete an item.
 
 deleteMulti (array $keys, $flags=0)
 Batch deletion.
 
 deleteObjectsExpiringBefore ( $timestamp, callable $progress=null, $limit=INF)
 Delete all objects expiring before a certain date.
 
 get ( $key, $flags=0)
 Get an item with the given key.
 
 getLastError ()
 Get the "last error" registered; clearLastError() should be called manually.
 
 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, $value=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, $expiry=6, $rclass='')
 Acquire an advisory lock on a key string.
 
 makeGlobalKey ( $class,... $components)
 Make a global cache key.
 
 makeKey ( $class,... $components)
 Make a cache key, scoped to this instance's keyspace.
 
 makeKeyInternal ( $keyspace, $args)
 Construct a cache key.
 
 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 $data, $exptime=0, $flags=0)
 Batch insertion/replace.
 
 setNewPreparedValues (array $valueByKey)
 Prepare values for storage and get their serialized sizes, or, estimate those sizes.
 
 unlock ( $key)
 Release an advisory lock on a key string.
 
- Public Member Functions inherited from BagOStuff
 getCurrentTime ()
 
 getLogger ()
 
 getScopedLock ( $key, $timeout=6, $expiry=30, $rclass='')
 Get a lightweight exclusive self-unlocking lock.
 
 getWithSetCallback ( $key, $exptime, $callback, $flags=0)
 Get an item with the given key, regenerating and setting it if not found.
 
 setDebug ( $enabled)
 
 setMockTime (&$time)
 

Protected Member Functions

 doAdd ( $key, $value, $exptime=0, $flags=0)
 Insert an item if it does not already exist.
 
 doDelete ( $key, $flags=0)
 Delete an item.
 
 doGet ( $key, $flags=0, &$casToken=null)
 
 doSet ( $key, $value, $exptime=0, $flags=0)
 Set an item.
 
 handleError ( $msg, $rcode, $rerr, $rhdrs, $rbody)
 Handle storage error.
 
- Protected Member Functions inherited from MediumSpecificBagOStuff
 cas ( $casToken, $key, $value, $exptime=0, $flags=0)
 Check and set an item.
 
 debug ( $text)
 
 doCas ( $casToken, $key, $value, $exptime=0, $flags=0)
 Check and set an item.
 
 doChangeTTL ( $key, $exptime, $flags)
 
 doDeleteMulti (array $keys, $flags=0)
 
 doGetMulti (array $keys, $flags=0)
 Get an associative array containing the item for each of the keys that have items.
 
 doSetMulti (array $data, $exptime=0, $flags=0)
 
 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.
 
 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)
 
 makeValueOrSegmentList ( $key, $value, $exptime, $flags)
 Determine the entry (inline or segment list) to store under a key to save the value.
 
 mergeViaCas ( $key, callable $callback, $exptime, $attempts, $flags)
 
 resolveSegments ( $key, $mainValue)
 Get and reassemble the chunks of blob at the given key.
 
 serialize ( $value)
 
 setLastError ( $err)
 Set the "last error" registry.
 
 unserialize ( $value)
 
- Protected Member Functions inherited from BagOStuff
 fieldHasFlags ( $field, $flags)
 
 mergeFlagMaps (array $bags)
 Merge the flag maps of one or more BagOStuff objects into a "lowest common denominator" map.
 

Private Member Functions

 decodeBody ( $body)
 Processes the response body.
 
 encodeBody ( $body)
 Prepares the request body (the "value" portion of our key/value store) for transmission.
 

Private Attributes

MultiHttpClient $client
 
array $extendedErrorBodyFields
 additional body fields to log on error, if possible
 
string $hmacKey
 Optional HMAC Key for protecting the serialized blob.
 
array $httpParams
 http parameters: readHeaders, writeHeaders, deleteHeaders, writeMethod
 
string $serializationType
 Optional serialization type to use.
 
string $url
 REST URL to use for storage.
 
const DEFAULT_CONN_TIMEOUT = 1.2
 Default connection timeout in seconds.
 
const DEFAULT_REQ_TIMEOUT = 3.0
 Default request timeout.
 

Additional Inherited Members

- Public Attributes inherited from BagOStuff
const READ_LATEST = 1
 Bitfield constants for get()/getMulti(); these are only advisory.
 
const READ_VERIFIED = 2
 
const WRITE_ALLOW_SEGMENTS = 16
 
const WRITE_BACKGROUND = 64
 
const WRITE_CACHE_ONLY = 8
 
const WRITE_PRUNE_SEGMENTS = 32
 
const WRITE_SYNC = 4
 Bitfield constants for set()/merge(); these are only advisory.
 
- Protected Attributes inherited from MediumSpecificBagOStuff
callable[] $busyCallbacks = []
 
string $keyspace = 'local'
 
int $lastError = self::ERR_NONE
 ERR_* class constant.
 
array[] $locks = []
 Lock tracking.
 
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.
 
int $syncTimeout
 Seconds.
 
- Protected Attributes inherited from BagOStuff
callable null $asyncHandler
 
int[] $attrMap = []
 Map of (ATTR_* class constant => QOS_* class constant)
 
bool $debugMode = false
 
LoggerInterface $logger
 

Detailed Description

Interface to key-value storage behind an HTTP server.

Uses URL of the form "baseURL/{KEY}" to store, fetch, and delete values.

E.g., when base URL is /sessions/v1, then the store would do:

PUT /sessions/v1/12345758

and fetch would do:

GET /sessions/v1/12345758

delete would do:

DELETE /sessions/v1/12345758

Minimal generic configuration:

$wgObjectCaches['sessions'] = array(
'class' => 'RESTBagOStuff',
'url' => 'http://localhost:7231/wikimedia.org/somepath/'
);
$wgObjectCaches
Advanced object cache configuration.

Configuration for Kask (session storage):

$wgObjectCaches['sessions'] = array(
'class' => 'RESTBagOStuff',
'url' => 'https://kaskhost:1234/sessions/v1/',
'httpParams' => [
'readHeaders' => [],
'writeHeaders' => [ 'content-type' => 'application/octet-stream' ],
'deleteHeaders' => [],
'writeMethod' => 'POST',
],
'serialization_type' => 'JSON',
'extendedErrorBodyFields' => [ 'type', 'title', 'detail', 'instance' ]
);
$wgSessionCacheType = 'sessions';
$wgSessionCacheType
The cache type for storing session data.

Definition at line 48 of file RESTBagOStuff.php.

Constructor & Destructor Documentation

◆ __construct()

RESTBagOStuff::__construct ( $params)

Definition at line 94 of file RESTBagOStuff.php.

References DEFAULT_CONN_TIMEOUT, and DEFAULT_REQ_TIMEOUT.

Member Function Documentation

◆ decodeBody()

RESTBagOStuff::decodeBody ( $body)
private

Processes the response body.

Parameters
string$bodyrequest body to process
Returns
mixed|bool the processed body, or false on error

Definition at line 228 of file RESTBagOStuff.php.

References $serialized, and MediumSpecificBagOStuff\unserialize().

Referenced by doGet(), and handleError().

◆ decr()

RESTBagOStuff::decr ( $key,
$value = 1,
$flags = 0 )

Decrease stored value of $key by $value while preserving its TTL.

Parameters
string$key
int$valueValue to subtract from $key (default: 1) [optional]
int$flagsBit field of class WRITE_* constants [optional]
Returns
int|bool New value or false on failure

Reimplemented from BagOStuff.

Definition at line 218 of file RESTBagOStuff.php.

References incr().

◆ doAdd()

RESTBagOStuff::doAdd ( $key,
$value,
$exptime = 0,
$flags = 0 )
protected

Insert an item if it does not already exist.

Parameters
string$key
mixed$value
int$exptime
int$flagsBitfield of BagOStuff::WRITE_* constants (since 1.33)
Returns
bool Success

Reimplemented from MediumSpecificBagOStuff.

Definition at line 182 of file RESTBagOStuff.php.

◆ doDelete()

RESTBagOStuff::doDelete ( $key,
$flags = 0 )
protected

Delete an item.

Parameters
string$key
int$flagsBitfield of BagOStuff::WRITE_* constants
Returns
bool True if the item was deleted or not found, false on failure

Reimplemented from MediumSpecificBagOStuff.

Definition at line 191 of file RESTBagOStuff.php.

References handleError().

◆ doGet()

RESTBagOStuff::doGet ( $key,
$flags = 0,
& $casToken = null )
protected
Parameters
string$key
int$flagsBitfield of BagOStuff::READ_* constants [optional]
mixed | null&$casTokenToken to use for check-and-set comparisons
Returns
mixed Returns false on failure or if the item does not exist

Reimplemented from MediumSpecificBagOStuff.

Definition at line 139 of file RESTBagOStuff.php.

References decodeBody(), and handleError().

◆ doSet()

RESTBagOStuff::doSet ( $key,
$value,
$exptime = 0,
$flags = 0 )
protected

Set an item.

Parameters
string$key
mixed$value
int$exptimeEither an interval in seconds or a unix timestamp for expiry
int$flagsBitfield of BagOStuff::WRITE_* constants
Returns
bool Success

Reimplemented from MediumSpecificBagOStuff.

Definition at line 165 of file RESTBagOStuff.php.

References encodeBody(), and handleError().

◆ encodeBody()

RESTBagOStuff::encodeBody ( $body)
private

Prepares the request body (the "value" portion of our key/value store) for transmission.

Parameters
string$bodyrequest body to prepare
Returns
string the prepared body
Exceptions
LogicException

Definition at line 263 of file RESTBagOStuff.php.

References serialize().

Referenced by doSet().

◆ handleError()

RESTBagOStuff::handleError ( $msg,
$rcode,
$rerr,
$rhdrs,
$rbody )
protected

Handle storage error.

Parameters
string$msgError message
int$rcodeError code from client
string$rerrError message from client
array$rhdrsResponse headers
string$rbodyError body from client (if any)
Returns
false

Definition at line 301 of file RESTBagOStuff.php.

References decodeBody(), and MediumSpecificBagOStuff\setLastError().

Referenced by doDelete(), doGet(), and doSet().

◆ incr()

RESTBagOStuff::incr ( $key,
$value = 1,
$flags = 0 )

Increase stored value of $key by $value while preserving its TTL.

Parameters
string$keyKey to increase
int$valueValue to add to $key (default: 1) [optional]
int$flagsBit field of class WRITE_* constants [optional]
Returns
int|bool New value or false on failure

Reimplemented from BagOStuff.

Definition at line 206 of file RESTBagOStuff.php.

References MediumSpecificBagOStuff\isInteger(), and BagOStuff\READ_LATEST.

Referenced by decr().

◆ setLogger()

RESTBagOStuff::setLogger ( LoggerInterface $logger)
Parameters
LoggerInterface$logger
Returns
void

Reimplemented from BagOStuff.

Definition at line 134 of file RESTBagOStuff.php.

References BagOStuff\$logger.

Member Data Documentation

◆ $client

MultiHttpClient RESTBagOStuff::$client
private

Definition at line 64 of file RESTBagOStuff.php.

◆ $extendedErrorBodyFields

array RESTBagOStuff::$extendedErrorBodyFields
private

additional body fields to log on error, if possible

Definition at line 92 of file RESTBagOStuff.php.

◆ $hmacKey

string RESTBagOStuff::$hmacKey
private

Optional HMAC Key for protecting the serialized blob.

If omitted no protection is done

Definition at line 87 of file RESTBagOStuff.php.

◆ $httpParams

array RESTBagOStuff::$httpParams
private

http parameters: readHeaders, writeHeaders, deleteHeaders, writeMethod

Definition at line 75 of file RESTBagOStuff.php.

◆ $serializationType

string RESTBagOStuff::$serializationType
private

Optional serialization type to use.

Allowed values: "PHP", "JSON".

Definition at line 81 of file RESTBagOStuff.php.

◆ $url

string RESTBagOStuff::$url
private

REST URL to use for storage.

Definition at line 70 of file RESTBagOStuff.php.

◆ DEFAULT_CONN_TIMEOUT

const RESTBagOStuff::DEFAULT_CONN_TIMEOUT = 1.2
private

Default connection timeout in seconds.

The kernel retransmits the SYN packet after 1 second, so 1.2 seconds allows for 1 retransmit without permanent failure.

Definition at line 54 of file RESTBagOStuff.php.

Referenced by __construct().

◆ DEFAULT_REQ_TIMEOUT

const RESTBagOStuff::DEFAULT_REQ_TIMEOUT = 3.0
private

Default request timeout.

Definition at line 59 of file RESTBagOStuff.php.

Referenced by __construct().


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