常用重試策略
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()
,如果可以重試,則指定下次重試的間隔時間。
-