From 1fff1f67d5862b4f5c129b0d735913ac3ee1aaec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Fri, 28 Feb 2025 23:34:52 +0300 Subject: [PATCH] =?UTF-8?q?mdbx:=20=D0=B2=D1=8B=D0=BF=D1=83=D1=81=D0=BA=20?= =?UTF-8?q?0.12.13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Завершающий выпуск архивной ветки с исправлением обнаруженных ошибок и устранением недочетов. `git diff' stat: 14 commits, 7 files changed, 256 insertions(+), 103 deletions(-)` Это последний/консервирующий выпуск куста стабильных версий 0.12.x, спустя более двух лет после выпуска 0.12.1. Значимые исправления: --------------------- - Исправлена обработка `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` для решения проблем со сборкой в старых компиляторах. Более подробная информация и история предыдущих выпусков доступна в [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html). Signed-off-by: Леонид Юрьев (Leonid Yuriev) --- ChangeLog.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index fbdd0304..1547911b 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,6 +4,65 @@ ChangeLog English version [by Google](https://gitflic-ru.translate.goog/project/erthink/libmdbx/blob?file=ChangeLog.md&_x_tr_sl=ru&_x_tr_tl=en) and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic.ru/project/erthink/libmdbx/blob?file=ChangeLog.md). +## v0.12.13 от 2025-02-28 + +Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов. + +Это последний/консервирующий выпуск куста стабильных версий 0.12.x, спустя более двух +лет после выпуска 0.12.1. + +``` +git diff' stat: 14 commits, 7 files changed, 256 insertions(+), 103 deletions(-) +Signed-off-by: Леонид Юрьев (Leonid Yuriev) +``` + +Значимые исправления: + + - Исправлена обработка `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` для решения проблем со сборкой в старых компиляторах. + + +-------------------------------------------------------------------------------- + + ## v0.12.12 "Доллежаль" от 2024-10-27 Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов, @@ -16,7 +75,7 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic рекомендуется использовать ветку `master`. ``` -git diff' stat: x commits, y files changed, z insertions(+), zz deletions(-) +git diff' stat: 6 commits, 5 files changed, 239 insertions(+), 6 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) ``` @@ -43,7 +102,6 @@ Signed-off-by: Леонид Юрьев (Leonid Yuriev) Добавлен соответствующий тест `extra/early_close_dbi`. - --------------------------------------------------------------------------------