HN 日本語サマリー

← 一覧へ戻る
プログラミング

WALのバグを解明する

Breaking the WAL (antithesis.com)

138 pointsby wwilson48 コメント

要約

SQLiteのWrite-Ahead Logging (WAL) サブシステムに10年以上存在していた「WAL-Resetバグ」について、筆者がAIツール「Antithesis」を用いて、わずか15分で発見・再現・検証した事例を紹介します。このバグはTailscale社でも発生し、長期間にわたる運用上の問題を引き起こしましたが、Antithesisを使えば、従来数週間から数ヶ月かかっていたデバッグ作業が劇的に短縮できることを示しています。

全文翻訳

こんにちは、カールです。 私がClaudeにAntithesisを使わせる方法を教えた人物として、覚えていらっしゃるかもしれません。 今年初め、SQLiteはWrite-Ahead Logging (WAL) サブシステムにおける長年のバグであるWAL-Resetバグを修正するバージョン (3.51.3) をリリースしました。 このバグは2010年から存在していましたが、SQLiteチームは今年初めまでその存在に気づいていなかったようです(詳細は後述)。 彼らが当時書いたように、「このバグは、タイミングの制約が厳しいデータ競合です。一般的な使用では発生する可能性は低いです。開発者はこれまで、このバグを自然に再現することができず、その状況を意図的に引き起こすための特別なテストロジックをSQLiteに追加して、問題が修正されたことを確認する必要がありました。」 私はちょうどガールフレンドとロードトリップ中でしたが、私は大のデータベースオタクでもあるので、すぐに夢中になりました。 結局のところ、SQLiteのバグは伝説的に稀です。 さらに、これはまさに完璧な「ブラウンM&M」のように聞こえました。既知の、困難なバグであり、Antithesisで追跡できるものです(POCではこれを何度も行っています)。 それに加えて、私は最近Claude向けのスキルをリリースしたばかりでした。 そこで、サンシャインコーストの丘の上に座り、スマートフォンを取り出し、Claudeに仕事を依頼しました。 AntithesisでまだバグのあるSQL 3.51.2を設定させ、次にAntithesisのアサーションを多数追加してコードを計装させました。 計装されたバージョンはここで見ることができます。 私の愛するブリティッシュコロンビア州に感謝します。 次に、WALの挿入とチェックポイントのコードを実行するシンプルなワークロードを書かせました。 注目すべきは、これが完全に汎用的なワークロードであることです。 本番環境で常に発生することが予想される、書き込みとチェックポイントの同時実行を行うだけです。 アサーションもバグに対して汎用的であり、データベースに追加する標準的なアサーション、「コミットされた書き込みの損失がない」「データベースが破損していない」(SQLiteでは整合性チェックと呼ばれる)などです。 私たちは、最も単純なワークロードが最も困難なバグを見つけることが多いことに気づいています。 最初の実行で、Antithesisは15分でバグを検出しました。 こちらがレポートです。 探すべき部分は、「WAL-Resetバグによってトリガーされたアサーションの失敗」です。 次に、同じワークロードとAntithesisの計装を使用して、3.51.3で同様の演習を繰り返しました。 案の定、実行結果はグリーンでした。 3.51.3はクリーンに戻ってきました。 今日、Tailscaleが2025年に経験したアップタイムの問題を解決したことに関する優れたブログ記事を書いたことを思い出しました。 それらの問題が、SQLiteチームがWAL-Resetバグを発見したきっかけでした。 Tailscaleは6ヶ月間不安定なアップタイムに苦しみ、その後、彼らとSQLiteチームはバグの特定に数週間を費やし、修正をロールアウトしましたが、別のものを壊してしまったためロールバックし、その後、「本当の」修正(3.51.3)が機能するかどうかを確認するためにさらに2ヶ月待たなければなりませんでした。 根本原因を特定するために、Tailscaleで新しいトランザクションログパイプラインを書き、SQLiteの仮想ファイルシステムレイヤーに新しいデバッグツールを組み込む必要がありました。 Antithesisでは、このプロセスはワンクリックとはいきませんが、ワンクリックで因果関係分析が得られ、問題を0.01秒未満に絞り込み、デバッグを時間旅行のように決定論的に行えるため、仮説検証や破壊的分析が可能です。 いつバグが埋め込まれたのだろうかと考えます。 Tailscaleチームが書いたように、「誰も、SQLiteのバグ探しに半年を費やしたいとは思っていなかったでしょう。これは、顧客とスタッフの両方にとって、非常にフラストレーションのたまる経験でした。」 WAL-Resetバグのようなバグを見つけるのは非常に困難です(おそらく、割れたガラスの上を這うようなものです)が、稀で困難なバグの場合、本当の苦痛は、修正が実際に機能したかどうかを確認するのを待っているときに来ることがあります。 私は多くのデータベースで作業した経験があり、自分自身も何度もこれを経験しました。 そのため、このバグが実世界でどれほど痛みを伴うものであったかを実感し、身が引き締まる思いと同時に、希望を感じました。 エージェントにAntithesisを使用するスキルを与えることで、私は携帯電話から、木々の下で日光を浴びながら、わずか1時間ほどで見つけ、検証することができたのです。 私たちのエージェントスキルが機能することは知っていましたが、これほど効果的であるとは知りませんでした。 もしあなたが厄介なデータベースの問題を抱えているなら、私に連絡してください。 始めましょう 速度と検証。 最終的に、両方。 当社の製品専門家と話して、誰がコードを書いているかに関わらず、Antithesisが自信を持って出荷するのにどのように役立つかを確認してください。 デモを予約する チャットする