Running drb/rinda across different operating systems

I’m trying to setup a computational farm on our IBM SP cluster and have run
into a problem. When I keep both client + servers on the same cluster
(either IBM SP or Sun Blade) everything runs fine. My preference is to keep
the client on my Sun Blade and run the servers on the SP cluster. But when
I do so I’m getting the error below.

Anybody have experience in running drb across different operating systems?
I’m using ruby 1.6.7 and drb 1.3.6; the Blades run solaris 2.8 and the SP
nodes aix 4.3.3.0 . (My guess is that the problem may be due to an
incompatibility with how the serialization is taking place on the two
systems; drb.rb:107 is a Marshal::load)

Thanks in advance.

Raja

(druby://:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:107:in load': class DRb::DRbObject needs to have method_load’ (TypeError)
from (druby://:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:107:in load' from (druby://<host>:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:131:inrecv_request’
from (druby://:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:130:in times' from (druby://<host>:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:130:inrecv_request’
from (druby://:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:344:in proc' from (druby://<host>:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:337:instart’
from (druby://:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:337:in proc' from (druby://<host>:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:310:inrun’
from (druby://:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:307:in start' from (druby://<host>:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:307:inrun’
from (druby://:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:269:in initialize' from (druby://<host>:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:390:innew’
from (druby://:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:390:in start_service' from (druby://<host>:8080) client_3.rb:29 from /N/u/raja/SP/lib/ruby/site_ruby/1.6/drb/rinda.rb:22:inin’
from server.rb:44

Raja S. wrote:

Anybody have experience in running drb across different
operating systems? I’m using ruby 1.6.7 and drb 1.3.6; the
Blades run solaris 2.8 and the SP nodes aix 4.3.3.0 . (My
guess is that the problem may be due to an incompatibility
with how the serialization is taking place on the two systems;
drb.rb:107 is a Marshal::load)

This isn’t going to help you much since I haven’t encountered
your problem - but to your OS question - yes. I regularly run
drb between W2K, Linux and FreeBSD.

Looks like a question for Masatoshi Seki. If you don’t get an
answer here you may wish to post at the low volume DRB list:

http://groups.yahoo.com/group/ruby-drb/

Aidan

Hi,

Anybody have experience in running drb across different operating
systems?
I’m using ruby 1.6.7 and drb 1.3.6; the Blades run solaris 2.8 and the
SP
nodes aix 4.3.3.0 . (My guess is that the problem may be due to an
incompatibility with how the serialization is taking place on the two
systems; drb.rb:107 is a Marshal::load)

(druby://:8080) /u/raja/lib/ruby/site_ruby/1.6/drb/drb.rb:107:in
load': class DRb::DRbObject needs to have method_load’ (TypeError)

I think that the version of dRuby of one of machines is old.
Please check the version of dRuby library.

Seki

Looks like a question for Masatoshi Seki. If you don’t get an
answer here you may wish to post at the low volume DRB list:
http://groups.yahoo.com/group/ruby-drb/

Thanks for the pointer. I’ll follow it up there too.
But good to know that you’ve been able to run drb under multiple OSes.

I tested it a bit more and oddly enough the problem seems to be one
way.

    Solaris 2.8     AIX 4.3.3.0
       serv             clnt           - fine
       clnt             serv           - error

Unfortunately, the way I need it is the configuration having an error.

Following is the vanilla test code and error mesg.

I’ll also follow up on the drb list.

Thanks,
Raja

···

serv.rb

require ‘drb’

class Server
def run
puts "running on #{DRb.uri}"
return "testing …"
end
end

serv = Server.new
DRb.start_service( nil, serv )
puts DRb.uri
DRb.thread.join


clnt.rb

require 'drb’
DRb.start_service()
obj = DRbObject.new(nil, ARGV[0])
puts obj.run


(druby://:50764)
/N/u/raja/SP/lib/ruby/site_ruby/1.6/drb/drb.rb:23:in `_id2ref’: failed to
convert DRb::DRbObject into Integer (TypeError)

Masatoshi SEKI m_seki@mva.biglobe.ne.jp writes:

I think that the version of dRuby of one of machines is old.
Please check the version of dRuby library.

Right. Thanks!

I had recently deleted drb 1.3.2 on Solaris and had installed drb 1.3.6 on
both Solaris and AIX. As it turns out my problem was due to a second
spurious installation of drb 1.3.2 sitting up front on my ruby lib path on
the Solaris side. Got rid of that and things are fine now.

Thanks also for your fine effort in producing such a neat tool!

Raja