require 'pstore'
st = PStore.new('ddd')
st.transaction {|db|
db['1'] = 1
}
Process.fork {
sleep(7)
st.transaction(true) {|db|
puts db['1']
puts 'ronly-in'
sleep(5)
puts 'ronly-in-done'
}
}
st.transaction {|db|
puts db['1']
puts 'read/write'
sleep(5)
}
st.transaction(true) {|db|
puts db['1']
puts 'ronly-out'
sleep(5)
puts 'ronly-out-done'
}
多重更新間隔0.01秒のバグとか。0.1秒では発生しない。0.05秒でも発生しない。でも0.01秒以下だと発生するバグとか。追いかけるのもうんざりだ。
んで原因判明。PStoreをread/writeでロックかけてる時(これが多分0.01秒と0.05秒の差だ)にsignalが飛んで開いたままおっぽり出して他のプロセス(+そのプロセス自身)がそれを更に開こうとしてデッドロックしてる。そりゃデッドロックするわな。閉じるプロセス自体がもうもう一回開こうとしてるんだから。アホらしい。
昨日のは違ってたらしい。でもブロックが起きているのは確からしい。ローカルで再現しないのがアホらしい。そして私はバカらしい。
まいるよなあ。まいっていてとりあえず重複して飛んでるsignalの後ろのほうを無視するようにしたら直った。まいるよなあ。
[alpha@mordecai]-[00:07 AM]-[~/*****.org/w]
::: grep duplicated db/debug.log.***|head -2
D, [2008-04-16T23:25:58.894564 #44] DEBUG -- alpha: duplicated wake up signal, ignore
D, [2008-04-16T23:25:58.894686 #31503] DEBUG -- alpha: duplicated wake up signal, ignore
[alpha@mordecai]-[00:07 AM]-[~/*****.org/w]
::: grep duplicated db/debug.log.***|wc -l
26
人にはそれぞれの役割があるんだよ。だから私は黙ってコードを書いていたい。マーケティングは趣味じゃない。仕事だ。
その物語のはじまりも、行く先も、そして終わりも気にしないでただ生きるってことは何と素晴らしいでしょう。素晴らしいってだけで、私の趣味じゃないけどね。
これを激辛とスイーツの関係と呼ぼう。スイーツだけをただ食べる人、スイーツだけを考えながら食べる人、素つと激辛をただ食べる人、スイーツと激辛を考えながら食べる人。世の中には色々な人がいるけど。
するべきものは努力であって労働じゃあない。何も考えないトライ&エラーなんてただの無駄だ。
職場で3人脱落。