Skip to content

Commit 536c0a0

Browse files
committed
Add max retry logic, as suggested by co-pilot
1 parent ff52f34 commit 536c0a0

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

lib/query_helper.rb

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -169,18 +169,30 @@ def view_query
169169
end
170170

171171
def execute_query
172+
max_retries = 3
173+
attempts = 0
174+
172175
begin
173-
query = build_query()
174-
@results = @model.find_by_sql([query, @bind_variables]) # Execute Sql Query
176+
query = build_query
177+
@results = @model.find_by_sql([query, @bind_variables])
175178
@results = @single_record ? @results.first : @results
176179

177-
determine_count()
178-
preload_associations()
179-
load_associations()
180-
clean_results()
180+
determine_count
181+
preload_associations
182+
load_associations
183+
clean_results
184+
181185
rescue ActiveRecord::SerializationFailure => e
182-
Rails.logger.warn("Retrying after serialization failure: #{e.message}")
183-
retry
186+
attempts += 1
187+
if attempts <= max_retries
188+
sleep_time = 0.2 * (2 ** (attempts - 1)) # exponential backoff: 0.2s, 0.4s, 0.8s
189+
Rails.logger.warn("Retry #{attempts}/#{max_retries} after serialization failure: #{e.message}")
190+
sleep(sleep_time)
191+
retry
192+
else
193+
Rails.logger.error("Query failed after #{max_retries} retries: #{e.message}")
194+
raise
195+
end
184196
end
185197
end
186198

0 commit comments

Comments
 (0)