[ruby-dev:45548] Re: drb SSL test timeout
From:
Masatoshi SEKI <m_seki@...>
Date:
2012-04-22 10:52:17 UTC
List:
ruby-dev #45548
咳といいます。
田中さんありがとうございます。
On 2012/04/22, at 12:31, Tanaka Akira wrote:
>
> そして、Process.detach が生成するスレッドのスレッド変数に
> サービスの名前を入れておいて、後から識別できるようにします。
> 現在のテストでは問題ないのですが一般には ExtServManager に複数の
> インスタンスがありうるような気もするので、
> ここはサービスの名前だけじゃなくて、
> ExtServManager のインスタンスも入れておいたほうがいいかもしれません。
testスクリプトをポータブルにする過程で生まれたもので
おそらく誰も使ってないと思います(私も使い途をやっと思い出した)から、
気にしなくていい気がします。
>
> あとは、setup で @service_name にサービスの名前を保存しておいて、
> teardown で Thread.list から探し出して kill しています。
> あと、teardown では DRbService.manager.unregist も呼び出してつじつまを
> 合わせます。
>
> いかがでしょうか。
ありがとうございます。
私はこれでcommitしてよいように思います。
あ。もしかして @extから名前が知れたら(@ext.name で辿れたら)、
@service_name は要らないでしょうか?
Index: extserv.rb
===================================================================
--- extserv.rb (revision 35416)
+++ extserv.rb (working copy)
@@ -20,7 +20,7 @@
@invoker = ro.regist(name, DRbObject.new(self, @server.uri))
end
end
- attr_reader :server
+ attr_reader :server, :name
def front
DRbObject.new(nil, @server.uri)
そうではなく、そもそもその失敗のときには@extがnilなのかしら。
>
> % svn diff --diff-cmd diff -x '-u -p'
> Index: lib/drb/extservm.rb
> ===================================================================
> --- lib/drb/extservm.rb (revision 35422)
> +++ lib/drb/extservm.rb (working copy)
> @@ -79,7 +79,15 @@ module DRb
> @servers[name] = false
> end
> uri = @uri || DRb.uri
> - Process.detach spawn("#{command} #{uri} #{name}")
> + if command.respond_to? :to_ary
> + command = command.to_ary + [uri, name]
> + pid = spawn(*command)
> + else
> + pid = spawn("#{command} #{uri} #{name}")
> + end
> + th = Process.detach(pid)
> + th[:drb_service] = name
> + th
> end
> end
> end
> Index: test/drb/test_drbunix.rb
> ===================================================================
> --- test/drb/test_drbunix.rb (revision 35422)
> +++ test/drb/test_drbunix.rb (working copy)
> @@ -20,7 +20,8 @@ end
> class TestDRbUNIXCore < Test::Unit::TestCase
> include DRbCore
> def setup
> - @ext = DRbUNIXService.ext_service('ut_drb_drbunix.rb')
> + @service_name = 'ut_drb_drbunix.rb'
> + @ext = DRbUNIXService.ext_service(@service_name)
> @there = @ext.front
> end
>
> @@ -37,7 +38,8 @@ end
> class TestDRbUNIXAry < Test::Unit::TestCase
> include DRbAry
> def setup
> - @ext = DRbUNIXService.ext_service('ut_array_drbunix.rb')
> + @service_name = 'ut_array_drbunix.rb'
> + @ext = DRbUNIXService.ext_service(@service_name)
> @there = @ext.front
> end
> end
> Index: test/drb/test_drbssl.rb
> ===================================================================
> --- test/drb/test_drbssl.rb (revision 35422)
> +++ test/drb/test_drbssl.rb (working copy)
> @@ -36,7 +36,8 @@ end
> class TestDRbSSLCore < Test::Unit::TestCase
> include DRbCore
> def setup
> - @ext = DRbSSLService.ext_service('ut_drb_drbssl.rb')
> + @service_name = 'ut_drb_drbssl.rb'
> + @ext = DRbSSLService.ext_service(@service_name)
> @there = @ext.front
> end
>
> @@ -53,7 +54,8 @@ end
> class TestDRbSSLAry < Test::Unit::TestCase
> include DRbAry
> def setup
> - @ext = DRbSSLService.ext_service('ut_array_drbssl.rb')
> + @service_name = 'ut_array_drbssl.rb'
> + @ext = DRbSSLService.ext_service(@service_name)
> @there = @ext.front
> end
> end
> Index: test/drb/test_drb.rb
> ===================================================================
> --- test/drb/test_drb.rb (revision 35422)
> +++ test/drb/test_drb.rb (working copy)
> @@ -202,7 +202,8 @@ end
>
> class TestDRbSafe1 < TestDRbAry
> def setup
> - @ext = DRbService.ext_service('ut_safe1.rb')
> + @service_name = 'ut_safe1.rb'
> + @ext = DRbService.ext_service(@service_name)
> @there = @ext.front
> end
> end
> Index: test/drb/drbtest.rb
> ===================================================================
> --- test/drb/drbtest.rb (revision 35422)
> +++ test/drb/drbtest.rb (working copy)
> @@ -11,7 +11,7 @@ class DRbService
> @@ruby += " -d" if $DEBUG
> def self.add_service_command(nm)
> dir = File.dirname(File.expand_path(__FILE__))
> - DRb::ExtServManager.command[nm] = "#{@@ruby} \"#{dir}/#{nm}\""
> + DRb::ExtServManager.command[nm] = [@@ruby, "#{dir}/#{nm}"]
> end
>
> %w(ut_drb.rb ut_array.rb ut_port.rb ut_large.rb ut_safe1.rb
> ut_eval.rb ut_eq.rb).each do |nm|
> @@ -65,12 +65,20 @@ end
>
> module DRbCore
> def setup
> - @ext = DRbService.ext_service('ut_drb.rb')
> + @service_name = 'ut_drb.rb'
> + @ext = DRbService.ext_service(@service_name)
> @there = @ext.front
> end
>
> def teardown
> @ext.stop_service if @ext
> + DRbService.manager.unregist(@service_name)
> + Thread.list.each {|th|
> + if th.respond_to?(:pid) && th[:drb_service] == @service_name
> + Process.kill :TERM, th.pid
> + th.join
> + end
> + }
> end
>
> def test_00_DRbObject
> @@ -271,12 +279,20 @@ end
>
> module DRbAry
> def setup
> - @ext = DRbService.ext_service('ut_array.rb')
> + @service_name = 'ut_array.rb'
> + @ext = DRbService.ext_service(@service_name)
> @there = @ext.front
> end
>
> def teardown
> @ext.stop_service if @ext
> + DRbService.manager.unregist(@service_name)
> + Thread.list.each {|th|
> + if th.respond_to?(:pid) && th[:drb_service] == @service_name
> + Process.kill :TERM, th.pid
> + th.join
> + end
> + }
> end
>
> def test_01
>
> --
> [田中 哲][たなか あきら][Tanaka Akira]
>