mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
add DRbRemoteError. [ruby-list:40348], [ruby-list:40390]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7534 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
2807bd47af
commit
a651b0c9cc
4 changed files with 48 additions and 4 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
Sat Dec 11 20:12:21 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
|
||||||
|
|
||||||
|
* lib/drb/drb.rb: add DRbRemoteError. [ruby-list:40348],
|
||||||
|
[ruby-list:40390]
|
||||||
|
|
||||||
|
* test/drb/drbtest.rb: ditto.
|
||||||
|
|
||||||
|
* test/drb/ut_drb.rb: ditto.
|
||||||
|
|
||||||
Sat Dec 11 12:41:55 2004 NAKAMURA Usaku <usa@ruby-lang.org>
|
Sat Dec 11 12:41:55 2004 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* eval.c (run_trap_eval): prototype; avoid VC++ warnings.
|
* eval.c (run_trap_eval): prototype; avoid VC++ warnings.
|
||||||
|
|
|
@ -430,6 +430,15 @@ module DRb
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class DRbRemoteError < DRbError
|
||||||
|
def initialize(error)
|
||||||
|
@reason = error.class.to_s
|
||||||
|
super("#{error.message} (#{error.class})")
|
||||||
|
set_backtrace(error.backtrace)
|
||||||
|
end
|
||||||
|
attr_reader :reason
|
||||||
|
end
|
||||||
|
|
||||||
# Class wrapping a marshalled object whose type is unknown locally.
|
# Class wrapping a marshalled object whose type is unknown locally.
|
||||||
#
|
#
|
||||||
# If an object is returned by a method invoked over drb, but the
|
# If an object is returned by a method invoked over drb, but the
|
||||||
|
@ -539,12 +548,12 @@ module DRb
|
||||||
@argc_limit = config[:argc_limit]
|
@argc_limit = config[:argc_limit]
|
||||||
end
|
end
|
||||||
|
|
||||||
def dump(obj) # :nodoc:
|
def dump(obj, error=false) # :nodoc:
|
||||||
obj = DRbObject.new(obj) if obj.kind_of? DRbUndumped
|
obj = make_proxy(obj, error) if obj.kind_of? DRbUndumped
|
||||||
begin
|
begin
|
||||||
str = Marshal::dump(obj)
|
str = Marshal::dump(obj)
|
||||||
rescue
|
rescue
|
||||||
str = Marshal::dump(DRbObject.new(obj))
|
str = Marshal::dump(make_proxy(obj, error))
|
||||||
end
|
end
|
||||||
[str.size].pack('N') + str
|
[str.size].pack('N') + str
|
||||||
end
|
end
|
||||||
|
@ -602,7 +611,7 @@ module DRb
|
||||||
end
|
end
|
||||||
|
|
||||||
def send_reply(stream, succ, result) # :nodoc:
|
def send_reply(stream, succ, result) # :nodoc:
|
||||||
stream.write(dump(succ) + dump(result))
|
stream.write(dump(succ) + dump(result, !succ))
|
||||||
rescue
|
rescue
|
||||||
raise(DRbConnError, $!.message, $!.backtrace)
|
raise(DRbConnError, $!.message, $!.backtrace)
|
||||||
end
|
end
|
||||||
|
@ -612,6 +621,15 @@ module DRb
|
||||||
result = load(stream)
|
result = load(stream)
|
||||||
[succ, result]
|
[succ, result]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def make_proxy(obj, error=false)
|
||||||
|
if error
|
||||||
|
DRbRemoteError.new(obj)
|
||||||
|
else
|
||||||
|
DRbObject.new(obj)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Module managing the underlying network protocol(s) used by drb.
|
# Module managing the underlying network protocol(s) used by drb.
|
||||||
|
|
|
@ -227,6 +227,19 @@ module DRbCore
|
||||||
assert_kind_of(DRbObject, v)
|
assert_kind_of(DRbObject, v)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_11_remote_no_method_error
|
||||||
|
assert_raises(DRb::DRbRemoteError) do
|
||||||
|
@there.remote_no_method_error
|
||||||
|
end
|
||||||
|
begin
|
||||||
|
@there.remote_no_method_error
|
||||||
|
rescue
|
||||||
|
error = $!
|
||||||
|
assert_match(/^undefined method .*\(NoMethodError\)/, error.message)
|
||||||
|
assert_equal('NoMethodError', error.reason)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
module DRbAry
|
module DRbAry
|
||||||
|
|
|
@ -66,6 +66,10 @@ class DRbEx
|
||||||
raise UError
|
raise UError
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remote_no_method_error
|
||||||
|
invoke_no_method(self)
|
||||||
|
end
|
||||||
|
|
||||||
def test_yield
|
def test_yield
|
||||||
yield
|
yield
|
||||||
yield([])
|
yield([])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue