Bug #372
Rinda has a race condition
| Status: | Closed | Start date: | ||
|---|---|---|---|---|
| Priority: | Low | Due date: | ||
| Assignee: | % 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
Associated revisions
* 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
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"