$params['width'] = $params['w'];
unset( $params['w'] );
}
+ if ( isset( $params['width'] ) && substr( $params['width'], -2 ) == 'px' ) {
+ // strip the px (pixel) suffix, if found
+ $params['width'] = substr( $width, 0, strlen( $width ) - 2 );
+ }
if ( isset( $params['p'] ) ) {
$params['page'] = $params['p'];
}
global $wgMemc, $wgAttemptFailureEpoch;
$key = wfMemcKey( 'attempt-failures', $wgAttemptFailureEpoch,
- $file->getRepo()->getName(), md5( $file->getName() ), md5( $thumbName ) );
+ $file->getRepo()->getName(), $file->getSha1(), md5( $thumbName ) );
// Check if this file keeps failing to render
if ( $wgMemc->get( $key ) >= 4 ) {
$thumb = false;
$errorHtml = false;
+ // guard thumbnail rendering with PoolCounter to avoid stampedes
+ // expensive files use a separate PoolCounter config so it is possible to set up a global limit on them
+ if ( $file->isExpensiveToThumbnail() ) {
+ $poolCounterType = 'FileRenderExpensive';
+ } else {
+ $poolCounterType = 'FileRender';
+ }
+
// Thumbnail isn't already there, so create the new thumbnail...
try {
- $work = new PoolCounterWorkViaCallback( 'FileRender', sha1( $file->getName() ),
+ $work = new PoolCounterWorkViaCallback( $poolCounterType, sha1( $file->getName() ),
array(
'doWork' => function() use ( $file, $params ) {
return $file->transform( $params, File::RENDER_NOW );
// If the worker that finished made this thumbnail then use it.
// Otherwise, it probably made a different thumbnail for this file.
return $file->getRepo()->fileExists( $thumbPath )
- ? $file->transform( $params )
+ ? $file->transform( $params, File::RENDER_NOW )
: false; // retry once more in exclusive mode
},
'fallback' => function() {