@@ -29,11 +29,11 @@ module Optimizely
29
29
class CmabRetryConfig
30
30
# Configuration for retrying CMAB requests.
31
31
# Contains parameters for maximum retries, backoff intervals, and multipliers.
32
- attr_reader :max_retries , :retry_delay , :max_backoff , :backoff_multiplier
32
+ attr_reader :max_retries , :initial_backoff , :max_backoff , :backoff_multiplier
33
33
34
- def initialize ( max_retries : DEFAULT_MAX_RETRIES , retry_delay : DEFAULT_INITIAL_BACKOFF , max_backoff : DEFAULT_BACKOFF_MULTIPLIER , backoff_multiplier : DEFAULT_BACKOFF_MULTIPLIER )
34
+ def initialize ( max_retries : DEFAULT_MAX_RETRIES , initial_backoff : DEFAULT_INITIAL_BACKOFF , max_backoff : DEFAULT_BACKOFF_MULTIPLIER , backoff_multiplier : DEFAULT_BACKOFF_MULTIPLIER )
35
35
@max_retries = max_retries
36
- @retry_delay = retry_delay
36
+ @initial_backoff = initial_backoff
37
37
@max_backoff = max_backoff
38
38
@backoff_multiplier = backoff_multiplier
39
39
end
@@ -151,15 +151,15 @@ def _do_fetch_with_retry(url, request_body, retry_config, timeout)
151
151
# The variation ID from the response.
152
152
153
153
attempt = 0
154
- backoff = retry_config . retry_delay
154
+ backoff = retry_config . initial_backoff
155
155
begin
156
- _do_fetch ( url , request_body , timeout )
156
+ return _do_fetch ( url , request_body , timeout )
157
157
rescue => e
158
158
if attempt < retry_config . max_retries
159
159
@logger . log ( Logger ::INFO , "Retrying CMAB request (attempt #{ attempt + 1 } ) after #{ backoff } seconds..." )
160
160
Kernel . sleep ( backoff )
161
161
attempt += 1
162
- backoff = [ backoff * retry_config . backoff_multiplier , retry_config . max_backoff ] . min
162
+ backoff = [ retry_config . initial_backoff * ( retry_config . backoff_multiplier ** attempt ) , retry_config . max_backoff ] . min
163
163
retry
164
164
else
165
165
@logger . log ( Logger ::ERROR , "Max retries exceeded for CMAB request: #{ e . message } " )
0 commit comments