yamkさんの日記でDNSBLを使うリファラフィルタが原因で日記の表示が遅くなっているとの報告を見かけたので、リファラフィルタにtimeoutを利用するようにしてみた。
Exceptionを拾うときにResolvTimeoutとTimeoutErrorとでかぶってしまうような気がしたので、ResolvTimeoutで行っているDNSBL問い合わせの再試行処理の方をばっさり削除。これで少しは早くなるかな?
spamフィルタを改造するついでに
22:34 sho > Threadつかって同時問い合わせするともっとカッコいいぞ(笑)
と隊長から牙指令を受けたのでping.rbを眺めながら挑戦してみるも、上手くいかず。ソースはこんな感じね。
def black_domain?( domain ) threads = [] @spamlookup_domain_list.split(/\n/).each do |dnsbl| threads << Thread.start( dnsbl ) do |dnsbl| begin timeout(5) do address = Resolv.getaddress( "#{domain}.#{dnsbl}" ) return true end rescue ResolvError rescue TimeoutError rescue Exception end end end threads.each {|t| t.join } return false end
どの時点でreturn trueをすべきかってことが問題なんだけど、さっぱりわからず。ぬーん、Threadはもう少し修行しないとだめだなー。
この辺は次回に続く。
コミットする時に同じディレクトリにあるゴミファイルまでコミットしてしまった。すぐにcvs removeしたけど、こんなポカミスをするなんて、やっぱ疲れてるのかなー。