Don't wait for thumbnails that take long to render
authorGilles Dubuc <gilles@wikimedia.org>
Mon, 3 Sep 2018 09:09:08 +0000 (11:09 +0200)
committerGilles Dubuc <gilles@wikimedia.org>
Wed, 5 Sep 2018 19:13:54 +0000 (21:13 +0200)
The prerendering job is an optimization, should
thumbnails fail to prerender, they will be reattempted
when a user views them again.

Bug: T203135
Change-Id: I2907bf10a2d22af9beffc530856f458a6adbfe45

includes/jobqueue/jobs/ThumbnailRenderJob.php

index 49eabbb..f87a336 100644 (file)
@@ -103,8 +103,10 @@ class ThumbnailRenderJob extends Job {
 
                wfDebug( __METHOD__ . ": hitting url {$thumbUrl}\n" );
 
+               // T203135 We don't wait for the request to complete, as this is mostly fire & forget.
+               // Looking at the HTTP status of requests that take less than 1s is a sanity check.
                $request = MWHttpRequest::factory( $thumbUrl,
-                       [ 'method' => 'HEAD', 'followRedirects' => true ],
+                       [ 'method' => 'HEAD', 'followRedirects' => true, 'timeout' => 1 ],
                        __METHOD__
                );
 
@@ -122,6 +124,10 @@ class ThumbnailRenderJob extends Job {
                        return true;
                } elseif ( $statusCode ) {
                        $this->setLastError( __METHOD__ . ": incorrect HTTP status $statusCode when hitting $thumbUrl" );
+               } elseif ( $status->hasMessage( 'http-timed-out' ) ) {
+                       // T203135 we ignore timeouts, as it would be inefficient for this job to wait for
+                       // minutes for the slower thumbnails to complete.
+                       return true;
                } else {
                        $this->setLastError( __METHOD__ . ': HTTP request failure: '
                                . Status::wrap( $status )->getWikiText( null, null, 'en' ) );