resourceloader: Reduce module_deps write slams after deployments

Bug: T124649
Change-Id: I8d45e538f7d3d098a89950e5777e0984c90d7e51
This commit is contained in:
Aaron Schulz 2016-01-27 20:01:16 -08:00
parent 7c4bd85d21
commit 1d15085bb3

View file

@ -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" );