MediaWiki  master
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)
 
 add ( $key, $value, $exptime=0, $flags=0)
 
 delete ( $key, $flags=0)
 
 incr ( $key, $value=1)
 
 set ( $key, $value, $exptime=0, $flags=0)
 
 setLogger (LoggerInterface $logger)
 
- Public Member Functions inherited from BagOStuff
 __construct (array $params=[])
 $params include: More...
 
 add ( $key, $value, $exptime=0, $flags=0)
 Insert an item if it does not already exist. More...
 
 addBusyCallback (callable $workCallback)
 Let a callback be run to avoid wasting time on special blocking calls. More...
 
 changeTTL ( $key, $expiry=0, $flags=0)
 Change the expiration on a key if it exists. More...
 
 clearLastError ()
 Clear the "last error" registry. More...
 
 decr ( $key, $value=1)
 Decrease stored value of $key by $value while preserving its TTL. More...
 
 delete ( $key, $flags=0)
 Delete an item. More...
 
 deleteMulti (array $keys, $flags=0)
 Batch deletion. More...
 
 deleteObjectsExpiringBefore ( $date, $progressCallback=false)
 Delete all objects expiring before a certain date. More...
 
 get ( $key, $flags=0)
 Get an item with the given key. More...
 
 getLastError ()
 Get the "last error" registered; clearLastError() should be called manually. More...
 
 getMulti (array $keys, $flags=0)
 Get an associative array containing the item for each of the keys that have items. More...
 
 getQoS ( $flag)
 
 getScopedLock ( $key, $timeout=6, $expiry=30, $rclass='')
 Get a lightweight exclusive self-unlocking lock. More...
 
 getWithSetCallback ( $key, $ttl, $callback, $flags=0)
 Get an item with the given key, regenerating and setting it if not found. More...
 
 incr ( $key, $value=1)
 Increase stored value of $key by $value while preserving its TTL. More...
 
 incrWithInit ( $key, $ttl, $value=1, $init=1)
 Increase stored value of $key by $value while preserving its TTL. More...
 
 lock ( $key, $timeout=6, $expiry=6, $rclass='')
 Acquire an advisory lock on a key string. More...
 
 makeGlobalKey ( $class, $component=null)
 Make a global cache key. More...
 
 makeKey ( $class, $component=null)
 Make a cache key, scoped to this instance's keyspace. More...
 
 makeKeyInternal ( $keyspace, $args)
 Construct a cache key. More...
 
 merge ( $key, callable $callback, $exptime=0, $attempts=10, $flags=0)
 Merge changes into the existing cache value (possibly creating a new one) More...
 
 set ( $key, $value, $exptime=0, $flags=0)
 Set an item. More...
 
 setDebug ( $bool)
 
 setLogger (LoggerInterface $logger)
 
 setMockTime (&$time)
 
 setMulti (array $data, $exptime=0, $flags=0)
 Batch insertion/replace. More...
 
 unlock ( $key)
 Release an advisory lock on a key string. More...
 

Public Attributes

const DEFAULT_CONN_TIMEOUT = 1.2
 Default connection timeout in seconds. More...
 
const DEFAULT_REQ_TIMEOUT = 3.0
 Default request timeout. More...
 
- Public Attributes inherited from BagOStuff
const READ_LATEST = 1
 Bitfield constants for get()/getMulti() More...
 
const READ_VERIFIED = 2
 
const WRITE_CACHE_ONLY = 8
 
const WRITE_SYNC = 4
 Bitfield constants for set()/merge() More...
 
- Public Attributes inherited from IExpiringStore
const ATTR_EMULATION = 1
 
const ATTR_SYNCWRITES = 2
 
const ERR_NO_RESPONSE = 1
 
const ERR_NONE = 0
 
const ERR_UNEXPECTED = 3
 
const ERR_UNREACHABLE = 2
 
const QOS_EMULATION_SQL = 1
 
const QOS_SYNCWRITES_BE = 2
 
const QOS_SYNCWRITES_NONE = 1
 
const QOS_SYNCWRITES_QC = 3
 
const QOS_SYNCWRITES_SS = 4
 
const QOS_UNKNOWN = INF
 
const TTL_DAY = 86400
 
const TTL_HOUR = 3600
 
const TTL_INDEFINITE = 0
 
const TTL_MINUTE = 60
 
const TTL_MONTH = 2592000
 
const TTL_PROC_LONG = 30
 
const TTL_PROC_SHORT = 3
 
const TTL_SECOND = 1
 
const TTL_WEEK = 604800
 
const TTL_YEAR = 31536000
 

Protected Member Functions

 doGet ( $key, $flags=0, &$casToken=null)
 
 handleError ( $msg, $rcode, $rerr, $rhdrs, $rbody)
 Handle storage error. More...
 
- Protected Member Functions inherited from BagOStuff
 cas ( $casToken, $key, $value, $exptime=0, $flags=0)
 Check and set an item. More...
 
 convertToExpiry ( $exptime)
 Convert an optionally relative time to an absolute time. More...
 
 convertToRelative ( $exptime)
 Convert an optionally absolute expiry time to a relative time. More...
 
 debug ( $text)
 
 doGet ( $key, $flags=0, &$casToken=null)
 
 expiryIsRelative ( $exptime)
 
 getCurrentTime ()
 
 isInteger ( $value)
 Check if a value is an integer. More...
 
 mergeFlagMaps (array $bags)
 Merge the flag maps of one or more BagOStuff objects into a "lowest common denominator" map. More...
 
 mergeViaCas ( $key, $callback, $exptime=0, $attempts=10, $flags=0)
 
 setLastError ( $err)
 Set the "last error" registry. More...
 

Private Member Functions

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

Private Attributes

MultiHttpClient $client
 
array $extendedErrorBodyFields
 additional body fields to log on error, if possible More...
 
array $httpParams
 http parameters: readHeaders, writeHeaders, deleteHeaders, writeMethod More...
 
string $url
 REST URL to use for storage. More...
 

Additional Inherited Members

- Protected Attributes inherited from BagOStuff
callable null $asyncHandler
 
int [] $attrMap = []
 Map of (ATTR_* class constant => QOS_* class constant) More...
 
callable [] $busyCallbacks = []
 
string $keyspace = 'local'
 
int $lastError = self::ERR_NONE
 ERR_* class constant. More...
 
array [] $locks = []
 Lock tracking. More...
 
LoggerInterface $logger
 
int $syncTimeout
 Seconds. More...
 

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/'
);

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',
],
'extendedErrorBodyFields' => [ 'type', 'title', 'detail', 'instance' ]
);
$wgSessionCacheType = 'sessions';

Definition at line 47 of file RESTBagOStuff.php.

Constructor & Destructor Documentation

◆ __construct()

RESTBagOStuff::__construct (   $params)

Definition at line 81 of file RESTBagOStuff.php.

References $params, and as.

Member Function Documentation

◆ add()

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

Definition at line 166 of file RESTBagOStuff.php.

References $value.

◆ 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 208 of file RESTBagOStuff.php.

References $value.

Referenced by doGet(), and handleError().

◆ delete()

RESTBagOStuff::delete (   $key,
  $flags = 0 
)

Definition at line 175 of file RESTBagOStuff.php.

References $req, handleError(), and list.

◆ doGet()

RESTBagOStuff::doGet (   $key,
  $flags = 0,
$casToken = null 
)
protected

Definition at line 123 of file RESTBagOStuff.php.

References $req, $value, decodeBody(), false, handleError(), list, and null.

◆ 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, or an empty string on error
Exceptions
LogicException

Definition at line 220 of file RESTBagOStuff.php.

References $value.

Referenced by set().

◆ 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 237 of file RESTBagOStuff.php.

References $context, as, decodeBody(), and BagOStuff\setLastError().

Referenced by delete(), doGet(), and set().

◆ incr()

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

Definition at line 190 of file RESTBagOStuff.php.

References BagOStuff\isInteger().

◆ set()

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

Definition at line 149 of file RESTBagOStuff.php.

References $req, encodeBody(), handleError(), and list.

◆ setLogger()

RESTBagOStuff::setLogger ( LoggerInterface  $logger)

Definition at line 118 of file RESTBagOStuff.php.

Member Data Documentation

◆ $client

MultiHttpClient RESTBagOStuff::$client
private

Definition at line 63 of file RESTBagOStuff.php.

◆ $extendedErrorBodyFields

array RESTBagOStuff::$extendedErrorBodyFields
private

additional body fields to log on error, if possible

Definition at line 79 of file RESTBagOStuff.php.

◆ $httpParams

array RESTBagOStuff::$httpParams
private

http parameters: readHeaders, writeHeaders, deleteHeaders, writeMethod

Definition at line 74 of file RESTBagOStuff.php.

◆ $url

string RESTBagOStuff::$url
private

REST URL to use for storage.

Definition at line 69 of file RESTBagOStuff.php.

◆ DEFAULT_CONN_TIMEOUT

const RESTBagOStuff::DEFAULT_CONN_TIMEOUT = 1.2

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 53 of file RESTBagOStuff.php.

◆ DEFAULT_REQ_TIMEOUT

const RESTBagOStuff::DEFAULT_REQ_TIMEOUT = 3.0

Default request timeout.

Definition at line 58 of file RESTBagOStuff.php.


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