全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
表格存储

重试

更新时间:2018-03-08 20:37:51

常用重试策略

SDK有以下几种常用的重试策略:

  • 默认重试策略

    SDK中出现错误时会自动重试。最大重试间隔为10秒。

  • 计数重试策略

    按用户指定的间隔重试,对于可安全重试的策略,最多重试用户指定的次数。

  • 不重试

自定义重试策略

您可以通过修改RetryStrategy自定义重试策略。

  1. class RetryStrategy
  2. {
  3. public:
  4. virtual ~RetryStrategy() {}
  5. virtual RetryStrategy* clone() const =0;
  6. virtual int64_t retries() const throw() =0;
  7. virtual bool shouldRetry(Action, const OTSError&) const =0;
  8. virtual util::Duration nextPause() =0;
  9. };
  • clone(),复制一个新的对象。必须和当前对象相同类型,并且重试次数等内部状态也完全一样。

  • retries(),已重试次数。

  • shouldRetry(),指定操作和错误,判断是否应该重试。

    为方便操作,表格存储提供了两个工具函数:

    • 第一个retriable将错误分成三类。

      • 重试绝对无害的,例如OTSTableNotReady。
      • 重试有害,或无意义的,例如各种参数错误。
      • 仅凭错误无法判断的,例如OTSRequestTimeout。
    • 第二个retriable根据操作的幂等原则,结合操作和错误判断可否重试。即,RETRIABLE类的错误,和读操作的DEPENDS类错误,都判为可重试。

      1. enum RetryCategory
      2. {
      3. UNRETRIABLE,
      4. RETRIABLE,
      5. DEPENDS,
      6. };
      7. static RetryCategory retriable(const OTSError&);
      8. static bool retriable(Action, const OTSError&);
  • nextPause(),如果可以重试,则距离下次重试的间隔时间。
本文导读目录