Bug #372

Rinda has a race condition

Added by Anonymous almost 4 years ago. Updated 9 months ago.

[ruby-dev:35659]
Status:Closed Start date:
Priority:Low Due date:
Assignee:seki (Masatoshi Seki) % Done:

100%

Category:ext
Target version:2.0.0
ruby -v:-

Description

咳といいます。

1.8系のtuplespace.rbを修正した覚えがあるのですが、
1.8系でもやっぱりだめでしょうか?

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

On 2008/07/24, at 22:22, Yusuke ENDOH wrote:
>
>
> 調べていて気づいたのですが、以下のように Rinda に遅延 
> を発生させると
>
>
> Index: lib/rinda/tuplespace.rb
> ===================================================================
> --- lib/rinda/tuplespace.rb     (revision 18194)
> +++ lib/rinda/tuplespace.rb     (working copy)
> @@ -570,6 +570,7 @@
>           keep_clean
>           sleep(@period)
>         end
> +        sleep 3
>       end
>     end
>
>
> 以下で deadlock detected になります。1.8 でも同 
> 様です。

似たようなところで遅延させたんですが、こんな感じです。

Index: lib/rinda/tuplespace.rb
===================================================================
--- lib/rinda/tuplespace.rb	(revision 18222)
+++ lib/rinda/tuplespace.rb	(working copy)
@@ -622,6 +622,7 @@
              break unless need_keeper?
              keep_clean
            end
+sleep(3)
          end
        end
      end



$ ./ruby -rrinda/tuplespace -e '
ts = Rinda::TupleSpace.new(1)
ts.take([:foo, :bar], 1) rescue nil
sleep 2
ts.take([:foo, :bar], 1)
'
/usr/local/lib/ruby/1.8/rinda/tuplespace.rb:503:in `move':  
Rinda::RequestExpiredError (Rinda::RequestExpiredError)
	from /usr/local/lib/ruby/1.8/monitor.rb:242:in `synchronize'
	from /usr/local/lib/ruby/1.8/rinda/tuplespace.rb:488:in `move'
	from /usr/local/lib/ruby/1.8/rinda/tuplespace.rb:479:in `take'
	from -e:5

Related issues

related to ruby-trunk - Bug #4160: test_core_03_notify(Rinda::TupleSpaceProxyTest) が失敗する Closed 12/15/2010
related to ruby-trunk - Bug #377: Rinda has a race condition Rejected
duplicates ruby-trunk - Bug #376: Rinda has a race condition Rejected

Associated revisions

Revision 32717
Added by seki (Masatoshi Seki) 10 months ago

the code that depends on timing. [Bug #372] [Bug #4160]

Revision 33196
Added by seki (Masatoshi Seki) 9 months ago

* test/rinda/test_rinda.rb (test_core_03_notify): Fixed test failures [ruby-dev:44430] [Ruby 1.9 - Bug #372]

History

Updated by mame (Yusuke Endoh) almost 4 years ago

遠藤です。

2008/07/26 4:15 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>:
> 1.8系のtuplespace.rbを修正した覚えがあるのですが、
> 1.8系でもやっぱりだめでしょうか?

すみません、1.8.5 とかすごく古い 1.8 を見ていました。


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

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

  1) Failure:
test_core_03_notify(Rinda::TupleSpaceProxyTest)
[/home/mame/work/ruby19/ruby/test/rinda/test_rinda.rb:397]:
<[0, 3]> expected but was
<[1, 2]>.

  2) Failure:
test_has_expires_eh(TestTupleBag)
[/home/mame/work/ruby19/ruby/test/rinda/test_tuplebag.rb:137]:
<false> expected but was
<nil>.


また、この 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>]

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

Updated by mame (Yusuke Endoh) almost 4 years ago

遠藤です。

2008/07/26 4:15 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>:
> 1.8系のtuplespace.rbを修正した覚えがあるのですが、
> 1.8系でもやっぱりだめでしょうか?

すみません、1.8.5 とかすごく古い 1.8 を見ていました。


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

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

  1) Failure:
test_core_03_notify(Rinda::TupleSpaceProxyTest)
[/home/mame/work/ruby19/ruby/test/rinda/test_rinda.rb:397]:
<[0, 3]> expected but was
<[1, 2]>.

  2) Failure:
test_has_expires_eh(TestTupleBag)
[/home/mame/work/ruby19/ruby/test/rinda/test_tuplebag.rb:137]:
<false> expected but was
<nil>.


また、この 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>]

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

Updated by mame (Yusuke Endoh) almost 4 years ago

遠藤です。

2008/07/26 4:15 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>:
> 1.8系のtuplespace.rbを修正した覚えがあるのですが、
> 1.8系でもやっぱりだめでしょうか?

すみません、1.8.5 とかすごく古い 1.8 を見ていました。


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

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

  1) Failure:
test_core_03_notify(Rinda::TupleSpaceProxyTest)
[/home/mame/work/ruby19/ruby/test/rinda/test_rinda.rb:397]:
<[0, 3]> expected but was
<[1, 2]>.

  2) Failure:
test_has_expires_eh(TestTupleBag)
[/home/mame/work/ruby19/ruby/test/rinda/test_tuplebag.rb:137]:
<false> expected but was
<nil>.


また、この 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>]

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

Updated by ko1 (Koichi Sasada) almost 4 years ago

  • Status changed from Open to Rejected

Updated by metanest (Makoto Kishimoto) 10 months ago

> 1) Failure: > test_core_03_notify(Rinda::TupleSpaceProxyTest) > [/home/mame/work/ruby19/ruby/test/rinda/test_rinda.rb:397]: > <[0, 3]> expected but was > <[1, 2]>. 非常にごくまれに(1回も再現できていません)trunk でもこれが起きることがあるようです。 1) Failure: test_core_03_notify(Rinda::TupleSpaceTest) [/export/home/ksmakoto/ruby-working/ruby194/ruby-git/test/rinda/test_rinda.rb:398]: <[0, 3]> expected but was <[1, 2]>. という 1F を確認しました。 FreeBSD 8.2-STABLE で r32672 です。

Updated by kosaki (Motohiro KOSAKI) 10 months ago

  • Category set to ext
  • Status changed from Rejected to Assigned
  • Assignee set to seki (Masatoshi Seki)
  • Target version set to 2.0.0
  • ruby -v set to -
redmineにうまく転写されてないようですが、テストの問題とのことなので、 reopenのうえ咳さんにアサインします。

Updated by seki (Masatoshi Seki) 10 months ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100
This issue was solved with changeset r32717. , thank you for reporting this issue. Your contribution to Ruby is greatly appreciated. May Ruby be with you. ---------- the code that depends on timing. [Bug #372] [Bug #4160]

Updated by metanest (Makoto Kishimoto) 9 months ago

きしもとです Rinda::TupleSpaceProxyTest#test_core_03_notifyが、まだ、たまにfailに なります。 1) Failure: test_core_03_notify(Rinda::TupleSpaceProxyTest) [/export/home/ksmakoto/ruby-working/rub y194/ruby-git/test/rinda/test_rinda.rb:372]: <["delete", {"message"=>"second", "name"=>"1"}]> expected but was <["close"]>. 手元の trunk(r33066)で、 make test-all TESTS='-vn test_core_03_notify rinda/test_rinda.rb' を10万回実行してみたところ、1384回failになり、 Rinda::TupleSpaceProxyTest#test_core_03_notify で 8回、 Rinda::TupleSpaceTest#test_core_03_notify で 11回、 刺さって(?)止まったので kill しました。

Updated by Anonymous 9 months ago

咳といいます。 On 2011/08/27, at 13:41, KISHIMOTO, Makoto wrote: > きしもとです > > Rinda::TupleSpaceProxyTest#test_core_03_notifyが、まだ、たまにfailに > なります。 > > 1) Failure: > test_core_03_notify(Rinda::TupleSpaceProxyTest) [/export/home/ksmakoto/ruby-working/rub > y194/ruby-git/test/rinda/test_rinda.rb:372]: > <["delete", {"message"

Updated by Anonymous 9 months ago

(2011/08/27 14:58), Masatoshi SEKI wrote: > 咳といいます。 > > On 2011/08/27, at 13:41, KISHIMOTO, Makoto wrote: > >> きしもとです >> >> Rinda::TupleSpaceProxyTest#test_core_03_notifyが、まだ、たまにfailに >> なります。 >> >> 1) Failure: >> test_core_03_notify(Rinda::TupleSpaceProxyTest) [/export/home/ksmakoto/ruby-working/rub >> y194/ruby-git/test/rinda/test_rinda.rb:372]: >> <["delete", {"message"=>"second", "name"=>"1"}]> expected but was >> <["close"]>. >> >> 手元の trunk(r33066)で、 >> make test-all TESTS='-vn test_core_03_notify rinda/test_rinda.rb' >> を10万回実行してみたところ、1384回failになり、 >> Rinda::TupleSpaceProxyTest#test_core_03_notify で 8回、 >> Rinda::TupleSpaceTest#test_core_03_notify で 11回、 >> 刺さって(?)止まったので kill しました。 > > そうですか...。 > このテスト、もう削除したいけど、がんばんないとだめ? 咳さんがメンテされているので、咳さんの意思優先でいいと思うのですが、 参考までに理由を教えて貰えませんか。自分は無罪っぽいけど追い切れない、 とかなら、手伝うとかいう選択肢もあるのかもしれませんし。。。 刺さってるのは放置してていいのかな。というのが若干気になります

Updated by Anonymous 9 months ago

On 2011/08/27, at 15:16, KOSAKI Motohiro wrote: > (2011/08/27 14:58), Masatoshi SEKI wrote: >> 咳といいます。 >> >> On 2011/08/27, at 13:41, KISHIMOTO, Makoto wrote: >> >>> きしもとです >>> >>> Rinda::TupleSpaceProxyTest#test_core_03_notifyが、まだ、たまにfailに >>> なります。 >>> >>> 1) Failure: >>> test_core_03_notify(Rinda::TupleSpaceProxyTest) [/export/home/ksmakoto/ruby-working/rub >>> y194/ruby-git/test/rinda/test_rinda.rb:372]: >>> <["delete", {"message"

Also available in: Atom PDF