mdbx: обновление ChangeLog (подготовка к выпуску).

This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2024-03-06 22:58:31 +03:00
parent 3e850981c7
commit fff3fbd866

View File

@ -4,6 +4,78 @@ ChangeLog
English version [by Google](https://gitflic-ru.translate.goog/project/erthink/libmdbx/blob?file=ChangeLog.md&_x_tr_sl=ru&_x_tr_tl=en)
and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic.ru/project/erthink/libmdbx/blob?file=ChangeLog.md).
## v0.12.10 (подготовка к выпуску)
Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов.
```
git diff' stat: 16 commits, 10 files changed, 665 insertions(+), 238 deletions(-)
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
```
Благодарности:
- [Dvir H](https://t.me/Dvirsw) за [сообщение](https://t.me/libmdbx/5368)
об ошибке `MDBX_CORRUPTED` в сценарии работы в режиме `MDBX_DUPFIXED` и нечетной длинной
мульти-значений, с предоставлением точного минимального сценария воспроизведения.
Значимые исправления и доработки:
- Устранение унаследованной от LMDB ошибки приводящей к повреждению БД при использовании `MDBX_DUPFIXED`.
Проблема была выявлена при расширении тестов сценариями с длинными мульти-значениями в режиме `MDBX_DUPFIXED`.
Сообщений о проявлении этой ошибки в эксплуатационных/продуктовых средах не поступало.
На LEAF2-страниц, используемых для компактного хранения мульти-значений фиксированной длины,
выполнялось резервирование места без учета возможности превышения размера страниц,
с последующим переполнением, повреждением структуры БД и/или повреждением содержимого ОЗУ.
Вероятность проявления ошибки существенно увеличивалась с увеличением размера/длины
мульти-значений/дубликатов и уменьшением размера страницы БД. Поэтому при использовании `MDBX_INTEGERDUP`
вероятность проявления близка к нулю, а сценарий такого проявления найти не удалось.
В MDBX ошибка присутствовала с момента отделения проекта от LMDB,
где эта ошибка присутствует более 11 лети, по настоящее время.
- Исправление ложной ошибки `MDBX_CORRUPTED (-30796)` в сценарии работы
в режиме `MDBX_DUPFIXED` и нечетной длинной мульти-значений.
- Исправление недочета корректировки сопутствующих курсоров при разделении страницы
по сценарию добавления пустой страницы слева.
- Доработка `rebalance()` ради уменьшения WAF. Новый функционал, включая
контролируемую пользователем опцию `enum MDBX_option_t`, будет доступен
в выпусках ветки `0.13.x`, а в этом выпуске доработка сводится к тактике
не-вовленичения чистой страницы при нехватке запаса страниц в ходе обновления GC,
за счет ухудшения баланса дерева страниц.
- Устранение упущения приводящего к нелогичной ситуации
`me_dxb_mmap.curren > me_dxb_mmap.limit` при "дребезге" размера БД.
В текущем понимании, последствий кроме срабатывания assert-проверки нет, а
вероятность проявления близка к нулю.
- Исправление в функционале обхода дерева, используемого утилитой
`mdbx_chk`, подсчета места затраченного на выравнивание на вложенной
под-странице, в случае нечетного количества dupfixed-элементов нечетного
размера.
Сообщений о проявлении этой ошибки в эксплуатационных/продуктовых средах не поступало.
- Исправление assert-проверки внутри `check_txn()` для случая завершенных транзакций в режиме `MDBX_NO_TLS`.
Последствий ошибки, кроме срабатывания assert-проверки в отладочных сборках, нет.
Прочее:
- Расширение стохастического теста dupfixed-сценариями.
- Корректировка условия в assert-проверке для `MDBX_TXN_DRAINED_GC`.
- Добавление в jitter-сценарий простого теста сброса и перезапуска читающих транзакций.
- Вынужденное продолжение очистки/рефакторинга унаследованных ребусов в `cursor_put_nochecklen()`.
- Фиксация транзакции при ошибках теста для последующего анализа содержимого БД.
- Сопутствующий рефакторинг `node_shrink()` для ясности исходного кода.
- Приведение в соответствие протоколируемых имен тестов опциям командной строки.
- Добавление cmoke-теста `extra/dupfixed_addodd`.
--------------------------------------------------------------------------------
## v0.12.9 "Ясень-4" от 2023-12-11