Skip to content

Commit 32494af

Browse files
committed
check for ValidationException as permanent error, treat all other errors as transient
1 parent 5fb3313 commit 32494af

File tree

2 files changed

+9
-15
lines changed

2 files changed

+9
-15
lines changed

lib/journaled/kinesis_batch_sender.rb

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,8 @@ def permanent?
2020
end
2121
end
2222

23-
TRANSIENT_ERROR_CLASSES = [
24-
Aws::Kinesis::Errors::InternalFailure,
25-
Aws::Kinesis::Errors::ServiceUnavailable,
26-
Aws::Kinesis::Errors::Http503Error,
27-
Aws::Kinesis::Errors::ProvisionedThroughputExceededException,
28-
Seahorse::Client::NetworkingError,
23+
PERMANENT_ERROR_CLASSES = [
24+
Aws::Kinesis::Errors::ValidationException,
2925
].freeze
3026

3127
# Send a batch of database events to Kinesis
@@ -73,23 +69,21 @@ def send_event(event)
7369
)
7470

7571
event
76-
rescue *TRANSIENT_ERROR_CLASSES => e
77-
# Event failed with transient error
78-
Rails.logger.error("Kinesis event send failed (transient): #{e.class} - #{e.message}")
72+
rescue *PERMANENT_ERROR_CLASSES => e
73+
Rails.logger.error("Kinesis event send failed (permanent): #{e.class} - #{e.message}")
7974
FailedEvent.new(
8075
event:,
8176
error_code: e.class.to_s,
8277
error_message: e.message,
83-
transient: true,
78+
transient: false,
8479
)
8580
rescue StandardError => e
86-
# Event failed with permanent error
87-
Rails.logger.error("Kinesis event send failed (permanent): #{e.class} - #{e.message}")
81+
Rails.logger.error("Kinesis event send failed (transient): #{e.class} - #{e.message}")
8882
FailedEvent.new(
8983
event:,
9084
error_code: e.class.to_s,
9185
error_message: e.message,
92-
transient: false,
86+
transient: true,
9387
)
9488
end
9589

spec/lib/journaled/kinesis_batch_sender_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@
124124

125125
before do
126126
allow(kinesis_client).to receive(:put_record)
127-
.and_raise(Aws::Kinesis::Errors::InvalidArgumentException.new(nil, 'Invalid data'))
127+
.and_raise(Aws::Kinesis::Errors::ValidationException.new(nil, 'Invalid data'))
128128
end
129129

130130
it 'returns failed event with non-transient flag' do
@@ -133,7 +133,7 @@
133133
expect(result[:failed].length).to eq(1)
134134
failure = result[:failed].first
135135
expect(failure.event).to eq(event)
136-
expect(failure.error_code).to eq('Aws::Kinesis::Errors::InvalidArgumentException')
136+
expect(failure.error_code).to eq('Aws::Kinesis::Errors::ValidationException')
137137
expect(failure.error_message).to eq('Invalid data')
138138
expect(failure.transient?).to be false
139139
expect(failure.permanent?).to be true

0 commit comments

Comments
 (0)