toshiki

16年前のSQLiteバグを追い詰めたTailscaleの執念

· Hacker News #130

Tailscaleが原因不明のDB破損を追跡し、SQLiteのWALリセット処理に16年間潜んでいたデータ競合バグを突き止めた調査録。

  • #sqlite
  • #debugging
  • #database
  • #low-level

#なぜ今日これを選んだか

HNで808点・147コメントと大きく議論された記事。「自分のコードをまず疑い、それでも直らないなら基盤ライブラリまで掘る」というデバッグの王道を、世界で最も使われるDBであるSQLite相手に実践した事例で、Rustと低レイヤーを学ぶ#130の姿勢にそのまま重なるから。

#要点

  • Tailscaleは頻発する原因不明のデータベース破損に悩まされ、調査を開始した
  • SQLiteの開発者とも連携して追跡した結果、WAL(Write-Ahead Log)のリセット処理に潜むデータ競合が原因と判明した
  • このバグは約16年間、世界中で使われるSQLiteの中に誰にも気づかれず存在していた

#自分にとっての示唆

「枯れた定番ライブラリだから安全」という思い込みは、16年物のバグの前では通用しない。それでも彼らが原因に辿り着けたのは、WALという仕組みの動作原理を理解し、再現条件を粘り強く絞り込んだからだ。今Rustで学んでいる所有権や並行性の知識は、まさにこういうデータ競合を見抜くための土台になる。The Bookを読む30分を「いつか低レイヤーの不具合を自力で追える力」への積立だと思って、今日も1章進めたい。