* @return array (MediaTransformOutput|bool, string|bool error message HTML)
*/
function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath ) {
- global $wgMemc, $wgAttemptFailureEpoch;
+ global $wgAttemptFailureEpoch;
- $key = wfMemcKey( 'attempt-failures', $wgAttemptFailureEpoch,
- $file->getRepo()->getName(), $file->getSha1(), md5( $thumbName ) );
+ $cache = ObjectCache::getLocalClusterInstance();
+ $key = $cache->makeKey(
+ 'attempt-failures',
+ $wgAttemptFailureEpoch,
+ $file->getRepo()->getName(),
+ $file->getSha1(),
+ md5( $thumbName )
+ );
// Check if this file keeps failing to render
- if ( $wgMemc->get( $key ) >= 4 ) {
+ if ( $cache->get( $key ) >= 4 ) {
return array( false, wfMessage( 'thumbnail_image-failure-limit', 4 ) );
}
$done = false;
// Record failures on PHP fatals in addition to caching exceptions
- register_shutdown_function( function () use ( &$done, $key ) {
+ register_shutdown_function( function () use ( $cache, &$done, $key ) {
if ( !$done ) { // transform() gave a fatal
- global $wgMemc;
// Randomize TTL to reduce stampedes
- $wgMemc->incrWithInit( $key, $wgMemc::TTL_HOUR + mt_rand( 0, 300 ) );
+ $cache->incrWithInit( $key, $cache::TTL_HOUR + mt_rand( 0, 300 ) );
}
} );
'doWork' => function () use ( $file, $params ) {
return $file->transform( $params, File::RENDER_NOW );
},
- 'getCachedWork' => function () use ( $file, $params, $thumbPath ) {
+ 'doCachedWork' => function () use ( $file, $params, $thumbPath ) {
// 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::RENDER_NOW )
: false; // retry once more in exclusive mode
},
- 'fallback' => function () {
- return wfMessage( 'generic-pool-error' )->parse();
- },
'error' => function ( Status $status ) {
- return $status->getHTML();
+ return wfMessage( 'generic-pool-error' )->parse() . '<hr>' . $status->getHTML();
}
)
);
if ( !$thumb || $thumb->isError() ) {
// Randomize TTL to reduce stampedes
- $wgMemc->incrWithInit( $key, $wgMemc::TTL_HOUR + mt_rand( 0, 300 ) );
+ $cache->incrWithInit( $key, $cache::TTL_HOUR + mt_rand( 0, 300 ) );
}
return array( $thumb, $errorHtml );