MediaWiki master
Wikimedia\Rdbms\IDBAccessObject Interface Reference

Interface for database access objects. More...

Inherited by Wikimedia\Rdbms\DBAccessObjectUtils.

Public Attributes

const READ_EXCLUSIVE = self::READ_LOCKING | 4
 Read from the primary/quorum and lock out other writers and locking readers.
 
const READ_LATEST = 1
 Read from the primary/quorum.
 
const READ_LATEST_IMMUTABLE = 8
 Read from a replica DB or without a quorum, using the primary/quorum on miss.
 
const READ_LOCKING = self::READ_LATEST | 2
 Read from the primary/quorum and lock out other writers.
 
const READ_NONE = -1
 Convenience constant for tracking how data was loaded (higher => higher QoS)
 
const READ_NORMAL = 0
 Constants for object loading bitfield flags (higher => higher QoS)
 

Detailed Description

Interface for database access objects.

Classes using this support a set of constants in a bitfield argument to their data loading functions. In general, objects should assume READ_NORMAL if no flags are explicitly given, though certain objects may assume READ_LATEST for common use case or legacy reasons.

There are four types of reads:

  • READ_NORMAL : Potentially cached read of data (e.g. from a replica DB or stale replica)
  • READ_LATEST : Up-to-date read as of transaction start (e.g. from primary or a quorum read)
  • READ_LOCKING : Up-to-date read as of now, that locks (shared) the records
  • READ_EXCLUSIVE : Up-to-date read as of now, that locks (exclusive) the records All record locks persist for the duration of the transaction.

A special constant READ_LATEST_IMMUTABLE can be used for fetching append-only data. Such data is either (a) on a replica DB and up-to-date or (b) not yet there, but on the primary/quorum. Because the data is append-only, it can never be stale on a replica DB if present.

Callers should use READ_NORMAL (or pass in no flags) unless the read determines a write. In theory, such cases may require READ_LOCKING, though to avoid contention, READ_LATEST is often good enough. If UPDATE race condition checks are required on a row and expensive code must run after the row is fetched to determine the UPDATE, it may help to do something like:

  • a) Start transaction
  • b) Read the current row with READ_LATEST
  • c) Determine the new row (expensive, so we don't want to hold locks now)
  • d) Re-read the current row with READ_LOCKING; if it changed then bail out
  • e) otherwise, do the updates
  • f) Commit transaction
Stability: stable
to implement
Since
1.20

Definition at line 59 of file IDBAccessObject.php.

Member Data Documentation

◆ READ_EXCLUSIVE

const Wikimedia\Rdbms\IDBAccessObject::READ_EXCLUSIVE = self::READ_LOCKING | 4

Read from the primary/quorum and lock out other writers and locking readers.

Definition at line 71 of file IDBAccessObject.php.

Referenced by Wikimedia\Rdbms\DBAccessObjectUtils\getDBOptions(), and Wikimedia\Rdbms\SelectQueryBuilder\recency().

◆ READ_LATEST

const Wikimedia\Rdbms\IDBAccessObject::READ_LATEST = 1

Read from the primary/quorum.

Definition at line 65 of file IDBAccessObject.php.

Referenced by Wikimedia\Rdbms\DBAccessObjectUtils\getDBOptions().

◆ READ_LATEST_IMMUTABLE

const Wikimedia\Rdbms\IDBAccessObject::READ_LATEST_IMMUTABLE = 8

Read from a replica DB or without a quorum, using the primary/quorum on miss.

Definition at line 74 of file IDBAccessObject.php.

Referenced by Wikimedia\Rdbms\DBAccessObjectUtils\getDBOptions().

◆ READ_LOCKING

const Wikimedia\Rdbms\IDBAccessObject::READ_LOCKING = self::READ_LATEST | 2

Read from the primary/quorum and lock out other writers.

Definition at line 68 of file IDBAccessObject.php.

Referenced by Wikimedia\Rdbms\DBAccessObjectUtils\getDBOptions(), and Wikimedia\Rdbms\SelectQueryBuilder\recency().

◆ READ_NONE

const Wikimedia\Rdbms\IDBAccessObject::READ_NONE = -1

Convenience constant for tracking how data was loaded (higher => higher QoS)

Definition at line 77 of file IDBAccessObject.php.

◆ READ_NORMAL

const Wikimedia\Rdbms\IDBAccessObject::READ_NORMAL = 0

Constants for object loading bitfield flags (higher => higher QoS)

Read from a replica DB/non-quorum

Definition at line 62 of file IDBAccessObject.php.


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