🔄 SQLite закрывает баг, который мог портить данные в режиме WAL
Вышла версия SQLite 3.51.3. Это патч-релиз с одним важным исправлением: баг, который в редких случаях мог повредить базу данных при работе в режиме Write-Ahead Logging.
Баг получил название «WAL-reset bug». Он проявлялся только при нескольких одновременных подключениях к одному файлу из разных потоков или процессов, когда они параллельно писали данные или создавали контрольные точки.
По сути это состояние гонки с очень узким временным окном.
В боевых условиях воспроизвести его так и не удалось, а проверить исправление пришлось через специально написанную тестовую логику, намеренно создающую нужное состояние.
Что именно происходило: одна контрольная точка завершалась, сразу запускалась вторая, и в этот момент другое соединение сбрасывало WAL-файл и записывало новые данные в его начало. Вторая контрольная точка не замечала этого сброса и выставляла неверное значение в заголовке WAL-индекса.
В итоге при следующей контрольной точке часть транзакций просто пропускалась и не попадала в основной файл базы. База оказывалась повреждена.
➡️ Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#пульс_индустрии
Post #4646
1.17K

- ❤ 1