diff --git a/ChangeLog.md b/ChangeLog.md index 3750b7d3..3672b4d3 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -5,6 +5,73 @@ English version [by liar Google](https://gitflic-ru.translate.goog/project/erthi and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic.ru/project/erthink/libmdbx/blob?file=ChangeLog.md). +## v0.13.3 в процессе + +Благодарности: + + - [Алексей (Keller) Костюк](https://t.me/keller18306) за сообщения об ошибках и недочетах. + - [Erigon](https://docs.erigon.tech/) за спонсорство. + +Новое: + + - В API добавлена функция `mdbx_cursor_count_ex()` позволяющая получить как количество мульти-значений + соответствующих текущему ключу, так и информацию о вложенном дереве хранящем эти значения. + +Изменение поведения: + + - Теперь при включении профилирования GC (сборка с опцией `MDBX_ENABLE_PROFGC=ON`) + подсчитываются затраты времени ЦПУ на слияние списков страниц (на работу функции `pnl_merge()`). + + - В утилите тестирования значение режима данных переименовано из `data.dups` в `data.multi`. + +Исправления: + + - Устранён регресс состояния вложенного/dupsort курсора после вставки данных в `MDBX_APPEND`-режиме. + + При добавлении нового ключа в append-режиме, в случае когда в текущей + (последней) позиции с ключом связаны несколько значений и + (соответственно) вложенный dupsort-курсор инициализирован, вставка + происходила без сброса вложенного курсора. + + В результате вложенный курсор логически оставался стоять на + multivalue-данных связанных с предыдущей позицией основного курсора, + т.е. переходил в неконсистентное состояние. + + Ошибка проявлялась возвратом неверных значений из `mdbx_cursor_count()` + или срабатывание assert-проверки в отладочных сборках. + + - Получение boot_id при работе внутри LXC-контейнера. + + Из LXC-контейнера не доступен файл хостовой системы `/proc/sys/kernel/random/boot_id`. + Вместо него, при каждом старте контейнера, создается и заполняется + случайными данными собственный boot_id смонтированный через bind из `tmpfs`. + https://github.com/lxc/lxc/issues/3027 + + Ранее этот замещенный bootid отбраковывался внутри libmdbx, + так как располагается в `tmpfs`, а не файловой системе `/proc`. + Теперь при работе внутри LXC-контейнера такой bootid будет использоваться. + + Однако, полноценный контроль по boot_id не возможен, так как при + рестарте LXC-контейнера (но не хоста) boot_id будет меняться, хотя + данные в unified page cache сохраняются. + + Таким образом, при рестарте LXC-контейнера, libmdbx будет производить + откат БД до крайней точки устойчивой фиксации, что может приводить к + утрате данных пользователя в случаях когда они могли быть сохранены. + Однако, улучшить ситуацию пока не представляется возможным, как минимум + до доступности boot_id хостовой системы изнутри LXC-контейнера. + + - Устранёна ошибка неверной обработки попытки запуска вложенной читающей транзакции. + Теперь в таких ситуациях возвращается ошибка `MDBX_EINVAL`, так как вложенность + поддерживается только для транзакций чтения-записи. + + Ошибка была внесена при рефакторинге, коммитом `2f2df1ee76ab137ee66d00af69a82a30dc0d6deb` + чуть более 5 лет назад и долго оставалось не замеченной. + + +-------------------------------------------------------------------------------- + + ## v0.13.2 "Прошлогодний Снег" (Last Year's Snow) от 2024-12-11 Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов