Skip to content

Releases: erthink/libmdbx

libmdbx 0.12.13

28 Feb 11:17
v0.12.13
1fff1f6
Compare
Choose a tag to compare

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

For translation to other languages please try Yandex or liar Google.

git diff' stat: 14 commits, 7 files changed, 256 insertions(+), 103 deletions(-)

Значимые исправления:

  • Исправлена обработка MDBX_GET_MULTIPLE в специальных случаях и одного значения у ключа в позиции курсора.
  • Устранена ошибка неверной обработки попытки запуска вложенной читающей транзакции. Теперь в таких ситуациях возвращается ошибка MDBX_EINVAL, так как вложенность поддерживается только для транзакций чтения-записи. Ошибка была внесена при рефакторинге, коммитом 2f2df1ee76ab137ee66d00af69a82a30dc0d6deb чуть более 5 лет назад и долго оставалось не замеченной.
  • Поддержка получения boot_id при работе внутри LXC-контейнера. Из LXC-контейнера не доступен файл хостовой системы /proc/sys/kernel/random/boot_id. Вместо него, при каждом старте контейнера, создается и заполняется случайными данными собственный boot_id смонтированный через bind из tmpfs. lxc/lxc#3027. Ранее этот подставной/замещенный boot_id отбраковывался внутри libmdbx, так как файл располагается в tmpfs, а не в файловой системе /proc. В результате boot_id для проверки целостности БД не был доступен. Теперь при работе внутри LXC-контейнера такой bootid будет использоваться. Однако, полноценно работающий контроль по boot_id не возможен, так как при рестарте LXC-контейнера (но не хоста) boot_id будет меняться, хотя данные в unified page cache сохраняются. Таким образом, при рестарте LXC-контейнера без рестарта хоста, libmdbx придется откатить состояние БД до крайней точки устойчивой фиксации, что повлечет утрату данных пользователя в случаях когда они могли быть сохранены. Однако, улучшить ситуацию пока не представляется возможным, как минимум до доступности boot_id хостовой системы изнутри LXC-контейнера.
  • Доработан контроль длины ключа внутри cursor_set(). Ранее проверка внутри cursor_set() не позволяла искать ключи длиннее, чем можно поместить в таблицу. Однако, при поиске/позиционировании это не является ошибкой для таблиц с ключами переменного размера.
  • Теперь при попытке запуска вложенных транзакций в режиме MDBX_WRITEMAP производится логирование и возврат ошибки MDBX_INCOMPATIBLE.
  • Доработано использование std::experimental::filesystem для решения проблем со сборкой в старых компиляторах.

Загрузки:


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

Please don't use github's tarballs nor zips, but the amalgamated sources or clone the git repository

libmdbx 0.13.4 "Sigma Boy"

15 Feb 11:23
v0.13.4
75122b3
Compare
Choose a tag to compare

Поддерживающий выпуск стабильной ветки с исправлением обнаруженных ошибок и устранением недочётов.

For translation to other languages please try Yandex or liar Google.

git diff' stat: 139 files changed, 391 insertions(+), 208 deletions(-)

Благодарности:

Новое:

  • Поддержка MacOS universal binaries при сборке посредством CMake.

Исправления:

  • Устранён регресс допускающий SIGSEGV в операциях обновления после вытеснения/spilling страниц в больших транзакциях. Ошибка присутствует в выпусках v0.13.1, v0.13.2, v0.13.3 и оставалась незамеченной из-за специфических условий и низкой вероятности проявления. Более подробная информация в описании коммита 21630ea115690a5cb39cfa921f9d199271a08102.

  • Исправлена опечатка в документации в упоминании mdbx_env_resurrect_after_fork().

  • Исправлена опечатка в условном операторе внутри cursor_touch(). При переделке курсоров было пропущено отрицание в условии, при оценке количества страниц, которые могут потребоваться для выполнения операции. В текущем понимании ошибка не приводила к каким-либо проблемам, ибо оценка делает по верхней границе с существенным запасом, а в худшем случае это могло приводить к прерыванию транзакции из-за достижения ограничения на кол-во грязных страниц.

  • Корректировка излишне строгого условия в assert-проверке внутри recalculate_subpage_thresholds(). Ошибка могла проявляться только в отладочных сборках при выставлении определенной комбинации предельных значений опций MDBX_opt_subpage_limit, MDBX_opt_subpage_room_threshold, MDBX_opt_subpage_reserve_prereq, MDBX_opt_subpage_reserve_limit.

  • Исправление опечатки в Conan-рецепте в коде протокольно-отладочного вывода в имени переменной version_json_pathname.

Загрузки:


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

Please don't use github's tarballs nor zips, but the amalgamated sources or clone the git repository