From 766cdc944b94f56e8b7c4bc793fd7b39eceb8b65 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Sat, 24 Mar 2018 06:49:14 -0700 Subject: [PATCH] Use CONN_TRX_AUTO in WikiPage speculative revision ID callback This increases the odds of seeing newer data and not guessing a wrong revision ID due to getting raced out between stash and save. Change-Id: Icf0f9b9c4d559f4ddf05a4ca8679e3c4dca5620a --- includes/page/WikiPage.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index d4a17c82b3..cfeb331bc9 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -2117,7 +2117,12 @@ class WikiPage implements Page, IDBAccessObject { : DB_REPLICA; // T154554 $edit->popts->setSpeculativeRevIdCallback( function () use ( $dbIndex ) { - return 1 + (int)wfGetDB( $dbIndex )->selectField( + $lb = MediaWikiServices::getInstance()->getDBLoadBalancer(); + // Use a fresh connection in order to see the latest data, by avoiding + // stale data from REPEATABLE-READ snapshots. + $db = $lb->getConnectionRef( $dbIndex, [], false, $lb::CONN_TRX_AUTO ); + + return 1 + (int)$db->selectField( 'revision', 'MAX(rev_id)', [], -- 2.20.1