Skip to content

Commit 0ec2708

Browse files
committed
Properly handle command errors (e.g. OOM)
1 parent c21058f commit 0ec2708

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

lib/logstash/outputs/redis.rb

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,7 @@ def receive(event)
171171
@redis.publish(key, payload)
172172
end
173173
rescue => e
174-
@logger.warn("Failed to send event to Redis", :event => event,
175-
:identity => identity, :exception => e,
176-
:backtrace => e.backtrace)
177-
sleep @reconnect_interval
178-
@redis = nil
174+
on_send_error(e, true)
179175
retry
180176
end
181177
end # def receive
@@ -200,15 +196,29 @@ def flush(events, key, close=false)
200196
@redis.rpush(key, events)
201197
end
202198
# called from Stud::Buffer#buffer_flush when an error occurs
203-
def on_flush_error(e)
199+
def on_send_error(e, sleep=false)
200+
if e.is_a?(Redis::CommandError)
201+
@logger.warn("Redis write rejected: #{e.message}", :identity => identity)
202+
sleep @reconnect_interval if sleep
203+
return
204+
end
205+
204206
@logger.warn("Failed to send backlog of events to Redis",
205207
:identity => identity,
206208
:exception => e,
207209
:backtrace => e.backtrace
208210
)
211+
212+
begin
213+
@redis.disconnect
214+
rescue
215+
end
216+
sleep @reconnect_interval if sleep
209217
@redis = connect
210218
end
211219

220+
alias_method :on_flush_error, :on_send_error
221+
212222
def close
213223
if @batch
214224
buffer_flush(:final => true)

0 commit comments

Comments
 (0)