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