Closed pirosiki197 closed 7 months ago
根本はsqlboilerで複数unique columnでupsertできないからtransactionを使っているのであって、これが解決できればそちらを使うほうが良さそうですね... (コメントにもある通り: https://github.com/volatiletech/sqlboiler/issues/328)
もしくは並列になってる複数リクエストを直列にするか、1つにまとめるように改善するかすると、まず起こることは圧倒的に少なくなりますね https://github.com/traPtitech/NeoShowcase/blob/62dbba3f732316d4390860d56e34e3ecb66c8ae5/dashboard/src/pages/apps/%5Bid%5D/settings/envVars.tsx#L125
その記事読んだことあるけどgap lockの罠を忘れてました gap lockするのあんまりよくないですね https://dev.mysql.com/doc/refman/8.3/en/innodb-locking.html#:~:text=It%20is%20also,must%20be%20merged.
方針としてはapplicationテーブルの方でロックするので良いと思います (次から何か気づいたら、issueから立ててくれると議論などがやりやすいです!)
なぜやるか
環境変数を一度に複数設定するとdeadlockする 何回か
Save
を押せば一応ちゃんと保存されるやったこと
application テーブルでロックをとるようにした
資料
https://zenn.dev/shuntagami/articles/ea44a20911b817