Findy Mediaの連載「あの人も読んでる」第22回では、Deno Land Inc.のソフトウェアエンジニアmaguro氏(X: @yusuktan)が、SQLiteに少なくとも2010年から16年間潜んでいた並行処理関連のバグと、それを発見・検証した各社の取り組みを紹介しています。
Tailscaleは2022年からコントロールプレーン用データベースにSQLiteを採用していましたが、採用後6カ月間で19回のデータベース破損に遭遇し、最初のインシデントでは1時間を超える停止が発生したといいます。原因はWAL(Write-Ahead Log。変更内容を先に記録してから反映する仕組み)のリセット処理とチェックポイント処理の競合で、モデル検査によって初期状態を含む20個の状態をたどる処理順序が反例として示されました。
CanonicalのdqliteチームはTLA+(形式手法の仕様記述言語)を使ってこのバグを検証し、Denoチームが開発するcelldでも時計ずれに関する反例が見つかったといいます。記事は、AIが書くコードが増える時代には、人間の注意力だけに頼らない機械的な確認手段としての形式手法の価値が上がっていくと論じています。
出典が伝えている要点
- 記事の筆者はmaguro氏(X: @yusuktan)で、Deno Land Inc.のソフトウェアエンジニアである
- この記事はFindy Mediaの連載「あの人も読んでる」の第22回目である
- SQLiteには少なくとも2010年から16年間、あるバグが潜んでいたと記事は述べている
- Tailscaleは2022年からコントロールプレーン用のデータベースとしてSQLiteを採用していた
- TailscaleはSQLiteの採用後、6カ月間に19回のデータベース破損に遭遇した
- Tailscaleで発生した最初のインシデントでは1時間を超える停止が発生した
- このバグはWAL(Write-Ahead Log)のリセット処理とチェックポイント処理の競合が原因とされている
- モデル検査によって、初期状態を含む20個の状態をたどる処理順序が反例として示された
- CanonicalのdqliteチームはTLA+を使ってこのバグに関する検証を行った
- Denoチームが開発するcelldにおいても、時計ずれに関する反例が見つかった
- celldの時計ずれの反例では、leaseの有効期間が10秒、時計ずれが1秒、実経過時間が9秒という条件が示されている
原文より
AIが書くコードが増えるほど、人間の注意力だけに頼らない機械的な確認手段の価値は上がっていくはずです
出典: findy-code.io