@@ -92,6 +92,7 @@ public class HttpTemplateDownloader extends ManagedContextRunnable implements Te
9292 "x-original-content-length" ,
9393 "x-oss-meta-content-length" ,
9494 "x-file-size" );
95+ private static final long MIN_FORMAT_VERIFICATION_SIZE = 1024 * 1024 ;
9596
9697 public HttpTemplateDownloader (StorageLayer storageLayer , String downloadUrl , String toDir , DownloadCompleteCallback callback , long maxTemplateSizeInBytes ,
9798 String user , String password , Proxy proxy , ResourceType resourceType ) {
@@ -217,11 +218,9 @@ public long download(boolean resume, DownloadCompleteCallback callback) {
217218 RandomAccessFile out = new RandomAccessFile (file , "rw" );
218219 ) {
219220 out .seek (localFileSize );
220-
221- logger .info ("Starting download from " + downloadUrl + " to " + toFile + " remoteSize=" + toHumanReadableSize (remoteSize ) + " , max size=" + toHumanReadableSize (maxTemplateSizeInBytes ));
222-
221+ logger .info ("Starting download from {} to {} remoteSize={} , max size={}" ,downloadUrl , toFile ,
222+ toHumanReadableSize (remoteSize ), toHumanReadableSize (maxTemplateSizeInBytes ));
223223 boolean eof = copyBytes (file , in , out );
224-
225224 Date finish = new Date ();
226225 checkDownloadCompletion (eof );
227226 downloadTime += finish .getTime () - start .getTime ();
@@ -249,28 +248,32 @@ public long download(boolean resume, DownloadCompleteCallback callback) {
249248 }
250249
251250 private boolean copyBytes (File file , InputStream in , RandomAccessFile out ) throws IOException {
252- int bytes ;
253- byte [] block = new byte [CHUNK_SIZE ];
251+ byte [] buffer = new byte [CHUNK_SIZE ];
254252 long offset = 0 ;
255- boolean done = false ;
256253 VerifyFormat verifyFormat = new VerifyFormat (file );
257254 status = Status .IN_PROGRESS ;
258- while (!done && status != Status .ABORTED && offset <= remoteSize ) {
259- if ((bytes = in .read (block , 0 , CHUNK_SIZE )) > -1 ) {
260- offset = writeBlock (bytes , out , block , offset );
261- if (!ResourceType .SNAPSHOT .equals (resourceType ) &&
262- !verifyFormat .isVerifiedFormat () &&
263- (offset >= 1048576 || offset >= remoteSize )) { //let's check format after we get 1MB or full file
264- verifyFormat .invoke ();
265- }
266- } else {
267- done = true ;
255+ while (status != Status .ABORTED ) {
256+ int bytesRead = in .read (buffer , 0 , CHUNK_SIZE );
257+ if (bytesRead == -1 ) {
258+ logger .debug ("Reached EOF on input stream" );
259+ break ;
260+ }
261+ offset = writeBlock (bytesRead , out , buffer , offset );
262+ if (!ResourceType .SNAPSHOT .equals (resourceType )
263+ && !verifyFormat .isVerifiedFormat ()
264+ && (offset >= MIN_FORMAT_VERIFICATION_SIZE || offset >= remoteSize )) {
265+ verifyFormat .invoke ();
266+ }
267+ if (offset >= remoteSize ) {
268+ logger .debug ("Reached expected remote size limit: {} bytes" , remoteSize );
269+ break ;
268270 }
269271 }
270272 out .getFD ().sync ();
271- return !Status .ABORTED .equals (status ) && done ;
273+ return !Status .ABORTED .equals (status );
272274 }
273275
276+
274277 private long writeBlock (int bytes , RandomAccessFile out , byte [] block , long offset ) throws IOException {
275278 out .write (block , 0 , bytes );
276279 offset += bytes ;
@@ -337,6 +340,8 @@ private boolean tryAndGetRemoteSize() {
337340 if (chunkedHeader != null && "chunked" .equalsIgnoreCase (chunkedHeader .getValue ())) {
338341 isChunkedTransfer = true ;
339342 reportedRemoteSize = getRemoteSizeForChunkedTransfer ();
343+ logger .debug ("{} is using chunked transfer encoding, possible remote size: {}" , downloadUrl ,
344+ reportedRemoteSize );
340345 } else {
341346 status = Status .UNRECOVERABLE_ERROR ;
342347 errorString = " Failed to receive length of download " ;
@@ -352,9 +357,11 @@ private boolean tryAndGetRemoteSize() {
352357 return false ;
353358 }
354359 }
355-
356360 if (remoteSize == 0 ) {
357361 remoteSize = reportedRemoteSize ;
362+ if (remoteSize != 0 ) {
363+ logger .debug ("Remote size for {} found to be {}" , downloadUrl , toHumanReadableSize (remoteSize ));
364+ }
358365 }
359366 return true ;
360367 }
0 commit comments