libmdbx 0.12.4 (Арта-333)

Леонид Юрьев обновлён 2 года назад v0.12.4 53177e4 Релиз
0
Описание

Стабилизирующий выпуск с исправлением обнаруженных ошибок, устранением недочетов и технических долгов.

Ветка 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.

Загрузки:


За информацией о предыдущих версиях обращайтесь к тегам git и ChangeLog.

Файлы
  • Нет файлов