2008年4月25日金曜日

backgroundDRbはmission criticalな箇所では使えないかも

あるサービスをテストサーバーにデプロイしていたのだけれども、backgroundDRbのタスクが停止していたようなのでログを見てみると以下のエラーが吐かれていた。
/usr/lib/ruby/1.8/timeout.rb:54:in `rbuf_fill': execution expired (Timeout::Error)
from /usr/lib/ruby/1.8/timeout.rb:56:in `timeout'
from /usr/lib/ruby/1.8/timeout.rb:76:in `timeout'
from /usr/lib/ruby/1.8/net/protocol.rb:132:in `rbuf_fill'
from /usr/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
from /usr/lib/ruby/1.8/net/protocol.rb:126:in `readline'
from /usr/lib/ruby/1.8/net/http.rb:2029:in `read_status_line'
from /usr/lib/ruby/1.8/net/http.rb:2018:in `read_new'
from /usr/lib/ruby/1.8/net/http.rb:1059:in `request'
... 27 levels...
from /usr/lib/ruby/gems/1.8/gems/packet-0.1.5/lib/packet/packet_master.rb:20:in `run'
from /deploy/seo/current/vendor/plugins/backgroundrb/server/lib/master_worker.rb:166:in `initialize'
from /deploy/seo/current/script/backgroundrb:42:in `new'
from /deploy/seo/current/script/backgroundrb:42

まぁよくあるNet::HTTPがタイムアウトした際のエラーでした。このエラーが起こった以降のログが取られていないことを考えると、daemonプロセスが落ちたのか?と思ったけどpsで見てみるとちゃんと動いてる。ということは、一度エラーが起こった場合、backgroundDRbに登録されているworkerは二度と動かないということですか。そうですか。

0 コメント: