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
on 2012-05-07 19:04
on 2012-05-08 07:33
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
on 2012-05-08 21:46
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)
+ end
+
+ @primary = queue.pop
+ raise('RingNotFound') if @primary.nil?
+
+ Thread.new do
while it = queue.pop
@rings.push(it)
end
end
- @primary = queue.pop
- raise('RingNotFound') if @primary.nil?
@primary
end
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.