975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
|
# File 'lib/fluent/plugin/output.rb', line 975
def write_guard(&block)
begin
block.call
rescue Fluent::Plugin::Buffer::BufferOverflowError
log.warn "failed to write data into buffer by buffer overflow", action: @buffer_config.overflow_action
case @buffer_config.overflow_action
when :throw_exception
raise
when :block
log.debug "buffer.write is now blocking"
until @buffer.storable?
if self.stopped?
log.error "breaking block behavior to shutdown Fluentd"
raise
end
log.trace "sleeping until buffer can store more data"
sleep 1
end
log.debug "retrying buffer.write after blocked operation"
retry
when :drop_oldest_chunk
begin
oldest = @buffer.dequeue_chunk
if oldest
log.warn "dropping oldest chunk to make space after buffer overflow", chunk_id: dump_unique_id_hex(oldest.unique_id)
@buffer.purge_chunk(oldest.unique_id)
else
log.error "no queued chunks to be dropped for drop_oldest_chunk"
end
rescue
end
raise unless @buffer.storable?
retry
else
raise "BUG: unknown overflow_action '#{@buffer_config.overflow_action}'"
end
end
end
|