@@ -264,14 +264,39 @@ def bulk_sync
264264
265265 players . update_all ( sync_status : 'syncing' )
266266
267- players . each do |player |
268- SyncPlayerFromRiotJob . perform_later ( player . id )
269- end
267+ begin
268+ players . each do |player |
269+ SyncPlayerFromRiotJob . perform_later ( player . id )
270+ end
270271
271- render_success ( {
272- message : "#{ players . count } players queued for sync" ,
273- players_count : players . count
274- } )
272+ render_success ( {
273+ message : "#{ players . count } players queued for sync" ,
274+ players_count : players . count
275+ } )
276+ rescue RedisClient ::CannotConnectError , Redis ::CannotConnectError => e
277+ Rails . logger . error "Redis connection failed during bulk_sync: #{ e . message } "
278+
279+ # Reset sync status since we couldn't queue the jobs
280+ players . update_all ( sync_status : 'idle' )
281+
282+ render_error (
283+ message : 'Background job service is temporarily unavailable. Please try again later.' ,
284+ code : 'BACKGROUND_SERVICE_UNAVAILABLE' ,
285+ status : :service_unavailable ,
286+ details : {
287+ hint : 'The sync service is currently down. Contact your administrator if this persists.'
288+ }
289+ )
290+ rescue StandardError => e
291+ Rails . logger . error "Unexpected error during bulk_sync: #{ e . class } - #{ e . message } "
292+ players . update_all ( sync_status : 'idle' )
293+
294+ render_error (
295+ message : 'Failed to queue sync jobs' ,
296+ code : 'QUEUE_ERROR' ,
297+ status : :internal_server_error
298+ )
299+ end
275300 end
276301
277302 private
0 commit comments