libmdbx 0.12.13

Леонид Юрьев обновлён 1 месяц назад v0.12.13 1fff1f6 Релиз
0
Описание

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

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. https://github.com/lxc/lxc/issues/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.

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