Feature #4483

PStoreをデフォルトで複数のスレッドから扱えるようにしたい

Added by Masaki Matsushita about 3 years ago. Updated over 1 year ago.

[ruby-dev:43327]
Status:Assigned
Priority:Normal
Assignee:Hiroshi Nakamura
Category:lib
Target version:next minor

Description

=begin
PStoreは、デフォルトでは他のスレッドがトランザクションを実行中にトランザクションに入ろうとすると例外nested transactionを発生させます。

initialize時に第2引数が真であれば、別のスレッドがトランザクションから抜けるまで待つようになりますが、
PStoreの用途から考えると、わざわざ引数にそのような指定をしなくても例外を投げずに待ってくれた方が嬉しいと思うのですが、いかがでしょうか。

PStore.newの第2引数を削除し、別のスレッドがトランザクションを実行中でもデフォルトで例外を投げずに待つようにしたpstore.rbと、
それに合わせて改変したtest_pstore.rbのパッチを添付します。
=end

patch.diff Magnifier (1.61 KB) Masaki Matsushita, 03/08/2011 02:36 PM

History

#1 Updated by Shota Fukumori about 3 years ago

=begin
互換性の面が懸念されます。

たとえばnested transaction例外を想定しているコード (たとえばtestthreadsafeとか) はどうなるのでしょう。
=end

#2 Updated by Shyouhei Urabe about 3 years ago

=begin
デフォルトがブロックするかしないかどっち向きに倒れておくべきかには議論のある所だとは思いますが、いきなり第二引数をなくしてしまうというのはやりすぎではないでしょうか。あなたの嬉しさは他者を排斥する理由としては弱いです。
=end

#3 Updated by Shota Fukumori about 3 years ago

=begin
Shyouhei Urabe wrote:

デフォルトがブロックするかしないかどっち向きに倒れておくべきかには議論のある所だとは思いますが、いきなり第二引数をなくしてしまうというのはやりすぎではないでしょうか。あなたの嬉しさは他者を排斥する理由としては弱いです。

あまりパッチみてませんけどそれもありましたね。同意します。

せめてthread_safe = trueにしておいて、今の動作と逆転するような感じだと良いですかね?

無視するか動作を逆転させるかどちらかは別として、引数を削るのは賛成しかねます。
=end

#4 Updated by Masaki Matsushita about 3 years ago

=begin
PStoreはRubyのオブジェクトを外部ファイルに格納する為のクラスな訳ですから、あるスレッドがトランザクションを実行中に別のスレッドがトランザクションに入ろうとした場合に、整合性を保つ為に同期する理由はあっても、例外を投げる理由はないのではと考えました。

そこで第2引数を削除したパッチを添付したのですが、確かにいきなり第2引数をなくしてしまうというのはやりすぎだったかも知れません。
それと、私が嬉しいかどうかをこういう場で引き合いに出したのは正しくなかったと思います。

Shota Fukumoriさんの案に賛成します。
ただ、thread_safe = trueとした場合でも、PStore.newに第2引数を与えずにnested transaction例外を想定しているコードには影響してしまいますね。
=end

#5 Updated by Shota Fukumori about 3 years ago

=begin
sora_hです

考えてみればどうせblockされるわけで必ずブロック内は実行されるわけで、nested transactionはもしダメなら諦める的な感じで捕捉されることを想定しているコードなら
この仕様でも良いかもしれません。transactionが起きているかどうかのコードはin_transactionで調べるべきだと思いますしね。

とりあえず周りの反応次第ですが。その辺の問題が解決できたら入れても良いかもしれないです。

ということで現状は賛成しかね、解決ししだい賛成という立場になります
=end

#6 Updated by Hiroshi Nakamura about 2 years ago

  • Description updated (diff)
  • Status changed from Open to Assigned
  • Assignee set to Hiroshi Nakamura

#7 Updated by Yusuke Endoh over 1 year ago

  • Target version set to next minor

Also available in: Atom PDF