[#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:59937] Re: About unmarshallable DRb objects life-time

From: Eric Hodel <drbrain@...7.net>
Date: 2014-01-21 21:36:59 UTC
List: ruby-core #59937
On 21 Jan 2014, at 02:01, Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> wrote:

> Em 20-01-2014 21:51, Eric Hodel escreveu:
>> On 18 Jan 2014, at 15:12, Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> wrote:
>>> I still don't understand what you mean. Should I override Object#to_id and #to_obj in the DRb server-side to get this transparent proxy to work somehow?
>> Have you read the id_conv samples that ship with ruby?
>> 
>> $ ag -l id_conv sample/drb/
>> sample/drb/gw_s.rb
>> sample/drb/holders.rb
>> sample/drb/name.rb
> 
> The problem is that as far as I understand this id conversion will only take place for objects tranferred between the drb server and client, right?

Correct.

> My concern is that with a generic drb server that will evaluate arbitrary code in the server-side there are good chances more objects will be created in the server-side that are not referenced by any of the objects transferred over DRb, don't you agree?

If such objects are created and not accessible locally (server side) and not accessible remotely (client side) then they are by definition garbage and should be collected.

You only need to care about objects that are not accessible locally (server side) but are accessible remotely.  With the default id conversion these objects are treated as garbage on the server side.  By holding a reference to them on the server through id conversion they will no longer be garbage.

>>> The approach described in that article is that Ruby code is "eval"ued in the DRb server side (running JRuby). I can't easily track what intermediate objects have been created by the eval code on arbitrary code sent by the client-side.
>> The id conversion feature allows you to track such intermediate objects.
> 
> All of them, even if they are not transferred back to the DRb client? How would DRb know about them?

If they are not transferred back to the client and are not referenced they must be garbage, correct?

>>>> Another option is to have the client create a context object on the server that the client allocates and communicates through.  The context object will hold temporary objects and can be cleaned up automatically through a keep-alive mechanism after the client disconnects.
>>> This would be so complex that it wouldn't worth to implement a client that could easily run arbitrary code in the DRb server with access to the JVM
>> It could just be a proxy object that wraps all calls to the underlying API and ensures that only tracked references are returned to the clients.  It痴 basically the same as performing id conversion, but you値l know when the client disconnects so you can drop all references.  You should be able to wrap any protocol generically with such a context object regardless of the communication mechanism.
> 
> This has the same concern as the id conversion approach. I'm not sure if keeping a reference only to the returned objects would be enough or if there could be any cases where the returned objects don't hold any references to other possible required intermediate objects created in the process... I can't think of an example right now, so maybe this can't help, I'm just not confident enough about that

If object A needs object B and it does not hold a reference to object B and cannot otherwise retrieve or recreate object B you have a bug before involving DRb.

> But in the case where the returned DRb objects will always hold a reference to all required objects created in the server-side, there remains another problem. How do I detect that the objects have been collected in the client-side so that I could free them in the server-side as well? This has always been my main concern with regards to manually keeping a reference by artificial means in the server-side.

A context object allocated on the server and explicitly terminated from the client when it is finished using the service can overcome this problem.  The context object could communicate with the id conversion handler either by tracking peers (possibly difficult) or through time stamps on created references.  A keep-alive mechanism would allow the context object to auto-expire.

In This Thread