常用重试策略

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

  • 默认重试策略

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

  • 计数重试策略

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

  • 不重试

自定义重试策略

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

class RetryStrategy
{
public:
    virtual ~RetryStrategy() {}

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

  • retries(),已重试次数。

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

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

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

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

      enum RetryCategory
      {
        UNRETRIABLE,
        RETRIABLE,
        DEPENDS,
      };
      static RetryCategory retriable(const OTSError&);
      static bool retriable(Action, const OTSError&);
      nextPause(),如果可以重试,则指定下次重试的间隔时间。