Skip to content

Commit c69bec2

Browse files
committed
Update fetch retry
1 parent c39957f commit c69bec2

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

lib/optimizely/cmab/cmab_client.rb

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -153,23 +153,22 @@ def _do_fetch_with_retry(url, request_body, retry_config, timeout)
153153
backoff = retry_config.retry_delay
154154
last_error = nil
155155

156-
(0..retry_config.max_retries).each do |attempt|
157-
return _do_fetch(url, request_body, timeout)
158-
rescue Optimizely::CmabInvalidResponseError
159-
# Do not retry, just re-raise
160-
raise
156+
attempt = 0
157+
backoff = @retry_config.retry_delay
158+
begin
159+
return _do_fetch(...)
161160
rescue => e
162-
last_error = e
163-
if attempt < retry_config.max_retries
161+
if attempt < @retry_config.max_retries
164162
@logger.log(Logger::INFO, "Retrying CMAB request (attempt #{attempt + 1}) after #{backoff} seconds...")
165-
sleep(backoff)
166-
backoff = [backoff * (retry_config.backoff_multiplier**(attempt + 1)), retry_config.max_backoff].min
163+
Kernel.sleep(backoff)
164+
attempt += 1
165+
backoff = [backoff * @retry_config.backoff_multiplier, @retry_config.max_backoff].min
166+
retry
167+
else
168+
@logger.log(Logger::ERROR, "Max retries exceeded for CMAB request: #{e.message}")
169+
raise Optimizely::CmabFetchError, "CMAB decision fetch failed (#{e.message})."
167170
end
168171
end
169-
170-
error_message = Optimizely::Helpers::Constants::CMAB_FETCH_FAILED % (last_error&.message || 'Max retries exceeded for CMAB request.')
171-
@logger.log(Logger::ERROR, error_message)
172-
raise CmabFetchError, error_message
173172
end
174173
end
175174

0 commit comments

Comments
 (0)