@@ -204,7 +204,7 @@ def upload_one_file_to_s3(meta):
204
204
put_callback = meta [u'put_callback' ]
205
205
put_callback_output_stream = meta [u'put_callback_output_stream' ]
206
206
207
- sleeping_time = 1
207
+ last_err = None
208
208
retry = 5
209
209
for t in range (retry ):
210
210
try :
@@ -231,26 +231,30 @@ def upload_one_file_to_s3(meta):
231
231
logger .debug (u"AWS Token expired. Renew and retry" )
232
232
meta [u'result_status' ] = RESULT_STATUS_RENEW_TOKEN
233
233
return
234
- logger .debug (u"Failed to upload a file: %s" , err )
234
+ logger .exception (
235
+ u"Failed to upload a file: %s, err: %s" ,
236
+ data_file , err )
235
237
raise err
236
- except OpenSSL .SSL .SysCallError as err :
238
+ except (OpenSSL .SSL .SysCallError , S3UploadFailedError ) as err :
239
+ last_err = err
237
240
if t == retry - 1 or err .args [0 ] not in (
238
241
errno .ECONNRESET ,
239
242
errno .ETIMEDOUT ,
240
243
errno .EPIPE ,
241
244
- 1 ):
242
245
raise err
243
- logger .warn ('Failed to upload a file [%s]. Retrying' , err )
244
- if sleeping_time < 16 :
245
- sleeping_time *= 2
246
- logger .debug (u"sleeping: %s" , sleeping_time )
247
- time .sleep (sleeping_time )
248
- except S3UploadFailedError as err :
249
- logger .debug (u"Failed to upload a file [%s]. Retrying" , err )
250
- if sleeping_time < 16 :
251
- sleeping_time *= 2
246
+ logger .info (
247
+ 'Failed to upload a file: %s, err: %s. Retrying' ,
248
+ data_file , err )
249
+ sleeping_time = min (2 ** t , 16 )
252
250
logger .debug (u"sleeping: %s" , sleeping_time )
253
251
time .sleep (sleeping_time )
252
+ else :
253
+ if last_err :
254
+ raise last_err
255
+ else :
256
+ raise Exception (
257
+ "Unknown Error in uploading a file: %s" , data_file )
254
258
255
259
logger .debug (u'DONE putting a file' )
256
260
meta [u'dst_file_size' ] = meta [u'upload_size' ]
@@ -298,7 +302,7 @@ def download_one_file_from_s3(meta):
298
302
get_callback = meta [u'get_callback' ]
299
303
get_callback_output_stream = meta [u'get_callback_output_stream' ]
300
304
301
- sleeping_time = 1
305
+ last_err = None
302
306
retry = 5
303
307
for t in range (retry ):
304
308
try :
@@ -321,26 +325,31 @@ def download_one_file_from_s3(meta):
321
325
logger .debug (u"AWS Token expired. Renew and retry" )
322
326
meta [u'result_status' ] = RESULT_STATUS_RENEW_TOKEN
323
327
return
324
- logger .debug (u"Failed to download a file: %s" , e )
328
+ logger .exception (
329
+ u"Failed to download a file: %s, err: %s" ,
330
+ full_dst_file_name , err )
325
331
raise err
326
- except OpenSSL .SSL .SysCallError as err :
332
+ except (OpenSSL .SSL .SysCallError , RetriesExceededError ) as err :
333
+ last_err = err
327
334
if t == retry - 1 or err .args [0 ] not in (
328
335
errno .ECONNRESET ,
329
336
errno .ETIMEDOUT ,
330
337
errno .EPIPE ,
331
338
- 1 ):
332
339
raise err
333
- logger .warn ('Failed to download a file [%s]. Retrying' , err )
334
- if sleeping_time < 16 :
335
- sleeping_time *= 2
336
- logger .debug (u"sleeping: %s" , sleeping_time )
337
- time .sleep (sleeping_time )
338
- except RetriesExceededError as err :
339
- logger .debug (u"Failed to download a file [%s]. Retrying" , err )
340
- if sleeping_time < 16 :
341
- sleeping_time *= 2
340
+ logger .info (
341
+ 'Failed to download a file: %s, err: %s. Retrying' ,
342
+ full_dst_file_name , err )
343
+ sleeping_time = min (2 ** t , 16 )
342
344
logger .debug (u"sleeping: %s" , sleeping_time )
343
345
time .sleep (sleeping_time )
346
+ else :
347
+ if last_err :
348
+ raise last_err
349
+ else :
350
+ raise Exception (
351
+ "Unknown Error in downloading a file: %s" ,
352
+ full_dst_file_name )
344
353
345
354
if u'encryption_material' in meta :
346
355
akey = s3client .Object (s3location .bucket_name , s3path )
0 commit comments