Browse Source

Handle connection errors

master
JustAnotherArchivist 2 years ago
parent
commit
1010769c3c
1 changed files with 10 additions and 5 deletions
  1. +10
    -5
      ia-upload-stream

+ 10
- 5
ia-upload-stream View File

@@ -113,14 +113,19 @@ def upload(item, filename, metadata, *, iaConfigFile = None, partSize = 4, tries
for attempt in range(1, tries + 1):
if attempt > 1:
logger.info(f'Retrying part {partNumber}')
r = requests.put(f'{url}?partNumber={partNumber}&uploadId={uploadId}', headers = {**headers, 'Content-MD5': contentMd5}, data = data)
if r.status_code == 200:
break
try:
r = requests.put(f'{url}?partNumber={partNumber}&uploadId={uploadId}', headers = {**headers, 'Content-MD5': contentMd5}, data = data)
except (ConnectionError, requests.exceptions.RequestException) as e:
err = f'error {type(e).__module__}.{type(e).__name__} {e!s}'
else:
if r.status_code == 200:
break
err = f'status {r.status_code}'
sleepTime = min(3 ** attempt, 30)
retrying = f', retrying after {sleepTime} seconds' if attempt < tries else ''
logger.error(f'Got status {r.status_code} from IA S3 on uploading part {partNumber}{retrying}')
logger.error(f'Got {err} from IA S3 on uploading part {partNumber}{retrying}')
if attempt == tries:
raise UploadError(f'Got status {r.status_code} from IA S3 on uploading part {partNumber}', r = r, uploadId = uploadId, parts = parts)
raise UploadError(f'Got {err} from IA S3 on uploading part {partNumber}', r = r, uploadId = uploadId, parts = parts)
time.sleep(sleepTime)
logger.info(f'Upload OK, ETag: {r.headers["ETag"]}')
parts.append((partNumber, r.headers['ETag']))


Loading…
Cancel
Save