Issue #9163 has been updated by drbrain (Eric Hodel).


Committed per http://twitter.com/m_seki/status/405573265139044352
----------------------------------------
Bug #9163: Rinda::RingServer can't announce locally
https://bugs.ruby-lang.org/issues/9163#change-43198

Author: drbrain (Eric Hodel)
Status: Closed
Priority: Normal
Assignee: seki (Masatoshi Seki)
Category: lib
Target version: current: 2.1.0
ruby -v: -
Backport: 1.9.3: REQUIRED, 2.0.0: REQUIRED


Rinda::RingServer#do_reply takes tuples of the form [:lookup_ring, DRbObject].  For remote processes looking for a ring server this works fine as the callback proc in the second slot of the tuple will be a DRbObject.

When a process is looking for a ring server that is local it will never be found.  DRb automatically converts a DRbObject to a local reference to reduce overhead, so the second slot of the tuple will be a Proc instance.

A Proc instance does not match DRbObject.

Changing the template to [:lookup_ring, nil] allows the ring server to respond to a local lookup request.  This also prevents memory growth in the tuple space as matching arbitrary objects can be removed.


-- 
http://bugs.ruby-lang.org/