The following code correctly errors (with RingNotFound) on Ruby 1.8.6
and 1.8.7, but hangs forever on 1.9.2 and 1.9.3:
require ‘rinda/ring’
DRb.start_service
Rinda::RingFinger.primary
This behavior is consistent on Windows 7 and Linux (both RH 5.6 and
CentOS 5.6). Anyone have an idea what’s going on?
Thanks,
Hubert
Hi, Hubert-san.
Thank you for the report.
It’s my bug.
Please try this patch:
require ‘rinda/ring’
module Rinda
class RingFinger
def lookup_ring_any(timeout=5)
queue = Queue.new
th = Thread.new do
self.lookup_ring(timeout) do |ts|
queue.push(ts)
end
queue.push(nil)
end
@primary = queue.pop
raise('RingNotFound') if @primary.nil?
while it = queue.pop
@rings.push(it)
end
@primary
end
end
end
DRb.start_service
Rinda::RingFinger.primary
Hi, Hubert-san.
It’s a bug.
I fixed it in svn.
Index: lib/rinda/ring.rb
— lib/rinda/ring.rb (revision 35596)
+++ lib/rinda/ring.rb (working copy)
@@ -203,13 +203,17 @@
queue.push(ts)
end
queue.push(nil)