jenkins-bot has submitted this change and it was merged.

Change subject: Beef up and generalize IDBAccessObject constants a bit
......................................................................


Beef up and generalize IDBAccessObject constants a bit

Change-Id: Id8df6131df57b6a3e0aae90f4431ce0a467ec590
---
M includes/dao/IDBAccessObject.php
1 file changed, 19 insertions(+), 8 deletions(-)

Approvals:
  Gilles: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/dao/IDBAccessObject.php b/includes/dao/IDBAccessObject.php
index 3690735..c24962b 100644
--- a/includes/dao/IDBAccessObject.php
+++ b/includes/dao/IDBAccessObject.php
@@ -35,25 +35,36 @@
  *   - 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 slave and up-to-date or (b) not yet there, but on 
the master/quorum.
+ * Because the data is append-only, it can never be stale on a slave 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) Read the current row
- *   - b) Determine the new row (expensive, so we don't want to hold locks now)
- *   - c) Re-read the current row with READ_LOCKING; if it changed then bail 
out
- *   - d) otherwise, do the updates
+ *   - 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
  *
  * @since 1.20
  */
 interface IDBAccessObject {
-       // Constants for object loading bitfield flags (higher => higher QoS)
-       const READ_LATEST = 1; // read from the master
+       /** Constants for object loading bitfield flags (higher => higher QoS) 
*/
+       /** @var integer Read from a slave/non-quorum */
+       const READ_NORMAL = 0;
+       /** @var integer Read from the master/quorum */
+       const READ_LATEST = 1;
+       /* @var integer Read from the master/quorum and lock out other writers 
*/
        const READ_LOCKING = 3; // READ_LATEST (1) and "LOCK IN SHARE MODE" (2)
+       /** @var integer Read from the master/quorum and lock out other writers 
and locking readers */
        const READ_EXCLUSIVE = 7; // READ_LOCKING (3) and "FOR UPDATE" (4)
 
-       // Convenience constant for callers to explicitly request slave data
-       const READ_NORMAL = 0; // read from the slave
+       /** @var integer Read from a slave/non-quorum immutable data, using the 
master/quorum on miss */
+       const READ_LATEST_IMMUTABLE = 8;
 
        // Convenience constant for tracking how data was loaded (higher => 
higher QoS)
        const READ_NONE = -1; // not loaded yet (or the object was cleared)

-- 
To view, visit https://gerrit.wikimedia.org/r/302206
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Id8df6131df57b6a3e0aae90f4431ce0a467ec590
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <[email protected]>
Gerrit-Reviewer: Gilles <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to