常用重試策略

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(),指定操作和錯誤,判斷是否應該重試。

    為方便操作,Table Store提供了兩個工具函數:

    • 第一個retriable將錯誤分成三類。

      • 重試絕對無害的,例如OTSTableNotReady。
      • 重試有害,或無意義的,例如各種參數錯誤。
      • 僅憑錯誤無法判斷的,例如OTSRequestTimeout。
    • 第二個retriable根據操作的等冪原則,結合操作和錯誤判斷可否重試。即,RETRIABLE類的錯誤,和讀操作的DEPENDS類錯誤,都判為可重試。

      enum RetryCategory
      {
        UNRETRIABLE,
        RETRIABLE,
        DEPENDS,
      };
      static RetryCategory retriable(const OTSError&);
      static bool retriable(Action, const OTSError&);
      nextPause(),如果可以重試,則指定下次重試的間隔時間。