2006年 11月 09日

RingServer を定期的に再検索する Provider

provider = Rinda::RingProvider.new(:Reload, DRbObject.new(reload), 'Reload')
entry = nil
loop do
	begin
		if entry
			# 登録済みタプルを削除する
			entry.renew(0)
		end
		# RingServer を再検索する
		Rinda::RingFinger.finger.lookup_ring_any
		entry = provider.provide
	rescue DRb::DRbConnError, RuntimeError => e
		# RingServer が見つからないときのエラーをキャッチ
		entry = nil
		puts e.message
	end


	sleep 60
end

なんかいい方法ないかなぁ。これだと Renewer は意味がなくなる。(Renewer はサーバからのリクエストの答えるだけなので、サーバが動いてなければ意味をなさない。)

provide メソッドをオーバライドしてブロックするようにしてもいいかもしれない。