TailscaleとSQLite、16年以上潜んだWAL-reset data raceを特定
これは何?Tailscaleのcontrol planeはnetwork構成情報をshardごとのSQLiteへ保存し、WAL modeのmanual checkpointでbackupを整えています。
Tailscaleは2025年8月から半年で19回起きたdatabase corruptionをSQLite開発者と追跡し、write transactionとWAL-reset checkpointが重なるrare data raceを特定しました。SQLite側は少なくとも16年前から存在したと見積もり、trace用VFS shimで再現して修正、Tailscaleは本番でrace衝突を検知しながらcorruptionが防がれたことと、その後4か月incidentがないことを確認しました。最初の修正版3.52.0は別のfloating-point丸め変更でexpression indexを不整合に見せたためwithdrawされ、WAL修正だけを含む3.51.3が公開されました。
rare corruptionは再現testだけでなく、live forensic telemetry、復旧自動化、upstream maintainerとの共同調査が必要です。修正版そのものが別のfalse corruptionを生んだ経緯は、database upgradeをcanaryだけでなくdata表現のinvariantでも検証すべきことを示します。
- 読むべき人
- SQLite、embedded database、control plane、backup・recovery、SREの担当者
- HN
- 688 points / 110 comments