全部产品
阿里云办公

重试

更新时间: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(),如果可以重试,则距离下次重试的间隔时间。
本文导读目录