異常處理
使用OSS C SDK時如果請求出錯,會有相應的錯誤資訊在aos_status_s中輸出。aos_status_s有以下幾個屬性:
- code: 出錯請求的HTTP狀態碼,整形類型。
- error_code: OSS的錯誤碼,字元串類型。
- error_msg: OSS的錯誤資訊,字元串類型。
- req_id: 標識該次請求的UUID;當您無法解決問題時,可以憑這個req_id來請求OSS開發工程師的幫助,字元串類型。
逾時處理
如何判斷逾時
- 如果返回的aos_status_t中的code為5XX,表示伺服器內部錯誤,可以重試。
- 如果返回的aos_status_t中的code不等於2XX,且error_code為-992或者-995時,表示連結逾時或請求逾時,可以重試。
- 可以使用aos_status.h中的aos_should_retry(aos_status_t *)判斷返回的錯誤碼是否需要重試,如果返回1,表示需要重試。
如何設定逾時時間
- 設定連結逾時:options->ctl->options->connect_timeout,單位秒,預設是10秒。
- 設定DNS逾時:options->ctl->options->dns_cache_timeout,單位秒,預設是60秒。
- 佈建要求逾時:
- 通過設定options->ctl->options->speed_limit的值控制能容忍的最小速率,預設是1024,即1K。
- 通過設定options->ctl->options->speed_time的值控制能容忍的最長時間,預設是15秒。
- 如果使用了上述預設值,表示如果連續15秒的傳輸速率小於1K,則逾時。
常見錯誤碼
錯誤碼 | 描述 |
---|---|
AccessDenied | 拒絕訪問 |
BucketAlreadyExists | Bucket已經存在 |
BucketNotEmpty | Bucket不為空 |
EntityTooLarge | 實體過大 |
EntityTooSmall | 實體過小 |
FileGroupTooLarge | 檔案組過大 |
FilePartNotExist | 檔案Part不存在 |
FilePartStale | 檔案Part過時 |
InvalidArgument | 參數格式錯誤 |
InvalidAccessKeyId | AccessKeyId不存在 |
InvalidBucketName | 無效的Bucket名字 |
InvalidDigest | 無效的摘要 |
InvalidObjectName | 無效的Object名字 |
InvalidPart | 無效的Part |
InvalidPartOrder | 無效的part順序 |
InvalidTargetBucketForLogging | Logging操作中有無效的目標bucket |
InternalError | OSS內部發生錯誤 |
MalformedXML | XML格式非法 |
MethodNotAllowed | 不支援的方法 |
MissingArgument | 缺少參數 |
MissingContentLength | 缺少內容長度 |
NoSuchBucket | Bucket不存在 |
NoSuchKey | 檔案不存在 |
NoSuchUpload | Multipart Upload ID不存在 |
NotImplemented | 無法處理的方法 |
PreconditionFailed | 預先處理錯誤 |
RequestTimeTooSkewed | 發起請求的時間和伺服器時間超出15分鐘 |
RequestTimeout | 請求逾時 |
SignatureDoesNotMatch | 簽名錯誤 |
TooManyBuckets | 使用者的Bucket數目超過限制 |