Project

General

Profile

Actions

Bug #377

closed

Rinda has a race condition

Added by Anonymous over 16 years ago. Updated over 13 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
Backport:
[ruby-dev:35677]

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
[#<Thread:0x819f2f0 run>, #<Thread:0x838f1a0 sleep>,
#<Thread:0x8389dcc sleep>, #<Thread:0x83a2db8 sleep>,
#<Thread:0x839d520 sleep>, #<Thread:0x83919a0 sleep>,
#<Thread:0x832dd9c sleep>, #<Thread:0x826e67c sleep>,
#<Thread:0x83888f0 sleep>, #<Thread:0x825ebb4 sleep>,
#<Thread:0x825ccd8 sleep>, #<Thread:0x849d038 sleep>,
#<Thread:0x82f3214 sleep>, #<Thread:0x8311ac0 sleep>,
#<Thread:0x845f328 sleep>, #<Thread:0x84be5bc sleep>,
#<Thread:0x847b938 sleep>, #<Thread:0x84265a0 sleep>,
#<Thread:0x824f7b8 sleep>, #<Thread:0x828cf00 sleep>]

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

keeperをうまく生成できなかったのは私のプログラミング能力の問
題です。
もうちょっとがんばってみます。

タプルごとにThreadを生成してしまうのが一番簡単なんだけど‥

=end


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #372: Rinda has a race conditionClosedseki (Masatoshi Seki)Actions
Actions #1

Updated by mame (Yusuke Endoh) over 16 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 (Thomas Sondergaard) = Rinda::TupleSpace.new(1)
    end

  • def teardown

  • @ts.finalize

  • end
    end

class TupleSpaceProxyTest < Test::Unit::TestCase
@@ -529,6 +533,10 @@
@ts (Thomas Sondergaard) = 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

=end

Actions #2

Updated by matz (Yukihiro Matsumoto) over 16 years ago

  • Status changed from Open to Rejected

=begin
#376と重複
=end

Actions #3

Updated by mame (Yusuke Endoh) over 16 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 (Thomas Sondergaard) = Rinda::TupleSpace.new(1)
    end

  • def teardown

  • @ts.finalize

  • end
    end

class TupleSpaceProxyTest < Test::Unit::TestCase
@@ -529,6 +533,10 @@
@ts (Thomas Sondergaard) = 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

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0