开发者社区 问答 正文

C-SDK之如何实现 错误处理?

使用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拒绝访问
BucketAlreadyExistsBucket已经存在
BucketNotEmptyBucket不为空
EntityTooLarge实体过大
EntityTooSmall实体过小
FileGroupTooLarge文件组过大
FilePartNotExist文件Part不存在
FilePartStale文件Part过时
InvalidArgument参数格式错误
InvalidAccessKeyIdAccessKeyId不存在
InvalidBucketName无效的Bucket名字
InvalidDigest无效的摘要
InvalidObjectName无效的Object名字
InvalidPart无效的Part
InvalidPartOrder无效的part顺序
InvalidTargetBucketForLoggingLogging操作中有无效的目标bucket
InternalErrorOSS内部发生错误
MalformedXMLXML格式非法
MethodNotAllowed不支持的方法
MissingArgument缺少参数
MissingContentLength缺少内容长度
NoSuchBucketBucket不存在
NoSuchKey文件不存在
NoSuchUploadMultipart Upload ID不存在
NotImplemented无法处理的方法
PreconditionFailed预处理错误
RequestTimeTooSkewed发起请求的时间和服务器时间超出15分钟
RequestTimeout请求超时
[tr=rgb(239, 251, 255)][td]SignatureDoesNotMatch 签名错误 TooManyBuckets用户的Bucket数目超过限制

展开
收起
青衫无名 2017-10-19 11:48:16 2017 分享 版权
阿里云 AI 助理回答

在使用阿里云OSS C SDK进行文件操作时,正确处理超时和错误码是确保程序健壮性的重要环节。根据您的描述,这里总结了如何判断和设置超时时间以及一些常见错误码的含义:

如何判断超时

  • HTTP状态码判断:如果aos_status_s.code为5XX,这通常意味着服务器端错误,可以考虑重试请求。
  • 特定错误码判断:当aos_status_s.error_code-992(链接超时)或-995(请求超时)时,表示客户端与OSS服务之间的连接或请求过程中发生了超时。
  • 使用自动重试判断函数:调用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),默认为1K/秒;二是最长时间容忍(options->ctl->options->speed_time),默认为15秒。这意味着如果连续15秒内传输速率低于1K/秒,则认为超时。

常见错误码及其含义

您已经列出了一系列常见的错误码,这些错误码对于诊断问题非常关键。例如: - AccessDenied:表明访问被拒绝,可能是因为权限不足。 - BucketAlreadyExists:尝试创建的Bucket已存在。 - NoSuchBucket:指定的Bucket不存在。 - NoSuchKey:尝试访问的Object(文件)不存在。 - RequestTimeout:请求超时,即本次请求未能在预期时间内得到响应。 - SignatureDoesNotMatch:签名验证失败,可能是由于访问密钥或签名算法错误。

了解并妥善处理这些错误码,可以帮助开发者更好地调试应用程序,提高与OSS交互的稳定性和效率。在遇到问题时,记得查看req_id,它对于获取阿里云技术支持的帮助至关重要。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答