resourceloader: Use upsert() instead of replace() for module_deps write
authorTimo Tijhof <krinklemail@gmail.com>
Tue, 14 Feb 2017 21:36:05 +0000 (13:36 -0800)
committerKrinkle <krinklemail@gmail.com>
Wed, 15 Feb 2017 20:52:19 +0000 (20:52 +0000)
This should perform better and reduce internal lock contention on the
database server.

Bug: T158105
Change-Id: I1acfb0630946283b317cb929e8d7c3b2af757ecf

includes/resourceloader/ResourceLoaderModule.php

index 8124f33..fd74a82 100644 (file)
@@ -476,14 +476,18 @@ abstract class ResourceLoaderModule implements LoggerAwareInterface {
                                }
 
                                $vary = $context->getSkin() . '|' . $context->getLanguage();
+                               // Use relative paths to avoid ghost entries when $IP changes (T111481)
+                               $deps = FormatJson::encode( self::getRelativePaths( $localFileRefs ) );
                                $dbw = wfGetDB( DB_MASTER );
-                               $dbw->replace( 'module_deps',
-                                       [ [ 'md_module', 'md_skin' ] ],
+                               $dbw->upsert( 'module_deps',
                                        [
                                                'md_module' => $this->getName(),
                                                'md_skin' => $vary,
-                                               // Use relative paths to avoid ghost entries when $IP changes (T111481)
-                                               'md_deps' => FormatJson::encode( self::getRelativePaths( $localFileRefs ) ),
+                                               'md_deps' => $deps,
+                                       ],
+                                       [ 'md_module', 'md_skin' ],
+                                       [
+                                               'md_deps' => $deps,
                                        ]
                                );