From 1d15085bb3a2fb8e1ee1c023afedcf2a404e5299 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 27 Jan 2016 20:01:16 -0800 Subject: [PATCH] resourceloader: Reduce module_deps write slams after deployments Bug: T124649 Change-Id: I8d45e538f7d3d098a89950e5777e0984c90d7e51 --- includes/resourceloader/ResourceLoaderModule.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/includes/resourceloader/ResourceLoaderModule.php b/includes/resourceloader/ResourceLoaderModule.php index 113fc84aff..0aa3be7472 100644 --- a/includes/resourceloader/ResourceLoaderModule.php +++ b/includes/resourceloader/ResourceLoaderModule.php @@ -433,16 +433,28 @@ abstract class ResourceLoaderModule implements LoggerAwareInterface { try { // If the list has been modified since last time we cached it, update the cache if ( $localFileRefs !== $this->getFileDependencies( $context ) ) { + $cache = ObjectCache::getLocalClusterInstance(); + $key = $cache->makeKey( __METHOD__, $this->getName() ); + $scopeLock = $cache->getScopedLock( $key, 0 ); + if ( !$scopeLock ) { + return; // T124649; avoid write slams + } + $vary = $context->getSkin() . '|' . $context->getLanguage(); $dbw = wfGetDB( DB_MASTER ); $dbw->replace( 'module_deps', - array( array( 'md_module', 'md_skin' ) ), array( + array( array( 'md_module', 'md_skin' ) ), + array( '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 ) ), ) ); + + $dbw->onTransactionIdle( function () use ( &$scopeLock ) { + ScopedCallback::consume( $scopeLock ); // release after commit + } ); } } catch ( Exception $e ) { wfDebugLog( 'resourceloader', __METHOD__ . ": failed to update DB: $e" ); -- 2.20.1