From bee07f1578675a1ba8fd3248f406495b1b6b5016 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Thu, 10 Nov 2016 13:32:48 -0800 Subject: [PATCH] Make insertRedirectEntry() use upsert() to reduce contention Bug: T150453 Change-Id: I89705b954d5ddaf337e57fcfd02691edaa32ec83 --- includes/page/WikiPage.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index ae92839cfe..56a22c55dd 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -938,8 +938,8 @@ class WikiPage implements Page, IDBAccessObject { $dbw->startAtomic( __METHOD__ ); if ( !$oldLatest || $oldLatest == $this->lockAndGetLatest() ) { - $dbw->replace( 'redirect', - [ 'rd_from' ], + $dbw->upsert( + 'redirect', [ 'rd_from' => $this->getId(), 'rd_namespace' => $rt->getNamespace(), @@ -947,6 +947,13 @@ class WikiPage implements Page, IDBAccessObject { 'rd_fragment' => $rt->getFragment(), 'rd_interwiki' => $rt->getInterwiki(), ], + [ 'rd_from' ], + [ + 'rd_namespace' => $rt->getNamespace(), + 'rd_title' => $rt->getDBkey(), + 'rd_fragment' => $rt->getFragment(), + 'rd_interwiki' => $rt->getInterwiki(), + ], __METHOD__ ); } -- 2.20.1