@@ -29,11 +29,11 @@ module Optimizely
2929 class CmabRetryConfig
3030 # Configuration for retrying CMAB requests.
3131 # 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
3333
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 )
3535 @max_retries = max_retries
36- @retry_delay = retry_delay
36+ @initial_backoff = initial_backoff
3737 @max_backoff = max_backoff
3838 @backoff_multiplier = backoff_multiplier
3939 end
@@ -151,15 +151,15 @@ def _do_fetch_with_retry(url, request_body, retry_config, timeout)
151151 # The variation ID from the response.
152152
153153 attempt = 0
154- backoff = retry_config . retry_delay
154+ backoff = retry_config . initial_backoff
155155 begin
156- _do_fetch ( url , request_body , timeout )
156+ return _do_fetch ( url , request_body , timeout )
157157 rescue => e
158158 if attempt < retry_config . max_retries
159159 @logger . log ( Logger ::INFO , "Retrying CMAB request (attempt #{ attempt + 1 } ) after #{ backoff } seconds..." )
160160 Kernel . sleep ( backoff )
161161 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
163163 retry
164164 else
165165 @logger . log ( Logger ::ERROR , "Max retries exceeded for CMAB request: #{ e . message } " )
0 commit comments