diff --git a/storage-manager/src/S3Storage.cpp b/storage-manager/src/S3Storage.cpp index 1113768c8..03964cce1 100644 --- a/storage-manager/src/S3Storage.cpp +++ b/storage-manager/src/S3Storage.cpp @@ -231,7 +231,7 @@ int S3Storage::getObject(const string &_sourceKey, boost::shared_array do { err = ms3_get(creds, bucket.c_str(), sourceKey.c_str(), &_data, &len); - if (err && retryable_error(err)) + if (err && (!skipRetryableErrors && retryable_error(err))) { if (ms3_server_error(creds)) logger->log(LOG_ERR, "S3Storage::getObject(): failed to GET, server says '%s'. bucket = %s, key = %s." @@ -239,14 +239,9 @@ int S3Storage::getObject(const string &_sourceKey, boost::shared_array else logger->log(LOG_ERR, "S3Storage::getObject(): failed to GET, got '%s'. bucket = %s, key = %s. Retrying...", s3err_msgs[err], bucket.c_str(), sourceKey.c_str()); - if (skipRetryableErrors) - { - errno = EAGAIN; - return -1; - } sleep(5); } - } while (err && retryable_error(err)); + } while (err && (!skipRetryableErrors && retryable_error(err))); if (err) { if (ms3_server_error(creds)) @@ -326,7 +321,7 @@ int S3Storage::putObject(const boost::shared_array data, size_t len, co do { s3err = ms3_put(creds, bucket.c_str(), destKey.c_str(), data.get(), len); - if (s3err && retryable_error(s3err)) + if (s3err && (!skipRetryableErrors && retryable_error(s3err))) { if (ms3_server_error(creds)) logger->log(LOG_ERR, "S3Storage::putObject(): failed to PUT, server says '%s'. bucket = %s, key = %s." @@ -334,14 +329,9 @@ int S3Storage::putObject(const boost::shared_array data, size_t len, co else logger->log(LOG_ERR, "S3Storage::putObject(): failed to PUT, got '%s'. bucket = %s, key = %s." " Retrying...", s3err_msgs[s3err], bucket.c_str(), destKey.c_str()); - if (skipRetryableErrors) - { - errno = EAGAIN; - return -1; - } sleep(5); } - } while (s3err && retryable_error(s3err)); + } while (s3err && (!skipRetryableErrors && retryable_error(s3err))); if (s3err) { if (ms3_server_error(creds)) @@ -365,7 +355,7 @@ int S3Storage::deleteObject(const string &_key) do { s3err = ms3_delete(creds, bucket.c_str(), key.c_str()); - if (s3err && s3err != MS3_ERR_NOT_FOUND && retryable_error(s3err)) + if (s3err && s3err != MS3_ERR_NOT_FOUND && (!skipRetryableErrors && retryable_error(s3err))) { if (ms3_server_error(creds)) logger->log(LOG_ERR, "S3Storage::deleteObject(): failed to DELETE, server says '%s'. bucket = %s, key = %s." @@ -373,14 +363,9 @@ int S3Storage::deleteObject(const string &_key) else logger->log(LOG_ERR, "S3Storage::deleteObject(): failed to DELETE, got '%s'. bucket = %s, key = %s. Retrying...", s3err_msgs[s3err], bucket.c_str(), key.c_str()); - if (skipRetryableErrors) - { - errno = EAGAIN; - return -1; - } sleep(5); } - } while (s3err && s3err != MS3_ERR_NOT_FOUND && retryable_error(s3err)); + } while (s3err && s3err != MS3_ERR_NOT_FOUND && (!skipRetryableErrors && retryable_error(s3err))); if (s3err != 0 && s3err != MS3_ERR_NOT_FOUND) { @@ -405,7 +390,7 @@ int S3Storage::copyObject(const string &_sourceKey, const string &_destKey) do { s3err = ms3_copy(creds, bucket.c_str(), sourceKey.c_str(), bucket.c_str(), destKey.c_str()); - if (s3err && retryable_error(s3err)) + if (s3err && (!skipRetryableErrors && retryable_error(s3err))) { if (ms3_server_error(creds)) logger->log(LOG_ERR, "S3Storage::copyObject(): failed to copy, server says '%s'. bucket = %s, srckey = %s, " @@ -413,14 +398,9 @@ int S3Storage::copyObject(const string &_sourceKey, const string &_destKey) else logger->log(LOG_ERR, "S3Storage::copyObject(): failed to copy, got '%s'. bucket = %s, srckey = %s, " " destkey = %s. Retrying...", s3err_msgs[s3err], bucket.c_str(), sourceKey.c_str(), destKey.c_str()); - if (skipRetryableErrors) - { - errno = EAGAIN; - return -1; - } sleep(5); } - } while (s3err && retryable_error(s3err)); + } while (s3err && (!skipRetryableErrors && retryable_error(s3err))); if (s3err) { @@ -459,7 +439,7 @@ int S3Storage::exists(const string &_key, bool *out) do { s3err = ms3_status(creds, bucket.c_str(), key.c_str(), &status); - if (s3err && s3err != MS3_ERR_NOT_FOUND && retryable_error(s3err)) + if (s3err && s3err != MS3_ERR_NOT_FOUND && (!skipRetryableErrors && retryable_error(s3err))) { if (ms3_server_error(creds)) logger->log(LOG_ERR, "S3Storage::exists(): failed to HEAD, server says '%s'. bucket = %s, key = %s." @@ -467,14 +447,9 @@ int S3Storage::exists(const string &_key, bool *out) else logger->log(LOG_ERR, "S3Storage::exists(): failed to HEAD, got '%s'. bucket = %s, key = %s. Retrying...", s3err_msgs[s3err], bucket.c_str(), key.c_str()); - if (skipRetryableErrors) - { - errno = EAGAIN; - return -1; - } sleep(5); } - } while (s3err && s3err != MS3_ERR_NOT_FOUND && retryable_error(s3err)); + } while (s3err && s3err != MS3_ERR_NOT_FOUND && (!skipRetryableErrors && retryable_error(s3err))); if (s3err != 0 && s3err != MS3_ERR_NOT_FOUND) {