-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
競合する並行なscan, upsert txで、並置にならないはずのシナリオが並置になる(non serializable) #141
Comments
現状確認 TEST_P(tsurugi_issue665_test, simple) に渡す系列とテスト結果
c72f2e9 で修正されたように見える |
しかし、私の手元の非力マシン 2C4T CPU では一部テストが通らない |
問題となっているときには、UPSERT が INSERT でなく UPDATE になっていた。 私の理解: |
OCC の range scan で range read をどのように管理しているのか? open_scan のコードを見ると、l_key を yakushima scan に渡すのに使っているだけで、どこかに覚えこんでいるように見えない |
こちら、仰る通りだと思います。
OCC の range scan では、エントリを読んだ場所の yakushima border node の version timestamp を控えています。コミット時にそのタイムスタンプの差分比較で phantom 問題(挿入を見落とした問題)を避けます。覚えることはそれだけであり、キー範囲を覚えたりはしていません。LTX 向けに範囲読み込みがあったよっていう情報はテーブルレベルに最大エポック情報一つだけです。 LTX は書いた範囲と読んだ範囲を突合処理していたり、LTX x LTX phantom 問題の検知に書き込み範囲を扱うため、手元に記録されています。 |
それでしたら、テストコードの誤りである確率が高いでしょうか。。。? |
テストコードは別に問題ないと思います。
すると yakushima 情報の更新チェックのみで検出できるはず、という前提なのですね。 今疑っているのは、以下のようになってしまうのではないかということです
あるいはこれの 5. 6. が逆順のもの |
shirakami scan loop が通過したレコードは session . read_set_for_stx に記録され、記録されたものは commit 時の read verify で shirakami Record の変化を検査されるので、そこまで単純ではない。 |
このパスで問題となっているようです
|
次のシングルスレッドテストを作成しました:
|
この場合は txA の commit でロック取得に時間がかかっていたが、 この例、もしくは #141 (comment) の単純ケースでは range read のチェックを強化する必要がありそうです。 |
|
問題: 今まで読んだ範囲に自分で placeholder を置き、その placeholder を他Tx によって更新されてしまうと、node verify で検出できないし、 placeholder は read set に入っていないので read verify でも検出できない。 解決案: 「今まで読んだ範囲」そのものを OCC は保存していないので、 node set で代用する。 |
起票のきっかけ:
tsurugi-issue への取り組みの仮定で下記のような問題を観測した。
https://github.com/project-tsurugi/tsurugi-issues/issues/665#issuecomment-2005786859
調査実態:
再現性は高い。
ステップ実行で再現できるバグではなく、現状並行系テストプログラムでしか起こせないため、デバッグログの分析が難しい。
通過するパスに多くのデバッグログを仕込んだだけでは、現状原因の理解に至れなかった。
本件に関連する情報量が増えたり、並行でないテストプログラムでの再現シナリオが作成できたときにデバッグに取り組む予定である。
The text was updated successfully, but these errors were encountered: