Hoo man has uploaded a new change for review.
https://gerrit.wikimedia.org/r/199609
Change subject: Introduce Revision::READ_WITH_FALLBACK, fix rollback diff view
......................................................................
Introduce Revision::READ_WITH_FALLBACK, fix rollback diff view
In DifferenceEngine we need to show a diff immediately after
an edit happened if someone did a rollback. To prevent this from
breaking in case we have multiple database servers and also to
not put to much load on the master databases again, I introduced
a Revision::READ_WITH_FALLBACK constant which can be used to
allow Revision::newFromConds to fallback on master if the revision
couldn't be found on a slave.
This follows up on 3c2bc32ae1775f5e875958b62d7181b4b5cfe24e
Change-Id: I08a16faa9e637c614c6d2fc9a10536c7b41685a8
Follows: 3c2bc32ae1775f5e875958b62d7181b4b5cfe24e
Bug: T93866
---
M includes/Revision.php
M includes/diff/DifferenceEngine.php
2 files changed, 17 insertions(+), 1 deletion(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/09/199609/1
diff --git a/includes/Revision.php b/includes/Revision.php
index 356cd32..901e81d 100644
--- a/includes/Revision.php
+++ b/includes/Revision.php
@@ -84,10 +84,16 @@
const RAW = 3;
/**
+ * Try reading from slave, but fallback to master if the revision
couldn't be found
+ */
+ const READ_WITH_FALLBACK = 8;
+
+ /**
* Load a page revision from a given revision ID number.
* Returns null if no such revision can be found.
*
* $flags include:
+ * Revision::READ_WITH_FALLBACK : Try selecting data from slave,
use master if it couldn't be found
* Revision::READ_LATEST : Select the data from the master
* Revision::READ_LOCKING : Select & lock the data from the master
*
@@ -105,6 +111,7 @@
* to that title, will return null.
*
* $flags include:
+ * Revision::READ_WITH_FALLBACK : Try selecting data from slave,
use master if it couldn't be found
* Revision::READ_LATEST : Select the data from the master
* Revision::READ_LOCKING : Select & lock the data from the master
*
@@ -125,6 +132,7 @@
} else {
// Use a join to get the latest revision
$conds[] = 'rev_id=page_latest';
+ // XXX: This doesn't take Revision::READ_WITH_FALLBACK
into account
$db = wfGetDB( ( $flags & self::READ_LATEST ) ?
DB_MASTER : DB_SLAVE );
return self::loadFromConds( $db, $conds, $flags );
}
@@ -136,6 +144,7 @@
* Returns null if no such revision can be found.
*
* $flags include:
+ * Revision::READ_WITH_FALLBACK : Try selecting data from slave,
use master if it couldn't be found
* Revision::READ_LATEST : Select the data from the master (since
1.20)
* Revision::READ_LOCKING : Select & lock the data from the master
*
@@ -152,6 +161,7 @@
} else {
// Use a join to get the latest revision
$conds[] = 'rev_id = page_latest';
+ // XXX: This doesn't take Revision::READ_WITH_FALLBACK
into account
$db = wfGetDB( ( $flags & self::READ_LATEST ) ?
DB_MASTER : DB_SLAVE );
return self::loadFromConds( $db, $conds, $flags );
}
@@ -306,6 +316,12 @@
private static function newFromConds( $conditions, $flags = 0 ) {
$db = wfGetDB( ( $flags & self::READ_LATEST ) ? DB_MASTER :
DB_SLAVE );
$rev = self::loadFromConds( $db, $conditions, $flags );
+
+ if ( $rev === null && wfGetLB()->getServerCount() > 1 && !(
$flags & self::READ_WITH_FALLBACK ) ) {
+ $dbw = wfGetDB( DB_MASTER );
+ $rev = self::loadFromConds( $dbw, $conditions, $flags );
+ }
+
if ( $rev ) {
$rev->mQueryFlags = $flags;
}
diff --git a/includes/diff/DifferenceEngine.php
b/includes/diff/DifferenceEngine.php
index 77bbd36..0a44df3 100644
--- a/includes/diff/DifferenceEngine.php
+++ b/includes/diff/DifferenceEngine.php
@@ -1232,7 +1232,7 @@
// Load the new revision object
if ( $this->mNewid ) {
- $this->mNewRev = Revision::newFromId( $this->mNewid );
+ $this->mNewRev = Revision::newFromId( $this->mNewid,
Revision::READ_WITH_FALLBACK );
} else {
$this->mNewRev = Revision::newFromTitle(
$this->getTitle(),
--
To view, visit https://gerrit.wikimedia.org/r/199609
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I08a16faa9e637c614c6d2fc9a10536c7b41685a8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Hoo man <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits