Made partial file download errors in Swift more useful
authorAaron Schulz <aschulz@wikimedia.org>
Thu, 1 May 2014 19:34:42 +0000 (12:34 -0700)
committerBryanDavis <bdavis@wikimedia.org>
Thu, 1 May 2014 22:44:24 +0000 (22:44 +0000)
Change-Id: I97a5cd1ed38508468122e33968b88adf2570a9a3

includes/filebackend/SwiftFileBackend.php

index cae4079..2f4be9e 100644 (file)
@@ -1064,11 +1064,14 @@ class SwiftFileBackend extends FileBackendStore {
                foreach ( $reqs as $path => $op ) {
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $op['response'];
                        fclose( $op['stream'] ); // close open handle
-                       if ( $rcode >= 200 && $rcode <= 299
-                               // double check that the disk is not full/broken
-                               && $tmpFiles[$path]->getSize() == $rhdrs['content-length']
-                       ) {
-                               // good
+                       if ( $rcode >= 200 && $rcode <= 299 ) {
+                               // Double check that the disk is not full/broken
+                               if ( $tmpFiles[$path]->getSize() != $rhdrs['content-length'] ) {
+                                       $tmpFiles[$path] = null;
+                                       $rerr = "Got {$tmpFiles[$path]->getSize()}/{$rhdrs['content-length']} bytes";
+                                       $this->onError( null, __METHOD__,
+                                               array( 'src' => $path ) + $ep, $rerr, $rcode, $rdesc );
+                               }
                        } elseif ( $rcode === 404 ) {
                                $tmpFiles[$path] = false;
                        } else {