git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3cmd/trunk@333 830e0280-6d2a-0410-9c65-932aecc39d9d
Michal Ludvig authored on 2009/01/07 21:39:39... | ... |
@@ -430,7 +430,7 @@ class S3(object): |
430 | 430 |
md5_hash = md5() |
431 | 431 |
try: |
432 | 432 |
while (size_left > 0): |
433 |
- debug("SendFile: Reading up to %d bytes from '%s'" % (self.config.send_chunk, file.name)) |
|
433 |
+ #debug("SendFile: Reading up to %d bytes from '%s'" % (self.config.send_chunk, file.name)) |
|
434 | 434 |
data = file.read(self.config.send_chunk) |
435 | 435 |
md5_hash.update(data) |
436 | 436 |
conn.send(data) |
... | ... |
@@ -448,6 +448,7 @@ class S3(object): |
448 | 448 |
response["data"] = http_response.read() |
449 | 449 |
response["size"] = size_total |
450 | 450 |
conn.close() |
451 |
+ debug(u"Response: %s" % response) |
|
451 | 452 |
except Exception, e: |
452 | 453 |
if self.config.progress_meter: |
453 | 454 |
progress.done("failed") |
... | ... |
@@ -487,6 +488,20 @@ class S3(object): |
487 | 487 |
if not response['headers'].has_key('etag'): |
488 | 488 |
response['headers']['etag'] = '' |
489 | 489 |
|
490 |
+ if response["status"] < 200 or response["status"] > 299: |
|
491 |
+ if response["status"] >= 500: |
|
492 |
+ ## AWS internal error - retry |
|
493 |
+ if retries: |
|
494 |
+ warning("Upload failed: %s (%s)" % (resource['uri'], S3Error(response))) |
|
495 |
+ warning("Waiting %d sec..." % self._fail_wait(retries)) |
|
496 |
+ time.sleep(self._fail_wait(retries)) |
|
497 |
+ return self.send_file(request, file, labels, throttle, retries - 1) |
|
498 |
+ else: |
|
499 |
+ warning("Too many failures. Giving up on '%s'" % (file.name)) |
|
500 |
+ raise S3UploadError |
|
501 |
+ ## Non-recoverable error |
|
502 |
+ raise S3Error(response) |
|
503 |
+ |
|
490 | 504 |
debug("MD5 sums: computed=%s, received=%s" % (md5_computed, response["headers"]["etag"])) |
491 | 505 |
if response["headers"]["etag"].strip('"\'') != md5_hash.hexdigest(): |
492 | 506 |
warning("MD5 Sums don't match!") |
... | ... |
@@ -497,8 +512,6 @@ class S3(object): |
497 | 497 |
warning("Too many failures. Giving up on '%s'" % (file.name)) |
498 | 498 |
raise S3UploadError |
499 | 499 |
|
500 |
- if response["status"] < 200 or response["status"] > 299: |
|
501 |
- raise S3Error(response) |
|
502 | 500 |
return response |
503 | 501 |
|
504 | 502 |
def recv_file(self, request, stream, labels, start_position = 0, retries = _max_retries): |