Skip to content

Commit 0506c0d

Browse files
iHiDclaude
andauthored
Raise specific errors after upstream retries exhausted in snippet/LOC commands (#8617)
Instead of re-raising the raw RestClient exception after max retries, raise named errors (SnippetGeneratorTemporarilyUnavailable and LocCounterTemporarilyUnavailable) so they can be identified and managed in Sentry independently. Closes #8588 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 3465d28 commit 0506c0d

4 files changed

Lines changed: 8 additions & 4 deletions

File tree

app/commands/iteration/count_lines_of_code.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class Iteration::CountLinesOfCode
66
initialize_with :iteration, retries_count: 0
77

88
MAX_RETRIES = 3
9+
LocCounterTemporarilyUnavailable = Class.new(StandardError)
910

1011
def call
1112
# Sometimes the iteration might be deleted
@@ -37,7 +38,8 @@ def call
3738
iteration.update_column(:num_loc, num_loc)
3839
Solution::UpdateNumLoc.(iteration.solution)
3940
rescue RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout
40-
raise if retries_count >= MAX_RETRIES
41+
# This error is manually ignored on Sentry unless it escalates
42+
raise LocCounterTemporarilyUnavailable if retries_count >= MAX_RETRIES
4143

4244
self.class.defer(iteration, retries_count: retries_count + 1, wait: rand(30..90))
4345
ensure

app/commands/iteration/generate_snippet.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class Iteration::GenerateSnippet
66
initialize_with :iteration, retries_count: 0
77

88
MAX_RETRIES = 3
9+
SnippetGeneratorTemporarilyUnavailable = Class.new(StandardError)
910

1011
def call
1112
# Sometimes the iteration might be deleted
@@ -38,7 +39,8 @@ def call
3839

3940
raise
4041
rescue RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout
41-
raise if retries_count >= MAX_RETRIES
42+
# This error is manually ignored on Sentry unless it escalates
43+
raise SnippetGeneratorTemporarilyUnavailable if retries_count >= MAX_RETRIES
4244

4345
self.class.defer(iteration, retries_count: retries_count + 1, wait: rand(30..90))
4446
end

test/commands/iteration/count_lines_of_code_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ class Iteration::CountLinesOfCodeTest < ActiveJob::TestCase
118118

119119
RestClient.stubs(:post).raises(RestClient::BadGateway)
120120

121-
assert_raises RestClient::BadGateway do
121+
assert_raises Iteration::CountLinesOfCode::LocCounterTemporarilyUnavailable do
122122
Iteration::CountLinesOfCode.(iteration, retries_count: 3)
123123
end
124124
end

test/commands/iteration/generate_snippet_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class Iteration::GenerateSnippetTest < ActiveJob::TestCase
115115

116116
RestClient.stubs(:post).raises(RestClient::BadGateway)
117117

118-
assert_raises RestClient::BadGateway do
118+
assert_raises Iteration::GenerateSnippet::SnippetGeneratorTemporarilyUnavailable do
119119
Iteration::GenerateSnippet.(iteration, retries_count: 3)
120120
end
121121
end

0 commit comments

Comments
 (0)