File tree Expand file tree Collapse file tree 1 file changed +20
-8
lines changed Expand file tree Collapse file tree 1 file changed +20
-8
lines changed Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments