Project

General

Profile

Actions

Bug #372

closed

Rinda has a race condition

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

Status:
Closed
Target version:
ruby -v:
-
Backport:
[ruby-dev:35659]

Description

=begin
咳といいます。

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
=end


Related issues 3 (0 open3 closed)

Related to Ruby master - Bug #377: Rinda has a race conditionRejectedActions
Related to Ruby master - Bug #4160: test_core_03_notify(Rinda::TupleSpaceProxyTest) が失敗するClosedseki (Masatoshi Seki)12/15/2010Actions
Is duplicate of Ruby master - Bug #376: Rinda has a race conditionRejectedmame (Yusuke Endoh)Actions
Actions #1

Updated by mame (Yusuke Endoh) over 16 years ago

=begin
遠藤です。

2008/07/26 4:15 Masatoshi SEKI :

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]:
    expected but was
    .

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

=end

Actions #2

Updated by mame (Yusuke Endoh) over 16 years ago

=begin

遠藤です。

2008/07/26 4:15 Masatoshi SEKI :

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]:
    expected but was
    .

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

=end

Actions #3

Updated by mame (Yusuke Endoh) over 16 years ago

=begin

遠藤です。

2008/07/26 4:15 Masatoshi SEKI :

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]:
    expected but was
    .

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

=end

Actions #4

Updated by ko1 (Koichi Sasada) about 16 years ago

  • Status changed from Open to Rejected

=begin

=end

Updated by metanest (Makoto Kishimoto) over 13 years 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) over 13 years 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のうえ咳さんにアサインします。

Actions #7

Updated by seki (Masatoshi Seki) over 13 years 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) about 13 years 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 about 13 years 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 about 13 years 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 about 13 years 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"
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0