From: Masatoshi SEKI Date: 2010-06-05T03:46:59+09:00 Subject: [ruby-dev:41535] Re: [Bug #3370] test failure of drb 咳といいます。 >> >> In message "[ruby-dev:41505] Re: [Bug #3370] test failure of drb" >> on Jun.02,2010 09:13:49, wrote: >>>> 安定していつも失敗しますか? >>> >>> 私の手元では再現率100%です。 >>> 環境に依存する可能性はありますが、まだ確認できていません。 >> >> 100%だと思っていたのですが、稀に成功することがあるということ >> を今発見しました! >> >> タイミング、ですかね? > > えと、私も出す方法がわかりました。 > 結論から言うと、DRbConnErrorがいつも返るように変更したいかも。 > > 次のように変更すると再現させられます。 > おそらく、クライアントが要求を全て送りきる前にサーバが > 上限をチェックして、エラーを返し、切断するケースで > クライアントがwriteに失敗してDRbConnErrorになる予感。 > > もうちょっと調べます。 > いずれにしてもDRbConnErrorを返すように修正しようと思います。 外部仕様(?)変わっちゃうけど、まずいかなあ。 例外のメッセージは"too many arguments"になるかならないのか はタイミングしだいだけどtestにないからいいのか!? Index: lib/drb/drb.rb =================================================================== --- lib/drb/drb.rb (revision 28157) +++ lib/drb/drb.rb (working copy) @@ -613,7 +613,7 @@ ro = DRb.to_obj(ref) msg = load(stream) argc = load(stream) - raise ArgumentError, 'too many arguments' if @argc_limit < argc + raise(DRbConnError, "too many arguments") if @argc_limit < argc argv = Array.new(argc, nil) argc.times do |n| argv[n] = load(stream) Index: test/drb/test_drb.rb =================================================================== --- test/drb/test_drb.rb (revision 28157) +++ test/drb/test_drb.rb (working copy) @@ -283,7 +283,7 @@ end def test_04_many_arg - assert_raise(ArgumentError) { + assert_raise(DRb::DRbConnError) { @there.arg_test(1, 2, 3, 4, 5, 6, 7, 8, 9, 0) } end Index: test/drb/drbtest.rb =================================================================== --- test/drb/drbtest.rb (revision 28157) +++ test/drb/drbtest.rb (working copy) @@ -135,7 +135,7 @@ def test_03 assert_equal(8, @there.sum(1, 1, 1, 1, 1, 1, 1, 1)) - assert_raise(ArgumentError) do + assert_raise(DRb::DRbConnError) do @there.sum(1, 1, 1, 1, 1, 1, 1, 1, 1) end assert_raise(DRb::DRbConnError) do