Bug #377

Rinda has a race condition

Added by Anonymous almost 7 years ago. Updated about 4 years ago.

[ruby-dev:35677]
Status:Rejected
Priority:Normal
Assignee:-
ruby -v: Backport:

Description

=begin
咳といいます。

On 2008/07/27, at 22:34, Yusuke ENDOH wrote:

どちらにせよ、1.8のtuplespace.rbを1.9へ
ciしようと思いますので、
よかったらあとでもう一度ためしてもらえますか?
#いまビルド中なのでしばらく待ってください

確認しました。
make test-all TESTS=rinda では 0F0E でしたが、make test-
all だと
2 つ Failure が出ました。

failureはたぶんテストの問題です。
1.8系でも遅いマシンで現象を確認しました。
なんとかしたいと思います。

また、この start_keeper だと keeper が死なない
と思うのですが、
それはちょっとまずくないでしょうか。
 
$ ./ruby -e '
at_exit { sleep 5; p Thread.list }
require "test/rinda/test_rinda.rb"
'

Loaded suite -e
Started
.........................
Finished in 1.050015839 seconds.

25 tests, 292 assertions, 0 failures, 0 errors
[#, #,
#, #,
#, #,
#, #,
#, #,
#, #,
#, #,
#, #,
#, #,
#, #]

これは迷ったんだけど、いまはそうしました。
実アプリケーションではTupleSpaceを使い捨てないと想定し
たからです。

keeperをうまく生成できなかったのは私のプログラミング能力の問
題です。
もうちょっとがんばってみます。
# タプルごとにThreadを生成してしまうのが一番簡単なんだけど‥
=end


Related issues

Related to Ruby trunk - Bug #372: Rinda has a race condition Closed

History

#1 Updated by Yusuke Endoh almost 7 years ago

=begin

遠藤です。

2008/07/29 4:10 Masatoshi SEKI :

また、この start_keeper だと keeper が死なないと思うのですが、
それはちょっとまずくないでしょうか。
(snip)

これは迷ったんだけど、いまはそうしました。
実アプリケーションではTupleSpaceを使い捨てないと想定したからです。

うーん、妙にスレッドが残るのは他のテストへの影響がちょっと心配です。
今のところ大丈夫みたいですけど。あとやっぱり少し気持ち悪いです。

せめて、keeper を明示的に終わらせる API を提供するのはどうでしょう。
もちろん keeper がうまく管理できれば、それが一番いいと思います。

Index: lib/rinda/tuplespace.rb
===================================================================
--- lib/rinda/tuplespace.rb (revision 18257)
+++ lib/rinda/tuplespace.rb (working copy)
@@ -446,6 +446,16 @@
end

  ##
  • # Finalize this TupleSpace. After TupleSpace is finalized, it should not
  • # be used.
  • def finalize
  • if @keeper && @keeper.alive?
  • @keeper.kill
  • @keeper.join
  • end
  • end +
  • ##
    # Adds +tuple+

    def write(tuple, sec=nil)

    Index: test/rinda/test_rinda.rb

    --- test/rinda/test_rinda.rb (revision 18257)
    +++ test/rinda/test_rinda.rb (working copy)
    @@ -518,6 +518,10 @@
    ThreadGroup.new.add(Thread.current)
    @ts = Rinda::TupleSpace.new(1)
    end
    +

  • def teardown

  • @ts.finalize

  • end
    end

class TupleSpaceProxyTest < Test::Unit::TestCase
@@ -529,6 +533,10 @@
@ts = Rinda::TupleSpaceProxy.new(@ts_base)
end

  • def teardown
  • @ts_base.finalize
  • end + def test_remote_array_and_hash @ts.write(DRbObject.new([1, 2, 3])) assert_equal([1, 2, 3], @ts.take([1, 2, 3], 0))

--
Yusuke ENDOH mame@tsg.ne.jp

=end

#2 Updated by Yukihiro Matsumoto almost 7 years ago

  • Status changed from Open to Rejected

=begin
#376と重複
=end

#3 Updated by Yusuke Endoh almost 7 years ago

=begin

遠藤です。

2008/07/29 4:10 Masatoshi SEKI :

また、この start_keeper だと keeper が死なないと思うのですが、
それはちょっとまずくないでしょうか。
(snip)

これは迷ったんだけど、いまはそうしました。
実アプリケーションではTupleSpaceを使い捨てないと想定したからです。

うーん、妙にスレッドが残るのは他のテストへの影響がちょっと心配です。
今のところ大丈夫みたいですけど。あとやっぱり少し気持ち悪いです。

せめて、keeper を明示的に終わらせる API を提供するのはどうでしょう。
もちろん keeper がうまく管理できれば、それが一番いいと思います。

Index: lib/rinda/tuplespace.rb
===================================================================
--- lib/rinda/tuplespace.rb (revision 18257)
+++ lib/rinda/tuplespace.rb (working copy)
@@ -446,6 +446,16 @@
end

  ##
  • # Finalize this TupleSpace. After TupleSpace is finalized, it should not
  • # be used.
  • def finalize
  • if @keeper && @keeper.alive?
  • @keeper.kill
  • @keeper.join
  • end
  • end +
  • ##
    # Adds +tuple+

    def write(tuple, sec=nil)

    Index: test/rinda/test_rinda.rb

    --- test/rinda/test_rinda.rb (revision 18257)
    +++ test/rinda/test_rinda.rb (working copy)
    @@ -518,6 +518,10 @@
    ThreadGroup.new.add(Thread.current)
    @ts = Rinda::TupleSpace.new(1)
    end
    +

  • def teardown

  • @ts.finalize

  • end
    end

class TupleSpaceProxyTest < Test::Unit::TestCase
@@ -529,6 +533,10 @@
@ts = Rinda::TupleSpaceProxy.new(@ts_base)
end

  • def teardown
  • @ts_base.finalize
  • end + def test_remote_array_and_hash @ts.write(DRbObject.new([1, 2, 3])) assert_equal([1, 2, 3], @ts.take([1, 2, 3], 0))

--
Yusuke ENDOH mame@tsg.ne.jp

=end

Also available in: Atom PDF