Skip to content

Commit 6ed5900

Browse files
committed
feat: add graceful error handling into bulk sync
1 parent 2a9a7df commit 6ed5900

2 files changed

Lines changed: 47 additions & 7 deletions

File tree

app/modules/matches/controllers/matches_controller.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,13 +165,28 @@ def import
165165
already_imported: match_ids.count - imported_count,
166166
player: PlayerSerializer.render_as_hash(player)
167167
})
168+
rescue RedisClient::CannotConnectError, Redis::CannotConnectError => e
169+
Rails.logger.error "Redis connection failed during match import: #{e.message}"
170+
171+
render_error(
172+
message: 'Background job service is temporarily unavailable. Please try again later.',
173+
code: 'BACKGROUND_SERVICE_UNAVAILABLE',
174+
status: :service_unavailable,
175+
details: {
176+
hint: 'The import service is currently down. Contact your administrator if this persists.',
177+
player_id: player.id
178+
}
179+
)
168180
rescue RiotApiService::RiotApiError => e
169181
render_error(
170182
message: "Failed to fetch matches from Riot API: #{e.message}",
171183
code: 'RIOT_API_ERROR',
172184
status: :bad_gateway
173185
)
174186
rescue StandardError => e
187+
Rails.logger.error "Unexpected error during match import: #{e.class} - #{e.message}"
188+
Rails.logger.error e.backtrace.first(5).join("\n")
189+
175190
render_error(
176191
message: "Failed to import matches: #{e.message}",
177192
code: 'IMPORT_ERROR',

app/modules/players/controllers/players_controller.rb

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)