Tailscale нашла причину повреждения базы данных в 16-летнем баге SQLite

· Программы
Инженеры Tailscale проследили редкое повреждение базы данных до ошибки в механизме сброса WAL в SQLite, существовавшей около шестнадцати лет.

cover.svg

Компания Tailscale, разработчик одноимённой сети на базе WireGuard, рассказала о расследовании, которое привело её к давней ошибке в SQLite — одной из самых распространённых встраиваемых СУБД в мире.

По данным публикации, инженеры столкнулись с повреждением базы данных и, разбираясь в причинах, вышли на дефект в механизме сброса журнала упреждающей записи (WAL, write-ahead log). Судя по описанию, ошибка оставалась незамеченной около шестнадцати лет.

WAL — это режим журналирования, при котором изменения сначала пишутся в отдельный журнал, а лишь затем переносятся в основной файл базы. Такой подход повышает производительность и устойчивость к сбоям, но именно на этапе сброса журнала и проявилась проблема, которую удалось локализовать команде Tailscale.

История показательна тем, насколько долго способны прятаться дефекты даже в зрелом и чрезвычайно широко используемом коде: SQLite работает в браузерах, мобильных приложениях, операционных системах и множестве серверных сервисов, поэтому редкие граничные случаи всплывают лишь при огромном объёме реальной эксплуатации. Публикация вызвала заметный отклик на Hacker News, набрав более четырёхсот голосов и десятки комментариев.

Подробности воспроизведения и характера ошибки изложены в оригинальной статье Tailscale.


Источник: Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.