Feature #4483
closedPStoreをデフォルトで複数のスレッドから扱えるようにしたい
Description
=begin
PStoreは、デフォルトでは他のスレッドがトランザクションを実行中にトランザクションに入ろうとすると例外nested transactionを発生させます。
initialize時に第2引数が真であれば、別のスレッドがトランザクションから抜けるまで待つようになりますが、
PStoreの用途から考えると、わざわざ引数にそのような指定をしなくても例外を投げずに待ってくれた方が嬉しいと思うのですが、いかがでしょうか。
PStore.newの第2引数を削除し、別のスレッドがトランザクションを実行中でもデフォルトで例外を投げずに待つようにしたpstore.rbと、
それに合わせて改変したtest_pstore.rbのパッチを添付します。
=end
Files
Updated by sorah (Sorah Fukumori) about 14 years ago
=begin
互換性の面が懸念されます。
たとえばnested transaction例外を想定しているコード (たとえばtest_thread_safeとか) はどうなるのでしょう。
=end
Updated by shyouhei (Shyouhei Urabe) about 14 years ago
=begin
デフォルトがブロックするかしないかどっち向きに倒れておくべきかには議論のある所だとは思いますが、いきなり第二引数をなくしてしまうというのはやりすぎではないでしょうか。あなたの嬉しさは他者を排斥する理由としては弱いです。
=end
Updated by sorah (Sorah Fukumori) about 14 years ago
=begin
Shyouhei Urabe wrote:
デフォルトがブロックするかしないかどっち向きに倒れておくべきかには議論のある所だとは思いますが、いきなり第二引数をなくしてしまうというのはやりすぎではないでしょうか。あなたの嬉しさは他者を排斥する理由としては弱いです。
あまりパッチみてませんけどそれもありましたね。同意します。
せめてthread_safe = trueにしておいて、今の動作と逆転するような感じだと良いですかね?
無視するか動作を逆転させるかどちらかは別として、引数を削るのは賛成しかねます。
=end
Updated by Glass_saga (Masaki Matsushita) about 14 years ago
=begin
PStoreはRubyのオブジェクトを外部ファイルに格納する為のクラスな訳ですから、あるスレッドがトランザクションを実行中に別のスレッドがトランザクションに入ろうとした場合に、整合性を保つ為に同期する理由はあっても、例外を投げる理由はないのではと考えました。
そこで第2引数を削除したパッチを添付したのですが、確かにいきなり第2引数をなくしてしまうというのはやりすぎだったかも知れません。
それと、私が嬉しいかどうかをこういう場で引き合いに出したのは正しくなかったと思います。
Shota Fukumoriさんの案に賛成します。
ただ、thread_safe = trueとした場合でも、PStore.newに第2引数を与えずにnested transaction例外を想定しているコードには影響してしまいますね。
=end
Updated by sorah (Sorah Fukumori) about 14 years ago
=begin
sora_hです
考えてみればどうせblockされるわけで必ずブロック内は実行されるわけで、nested transactionはもしダメなら諦める的な感じで捕捉されることを想定しているコードなら
この仕様でも良いかもしれません。transactionが起きているかどうかのコードはin_transactionで調べるべきだと思いますしね。
とりあえず周りの反応次第ですが。その辺の問題が解決できたら入れても良いかもしれないです。
ということで現状は賛成しかね、解決ししだい賛成という立場になります
=end
Updated by nahi (Hiroshi Nakamura) about 13 years ago
- Description updated (diff)
- Status changed from Open to Assigned
- Assignee set to nahi (Hiroshi Nakamura)
Updated by mame (Yusuke Endoh) over 12 years ago
- Target version set to 2.6
Updated by mame (Yusuke Endoh) about 7 years ago
- Status changed from Assigned to Feedback
- Assignee changed from nahi (Hiroshi Nakamura) to Glass_saga (Masaki Matsushita)
これ、どうしますか?まだやる気があったら、ハンドルをお願いします。ないなら、close しましょう。(現在、PStore はメンテナ不在です)
以下は個人的意見です。互換性のため、「いきなり消す」はないと思います。どうしても消したいなら、警告期間を用意すべきでしょう。「デフォルトを thread_safe = true にする」はありうるかもしれませんが、慎重な調査や検討が必要かもしれません。
Updated by Glass_saga (Masaki Matsushita) about 7 years ago
今となっては僕もどういう状況で困っていたのか忘れてしまったので、他に要望がなければクローズしようと思います。
Updated by Glass_saga (Masaki Matsushita) about 7 years ago
- Status changed from Feedback to Rejected