Added sanity check for doGetLocalCopyMulti() in Swift
authorAaron Schulz <aschulz@wikimedia.org>
Wed, 8 Jan 2014 23:02:32 +0000 (15:02 -0800)
committerAaron Schulz <aschulz@wikimedia.org>
Wed, 8 Jan 2014 23:02:32 +0000 (15:02 -0800)
* This better handles the case of /tmp being full or something

Change-Id: Ibf4fed0fd053f82ef5ede46b6c2ec72feee95699

includes/filebackend/SwiftFileBackend.php

index 528889b..1480662 100644 (file)
@@ -1078,7 +1078,11 @@ class SwiftFileBackend extends FileBackendStore {
                        $reqs = $this->http->runMulti( $reqs );
                        foreach ( $reqs as $path => $op ) {
                                list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $op['response'];
-                               if ( $rcode >= 200 && $rcode <= 299 ) {
+                               fclose( $op['stream'] ); // close open handle
+                               if ( $rcode >= 200 && $rcode <= 299
+                                       // double check that the disk is not full/broken
+                                       && $tmpFile->getSize() == $rhdrs['content-length']
+                               ) {
                                        // good
                                } elseif ( $rcode === 404 ) {
                                        $tmpFiles[$path] = false;
@@ -1087,7 +1091,6 @@ class SwiftFileBackend extends FileBackendStore {
                                        $this->onError( null, __METHOD__,
                                                array( 'src' => $path ) + $ep, $rerr, $rcode, $rdesc );
                                }
-                               fclose( $op['stream'] ); // close open handle
                        }
                }