fluent / fluentd

Fluentd: Unified Logging Layer (project under CNCF)
https://www.fluentd.org
Apache License 2.0
12.88k stars 1.34k forks source link

Buffer/Queueが共にFULLになった後の復旧が行われない #71

Closed yas-ysd closed 12 years ago

yas-ysd commented 12 years ago

td-agent-1.1.9-0にてfluentを使用しております

in_tail.rbのソースを見たところ(失礼ながらログも埋め込ませていただきました)

わざとforward先のFluendをダウンさせ Buffer/QueueをFULLにしました

その後Fluentdを再開させても@buffer.empty?がfalseのままとなり例外メッセージを吐き続ける状態となりました

ぱっとみた原因ですが最初に303行のrescueにて"BufferQueueLimitError(queue size exceeds limit)"を処理しています rescue $log.error $!.to_s $log.error_backtrace close しかし、ここでcloseしている為、これ以降ファイルがclose状態になり、"closed stream"の例外が 発生し続けfluentdを再起動する必要があります

単純に以下のようにしたところ一応例外処理は発生しなくなっております ※単純に別途BufferQueueLimitError例外処理を用意してcloseをしないようにしただけです

  rescue BufferQueueLimitError
    $log.error $!.to_s
    $log.error_backtrace
  rescue => err
    $log.error $!.to_s
    $log.error_backtrace
    close
  end
frsyuki commented 12 years ago

報告ありがとうございます。例外処理に抜けがありました… 45f58de9f507af35081f0c11be75575db2538ca2 で修正しました。