libmdbx 0.12.4 (Арта-333)
Стабилизирующий выпуск с исправлением обнаруженных ошибок, устранением недочетов и технических долгов.
Ветка 0.12 считается готовой к продуктовому использованию, получает статус стабильной и далее будет получать только исправление ошибок. Разработка будет продолжена в ветке 0.13, а ветка 0.11 становится архивной.
63 files changed, 1161 insertions(+), 569 deletions(-)
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
Благодарности:
- Max maxc0d3r@protonmail.com за сообщение о проблеме
ERROR_SHARING_VIOLATION
в режимеMDBX_EXCLUSIVE
на Windows. - Alisher Ashyrov https://t.me/a1is43ras4 за сообщение о проблеме с assert-проверкой и содействие в отладке.
- Masatoshi Fukunaga https://gitflic.ru/user/mah0x211 за сообщение о проблеме
put(MDBX_UPSERT+MDBX_ALLDUPS)
для случая замены всех значений в subDb.
Исправления (без корректировок новых функций):
Устранен регресс после коммита 474391c83c5f81def6fdf3b0b6f5716a87b78fbf, приводящий к возврату
ERROR_SHARING_VIOLATION
в Windows при открытии БД в режимеMDBX_EXCLUSIVE
для чтения-записи.Добавлено ограничение размера отображения при коротком read-only файле, для предотвращения ошибки
ERROR_NOT_ENOUGH_MEMORY
в Windows, которая возникает в этом случае и совсем не информативна для пользователя.Произведен рефакторинг
dxb_resize()
, в том числе, для устранения срабатывания assert-проверкиsize_bytes == env->me_dxb_mmap.current
в специфических многопоточных сценариях использования. Проверка срабатывала только в отладочных сборках, при специфическом наложении во времени читающей и пишущей транзакции в разных потоках, одновременно с изменением размера БД. Кроме срабатывания проверки, каких-либо других последствий не возникало.Устранена проблема в
put(MDBX_UPSERT+MDBX_ALLDUPS)
для случая замены всех значений единственного ключа в subDb. В ходе этой операции subDb становится полностью пустой, без каких-либо страниц и именно эта ситуация не была учтена в коде, что приводило к повреждению БД при фиксации такой транзакции.Устранена излишняя assert-проверка внутри
override_meta()
. Что в отладочных сборках могло приводить к ложным срабатываниям при восстановлении БД, в том числе при автоматическом откате слабых мета-страниц.Скорректированы макросы
__cold
/__hot
, в том числе для устранения проблемыerror: inlining failed in call to ‘always_inline FOO(...)’: target specific option mismatch
при сборке посредством GCC >10.x для SH4.
Ликвидация технических долгов и мелочи:
- Исправлены многочисленные опечатки в документации.
- Доработан тест для полной стохастической проверки
MDBX_EKEYMISMATCH
в режимеMDBX_APPEND
. - Расширены сценарии запуска
mdbx_chk
из CMake-тестов для проверки как в обычном, так и эксклюзивном режимах чтения-записи. - Уточнены спецификаторы
const
иnoexcept
для нескольких методов в C++ API. - Устранено использование стека под буферы для
wchar
-преобразования путей. - Для Windows добавлена функция
mdbx_env_get_path()
для получения пути к БД в формате многобайтных символов. - Добавлены doxygen-описания для API с широкими символами.
- Устранены предупреждения статического анализатора MSVC, все они были несущественные, либо ложные.
- Устранено ложное предупреждение GCC при сборке для SH4.
- Добавлена поддержка ASAN (Address Sanitizer) при сборке посредством MSVC.
- Расширен набор перебираемых режимов в скрипте
test/long_stochastic.sh
, добавлена опция--extra
. - В C++ API добавлена поддержка расширенных опций времени выполнения
mdbx::extra_runtime_option
, аналогичноenum MDBX_option_t
из C API. - Вывод всех счетчиков page-operations в
mdbx_stat
.
Загрузки:
- 282K, libmdbx-amalgamated-0.12.4.zpaq, sha256sum:
2532fa662c7a2304296a519e8a13c6fcc301d2be1d7fcf521377a5419c1757e9
- 378K, libmdbx-amalgamated-0.12.4.tar.xz, sha256sum:
3984d2ddd30333486544ee88927b2b013de270d4ab2dc4d91ef66249755c3ffb
- 507K, libmdbx-amalgamated-0.12.4.tar.bz2, sha256sum:
7102ab04c0c8539491fc993f9806d1ddd1f72eebd6c0303e8d9ed245ea2360d1
- 779K, libmdbx-amalgamated-0.12.4.tar.gz, sha256sum:
3a77c9d11feb7f562a428a266fecdcf498c228a3c787604dcdc3c8ec29c928e7
- 790K, libmdbx-amalgamated-0_12_4.zip, sha256sum:
4f291222f2a15ae045ea9e08977af747ba850106b1d1d5ca5f47ddf29965d4b7
За информацией о предыдущих версиях обращайтесь к тегам git и ChangeLog.