[#59462] [ruby-trunk - Bug #9342][Open] [PATCH] SizedQueue#clear does not notify waiting threads in Ruby 1.9.3 — "jsc (Justin Collins)" <redmine@...>

9 messages 2014/01/02

[#59466] [ruby-trunk - Bug #9343][Open] [PATCH] SizedQueue#max= wakes up waiters properly — "normalperson (Eric Wong)" <normalperson@...>

11 messages 2014/01/02

[#59498] [ruby-trunk - Bug #9352][Open] [BUG] rb_sys_fail_str(connect(2) for [fe80::1%lo0]:3000) - errno == 0 — "kain (Claudio Poli)" <claudio@...>

10 messages 2014/01/03

[#59516] [ruby-trunk - Bug #9356][Open] TCPSocket.new does not seem to handle INTR — "charliesome (Charlie Somerville)" <charliesome@...>

48 messages 2014/01/03

[#59538] [ruby-trunk - Feature #9362][Assigned] Minimize cache misshit to gain optimal speed — "shyouhei (Shyouhei Urabe)" <shyouhei@...>

33 messages 2014/01/03
[#59582] Re: [ruby-trunk - Feature #9362][Assigned] Minimize cache misshit to gain optimal speed — SASADA Koichi <ko1@...> 2014/01/06

Intersting challenge.

[#59541] Re: [ruby-trunk - Feature #9362][Assigned] Minimize cache misshit to gain optimal speed — Eric Wong <normalperson@...> 2014/01/04

Hi, I noticed a trivial typo in array.c, and it fails building struct.c

[#59583] [ruby-trunk - Bug #9367][Open] REXML::XmlDecl doesn't use user specified quotes — "bearmini (Takashi Oguma)" <bear.mini@...>

12 messages 2014/01/06

[#59642] [ruby-trunk - Bug #9384][Open] Segfault in ruby 2.1.0p0 — "cbliard (Christophe Bliard)" <christophe.bliard@...>

11 messages 2014/01/08

[#59791] About unmarshallable DRb objects life-time — Rodrigo Rosenfeld Rosas <rr.rosas@...>

A while ago I created a proof-of-concept that I intended to use in my

16 messages 2014/01/15
[#59794] Re: About unmarshallable DRb objects life-time — Eric Hodel <drbrain@...7.net> 2014/01/15

On 15 Jan 2014, at 11:58, Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> wrote:

[#59808] Re: About unmarshallable DRb objects life-time — Rodrigo Rosenfeld Rosas <rr.rosas@...> 2014/01/16

Em 15-01-2014 19:42, Eric Hodel escreveu:

[#59810] Re: About unmarshallable DRb objects life-time — Eric Hodel <drbrain@...7.net> 2014/01/16

On 16 Jan 2014, at 02:15, Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> wrote:

[#59826] Re: About unmarshallable DRb objects life-time — Rodrigo Rosenfeld Rosas <rr.rosas@...> 2014/01/17

Em 16-01-2014 19:43, Eric Hodel escreveu:

[#59832] Re: About unmarshallable DRb objects life-time — Eric Hodel <drbrain@...7.net> 2014/01/17

On 17 Jan 2014, at 04:22, Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> wrote:

[ruby-core:59808] Re: About unmarshallable DRb objects life-time

From: Rodrigo Rosenfeld Rosas <rr.rosas@...>
Date: 2014-01-16 10:15:40 UTC
List: ruby-core #59808
Em 15-01-2014 19:42, Eric Hodel escreveu:
> On 15 Jan 2014, at 11:58, Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> wrote:
>
>> A while ago I created a proof-of-concept that I intended to use in my project for using Java libraries from MRI through the use of JRuby and DRb:
>>
>> http://rosenfeld.herokuapp.com/en/articles/ruby-rails/2013-07-16-running-java-from-mri-ruby-through-drb
>>
>> [it failed randomly]
>>
>> The only explanation I could think of, and after analyzing some data I logged from the DRb server, is that that some previously objects created in the DRb server (JRuby application) were being garbage collected even if I still had a reference for them in the MRI side.
> This is possible and likely for DRb services.  DRb does nothing to track which objects are converted to DRbObjects and returned to the remote side.  This leaves them eligible for garbage collection if they池e not otherwise referenced.  If you池e returning references to local objects (DRbObjects) to your peers you will need to hold on to the local objects on behalf of your peers.
>
> DRb features pluggable id conversion (id_conv) which allows you to create an alternate way of tracking the referenced local objects and keeping them alive.  There are some examples of this in the sample/ directory.
>
>> [Stuff about DRbUndumped]
> The above matters especially so for objects that you extend with DRbUndumped.  This means you must keep the object alive where you create it or the GC will throw it away when no references remain.

Thank you, this confirms my suspicion. Unfortunately it's not feasible 
to create a generic proxy to the JVM from MRI through DRb and JRuby as I 
first thought it would be. It would be the case if DRb was responsible 
for translating any references in the DRb client-side as another local 
reference in the server-side so that those objects wouldn't be collected 
by GC. In that case it should also be responsible for removing the local 
references as the counterpart in the DRb client goes away.

But maybe this is too hard to implement, so I'll give up on the generic 
MRI-JVM bridge by using DRb. I'll try to update my article soon to 
explain what I found and stop recommending that approach.

My initial motivation for trying this approach is that I'd be able to 
use all goodness of JRuby, like integration with JVM libraries, without 
the slow boot time for JVM processes, while still being able to take 
advantage of MRI goodness, like the ability to fork quickly and C 
extensions. But it was too good to be true ;)

Thanks,
Rodrigo.

In This Thread