Releases: erthink/libmdbx
libmdbx 0.12.13
Завершающий выпуск архивной ветки с исправлением обнаруженных ошибок и устранением недочётов.
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
для решения проблем со сборкой в старых компиляторах.
Загрузки:
- 293K, libmdbx-amalgamated-0.12.13.zpaq, sha256sum:
7d48b0e5d2b9ed0a4f864bab8e6d2bad9e2359fed32787ae2be333af5d26e0e3
- 393K, libmdbx-amalgamated-0.12.13.tar.xz, sha256sum:
c15b91a155806689e0e684ee422e99c41317275fbb64a26f2face710fc1d4967
За информацией о предыдущих версиях обращайтесь к тегам 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"
Поддерживающий выпуск стабильной ветки с исправлением обнаруженных ошибок и устранением недочётов.
For translation to other languages please try Yandex or liar Google.
git diff' stat: 139 files changed, 391 insertions(+), 208 deletions(-)
Благодарности:
- Алексею Костюку (aka Keller) за сообщения об ошибках и недочетах.
- Erigon за спонсорство.
- Alain Picard for support Java bindings and MacOS universal binaries patch for CMake build scenario.
- Alex Sharov за сообщение об ошибках и тестирование.
- Виктору Логунову за сообщение об опечатки в имени переменной в Conan-рецепте.
Новое:
- Поддержка 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
.
Загрузки:
- 322K, libmdbx-amalgamated-0.13.4.zpaq, sha256sum:
2ccf430d36e903db2946b88b59f52b4e1e7060b23fe8101d1c3c9849eee57322
- 434K, libmdbx-amalgamated-0.13.4.tar.xz, sha256sum:
86df30ca2231c9b3ad71424bb829dca9041947f5539d4295030c653d4982c1be
За информацией о предыдущих версиях обращайтесь к тегам git и ChangeLog.