From ff52f34265170820857d34884e7c12b435ab786f Mon Sep 17 00:00:00 2001 From: Kevin Liu Date: Mon, 3 Nov 2025 11:05:27 -0700 Subject: [PATCH 1/2] Add rescue for ActiveRecord::SerializationFailure --- lib/query_helper.rb | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/query_helper.rb b/lib/query_helper.rb index a973f2b..adcd3ca 100644 --- a/lib/query_helper.rb +++ b/lib/query_helper.rb @@ -169,14 +169,19 @@ def view_query end def execute_query - query = build_query() - @results = @model.find_by_sql([query, @bind_variables]) # Execute Sql Query - @results = @single_record ? @results.first : @results - - determine_count() - preload_associations() - load_associations() - clean_results() + begin + query = build_query() + @results = @model.find_by_sql([query, @bind_variables]) # Execute Sql Query + @results = @single_record ? @results.first : @results + + determine_count() + preload_associations() + load_associations() + clean_results() + rescue ActiveRecord::SerializationFailure => e + Rails.logger.warn("Retrying after serialization failure: #{e.message}") + retry + end end def results From 536c0a0aaab6e06ad1560233110a93eee77648e6 Mon Sep 17 00:00:00 2001 From: Kevin Liu Date: Mon, 3 Nov 2025 11:15:52 -0700 Subject: [PATCH 2/2] Add max retry logic, as suggested by co-pilot --- lib/query_helper.rb | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/lib/query_helper.rb b/lib/query_helper.rb index adcd3ca..3b24915 100644 --- a/lib/query_helper.rb +++ b/lib/query_helper.rb @@ -169,18 +169,30 @@ def view_query end def execute_query + max_retries = 3 + attempts = 0 + begin - query = build_query() - @results = @model.find_by_sql([query, @bind_variables]) # Execute Sql Query + query = build_query + @results = @model.find_by_sql([query, @bind_variables]) @results = @single_record ? @results.first : @results - determine_count() - preload_associations() - load_associations() - clean_results() + determine_count + preload_associations + load_associations + clean_results + rescue ActiveRecord::SerializationFailure => e - Rails.logger.warn("Retrying after serialization failure: #{e.message}") - retry + attempts += 1 + if attempts <= max_retries + sleep_time = 0.2 * (2 ** (attempts - 1)) # exponential backoff: 0.2s, 0.4s, 0.8s + Rails.logger.warn("Retry #{attempts}/#{max_retries} after serialization failure: #{e.message}") + sleep(sleep_time) + retry + else + Rails.logger.error("Query failed after #{max_retries} retries: #{e.message}") + raise + end end end