mirror of
https://github.com/isar/libmdbx.git
synced 2025-08-19 19:39:26 +08:00
mdbx: вливание ветки master
в devel
.
This commit is contained in:
128
ChangeLog.md
128
ChangeLog.md
@@ -31,9 +31,95 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
||||
********************************************************************************
|
||||
|
||||
|
||||
## v0.12.8 (сопровождение и подготовка к релизу)
|
||||
## v0.12.10 "СЭМ" от 2024-03-12
|
||||
|
||||
Поддержка стабильной ветки.
|
||||
Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов
|
||||
в память Героя России гвардии майора Дмитрия Семёнова с позывным "СЭМ".
|
||||
|
||||
```
|
||||
git diff' stat: 19 commits, 57 files changed, 751 insertions(+), 331 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-проверки в отладочных сборках, нет.
|
||||
|
||||
- Устранение ошибки при открытии БД на файловой системе только-для-чтения.
|
||||
|
||||
- Удалены излишне строгие проверки в утилите `mdbx_chk`, которые
|
||||
приводили к ложно-позитивным ошибкам при проверке БД после серии
|
||||
последних доработок. Подробности см в комментариях к коммитам [781b3f64d52b73cbaeb00a55811d1247c25624a8](https://gitflic.ru/project/erthink/libmdbx/commit/781b3f64d52b73cbaeb00a55811d1247c25624a8)
|
||||
и [0741c81cfd8dc0864fcf55e04192b2207c8f68f7](https://gitflic.ru/project/erthink/libmdbx/commit/0741c81cfd8dc0864fcf55e04192b2207c8f68f7).
|
||||
|
||||
Прочее:
|
||||
|
||||
- Расширение стохастического теста dupfixed-сценариями.
|
||||
- Корректировка условия в assert-проверке для `MDBX_TXN_DRAINED_GC`.
|
||||
- Добавление в jitter-сценарий простого теста сброса и перезапуска читающих транзакций.
|
||||
- Вынужденное продолжение очистки/рефакторинга унаследованных ребусов в `cursor_put_nochecklen()`.
|
||||
- Фиксация транзакции при ошибках теста для последующего анализа содержимого БД.
|
||||
- Сопутствующий рефакторинг `node_shrink()` для ясности исходного кода.
|
||||
- Приведение в соответствие протоколируемых имен тестов опциям командной строки.
|
||||
- Добавление cmoke-теста `extra/dupfixed_addodd`.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
## v0.12.9 "Ясень-4" от 2023-12-11
|
||||
|
||||
Стабилизирующий выпуск с исправлением обнаруженных ошибок и устранением недочетов.
|
||||
|
||||
```
|
||||
git diff' stat: 32 commits, 8 files changed, 667 insertions(+), 401 deletions(-)
|
||||
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
|
||||
```
|
||||
|
||||
Исправления и доработки:
|
||||
|
||||
@@ -42,12 +128,50 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
||||
к не-активации соответствующего улучшения и не-достижению декларируемого уровня
|
||||
производительности в сценариях использования в режиме `MDBX_WRITEMAP`.
|
||||
|
||||
- Исправление авто-установки `MDBX_ENV_CHECKPID` при отключении использования
|
||||
функционала `madvise()` посредством опции сборки `MDBX_ENABLE_MADVISE=0`.
|
||||
Из-за чего при поддержке системой `madvise(MADV_DONTFORK)` не включался контроль pid.
|
||||
|
||||
- Добавлена проверка переданного ключа на `NULL` при обработке `MDBX_GET_MULTIPLE`.
|
||||
|
||||
- Добавлена проверка номеров корневых страниц в `coherency_check()`.
|
||||
|
||||
- Обеспечен `const` для начала и конца диапазона в аргументах `mdbx_estimate_range()`.
|
||||
|
||||
- Из разрабатываемой версии перенесены не-нарушающие совместимости доработки C++ API:
|
||||
|
||||
- добавлен тип `mdbx::cursor::estimation_result`, а поведение методов
|
||||
`cursor::estimate()` унифицировано с `cursor::move()`;
|
||||
- для предотвращения незаметного неверного использования API, для инициализации
|
||||
возвращаемых по ссылке срезов, вместо пустых срезов задействован `slice::invalid()`;
|
||||
- добавлены дополнительные C++ операторы преобразования к типам C API;
|
||||
- для совместимости со старыми стандартами C++ и старыми версиями STL перенесены
|
||||
в public классы `buffer::move_assign_alloc` и `buffer::copy_assign_alloc`;
|
||||
- добавлен тип `mdbx::default_buffer`;
|
||||
- для срезов и буферов добавлены методы `hex_decode()`, `base64_decode()`, `base58_decode()`;
|
||||
- добавлен тип `mdbx::comparator` и функций `mdbx::default_comparator()`;
|
||||
- добавлены статические методы `buffer::hex()`, `base64()`, `base58()`;
|
||||
- для транзакций и курсоров добавлены методы `get_/set_context`;
|
||||
- добавлен метод `cursor::clone()`;
|
||||
|
||||
- Поддержка base58 приведена в соответствии с черновиком RFC.
|
||||
|
||||
- Переработка/исправление `to_hex()` и `from_hex()`.
|
||||
|
||||
- Уменьшение `MDBX_opt_rp_augment_limit` по умолчанию до 1/3 от текущего количества страниц в БД.
|
||||
|
||||
Мелочи:
|
||||
|
||||
- Удаление устаревших `mdbx_set_compare()` и `mdbx_set_dupsort()`.
|
||||
- Корректировка определения `MDBX_LAST_ADDED_ERRCODE`.
|
||||
- Добавление в C++ API забытого исключения `mdbx::duplicated_lck_file`.
|
||||
- Обновление патча для старых версий buildroot.
|
||||
- Использование в API `const MDBX_txn` где это возможно.
|
||||
- Удаление устаревшего упоминания `MDBX_EAGAIN`.
|
||||
- Проверка pid процесса только в функциях API требующих активной среды/env.
|
||||
- Исправление опечаток в комментариях, в том числе в doxygen-описании.
|
||||
- В тестах для совместимости с проблемными версиями glibc и glibc++
|
||||
устранено использование `std::stoull()`.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user