Make insertRedirectEntry() use upsert() to reduce contention
authorAaron Schulz <aschulz@wikimedia.org>
Thu, 10 Nov 2016 21:32:48 +0000 (13:32 -0800)
committerKrinkle <krinklemail@gmail.com>
Fri, 18 Nov 2016 19:04:39 +0000 (19:04 +0000)
Bug: T150453
Change-Id: I89705b954d5ddaf337e57fcfd02691edaa32ec83

includes/page/WikiPage.php

index ae92839..56a22c5 100644 (file)
@@ -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__
                        );
                }