一般的な再試行戦略

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 には、操作を簡単にするための 2 つのツール機能があります。

    • 最初の再試行では、エラーを 3 つのグループに分けます。

      • OTSTableNotReady など、完全に無害な再試行。
      • パラメーターエラーなどによる有害または無意味な再試行。
      • OTSRequestTimeout などのエラーだけでは判断できないもの。
    • 2 回目の再試行では、操作とエラーも考慮しながら、操作のべき等性原則に基づいて再試行を実行できるかどうかを決定します。 つまり、読み取り操作の RETRIABLE エラーと DEPENDS エラーの両方が再試行可能と判断されます。

      enum RetryCategory
      {
        UNRETRIABLE,
        RETRIABLE,
        DEPENDS,
      };
      static RetryCategory retriable(const OTSError&);
      static bool retriable(Action, const OTSError&);
      nextPause() は、再試行可能である場合の次の再試行までの間隔です。