|
1 | 1 | #pragma once |
2 | 2 |
|
3 | 3 | #include <util/datetime/base.h> |
| 4 | +#include <util/generic/maybe.h> |
4 | 5 | #include <util/generic/typetraits.h> |
5 | 6 | #include <util/random/random.h> |
6 | 7 |
|
@@ -41,7 +42,7 @@ struct IRetryPolicy { |
41 | 42 |
|
42 | 43 | //! Calculate delay before next retry if next retry is allowed. |
43 | 44 | //! Returns empty maybe if retry is not allowed anymore. |
44 | | - [[nodiscard]] virtual std::optional<TDuration> GetNextRetryDelay(typename TTypeTraits<TArgs>::TFuncParam... args) = 0; |
| 45 | + [[nodiscard]] virtual TMaybe<TDuration> GetNextRetryDelay(typename TTypeTraits<TArgs>::TFuncParam... args) = 0; |
45 | 46 | }; |
46 | 47 |
|
47 | 48 | virtual ~IRetryPolicy() = default; |
@@ -81,8 +82,8 @@ struct TNoRetryPolicy : IRetryPolicy<TArgs...> { |
81 | 82 | using IRetryState = typename IRetryPolicy<TArgs...>::IRetryState; |
82 | 83 |
|
83 | 84 | struct TNoRetryState : IRetryState { |
84 | | - std::optional<TDuration> GetNextRetryDelay(typename TTypeTraits<TArgs>::TFuncParam...) override { |
85 | | - return std::nullopt; |
| 85 | + TMaybe<TDuration> GetNextRetryDelay(typename TTypeTraits<TArgs>::TFuncParam...) override { |
| 86 | + return {}; |
86 | 87 | } |
87 | 88 | }; |
88 | 89 |
|
@@ -123,10 +124,10 @@ struct TExponentialBackoffPolicy : IRetryPolicy<TArgs...> { |
123 | 124 | { |
124 | 125 | } |
125 | 126 |
|
126 | | - std::optional<TDuration> GetNextRetryDelay(typename TTypeTraits<TArgs>::TFuncParam... args) override { |
| 127 | + TMaybe<TDuration> GetNextRetryDelay(typename TTypeTraits<TArgs>::TFuncParam... args) override { |
127 | 128 | const ERetryErrorClass errorClass = RetryClassFunction(args...); |
128 | 129 | if (errorClass == ERetryErrorClass::NoRetry || AttemptsDone >= MaxRetries || StartTime && TInstant::Now() - StartTime >= MaxTime) { |
129 | | - return std::nullopt; |
| 130 | + return {}; |
130 | 131 | } |
131 | 132 |
|
132 | 133 | if (errorClass == ERetryErrorClass::LongRetry) { |
@@ -212,10 +213,10 @@ struct TFixedIntervalPolicy : IRetryPolicy<TArgs...> { |
212 | 213 | { |
213 | 214 | } |
214 | 215 |
|
215 | | - std::optional<TDuration> GetNextRetryDelay(typename TTypeTraits<TArgs>::TFuncParam... args) override { |
| 216 | + TMaybe<TDuration> GetNextRetryDelay(typename TTypeTraits<TArgs>::TFuncParam... args) override { |
216 | 217 | const ERetryErrorClass errorClass = RetryClassFunction(args...); |
217 | 218 | if (errorClass == ERetryErrorClass::NoRetry || AttemptsDone >= MaxRetries || StartTime && TInstant::Now() - StartTime >= MaxTime) { |
218 | | - return std::nullopt; |
| 219 | + return {}; |
219 | 220 | } |
220 | 221 |
|
221 | 222 | const TDuration delay = NRetryDetails::RandomizeDelay(errorClass == ERetryErrorClass::LongRetry ? LongRetryDelay : Delay); |
|
0 commit comments