Skip to content

Commit 2d78f95

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

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

lib/logstash/outputs/redis.rb

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,12 @@ def receive(event)
170170
else
171171
@redis.publish(key, payload)
172172
end
173-
rescue => e
174-
@logger.warn("Failed to send event to Redis", :event => event,
175-
:identity => identity, :exception => e,
176-
:backtrace => e.backtrace)
173+
rescue Redis::CommandError => e
174+
@logger.warn("Redis write rejected: #{e.message}", :identity => identity)
177175
sleep @reconnect_interval
178-
@redis = nil
176+
retry
177+
rescue => e
178+
on_send_error(e)
179179
retry
180180
end
181181
end # def receive
@@ -200,15 +200,23 @@ def flush(events, key, close=false)
200200
@redis.rpush(key, events)
201201
end
202202
# called from Stud::Buffer#buffer_flush when an error occurs
203-
def on_flush_error(e)
203+
def on_send_error(e)
204204
@logger.warn("Failed to send backlog of events to Redis",
205205
:identity => identity,
206206
:exception => e,
207207
:backtrace => e.backtrace
208208
)
209+
210+
begin
211+
@redis.disconnect
212+
rescue
213+
end
214+
sleep @reconnect_interval
209215
@redis = connect
210216
end
211217

218+
alias_method :on_send_error, :on_send_error
219+
212220
def close
213221
if @batch
214222
buffer_flush(:final => true)

0 commit comments

Comments
 (0)