v0.13.2 "Прошлогодний Снег" (Last Year's Snow). Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов в день рождения и в память об [Алекса́ндре Миха́йловиче Тата́рском](https://ru.wikipedia.org/wiki/Татарский,_Александр_Михайлович), российском режиссёре-мультипликаторе, создавшем такие знаменитые мультфильмы как "Падал прошлогодний снег", "Пластилиновая ворона", заставку "Спокойной ночи, малыши!" и многие другие шедевры нашего детства. За перечнем доработок и изменений обращайтесь к [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html). git diff' stat: 151 files changed, 10647 insertions(+), 14952 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
!!! ПОЖАЛУЙСТА НЕ ИСПОЛЬЗУЙТЕ ПОЛОМАННЫЕ АВТОМАТИЧЕСКИЕ СОЗДАВАЕМЫЕ "АКТИВЫ" !!!
Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов в день рождения и в память об Алекса́ндре Миха́йловиче Тата́рском, российском режиссёре-мультипликаторе, создавшем такие знаменитые мультфильмы как "Падал прошлогодний снег", "Пластилиновая ворона", заставку "Спокойной ночи, малыши!" и многие другие шедевры нашего детства.
For translation to other languages please try Yandex or liar Google.
git diff' stat: 151 files changed, 10647 insertions(+), 14952 deletions(-)
Новое:
- Ускорено обновление GC при возврате/помещении списков страниц в сложных сценариях. Был доработан и активирован ранее отключенный экспериментальный режим корректирующей обратной связи. Этим принципиально улучшилась сходимость (сократилось количество повторных попыток), а также устранен дефект приводящий к "зацикливанию" при фиксации транзакций (с возвратом ошибки
MDBX_PROBLEM
) в редких специфических условиях. Подробности см. в описании коммита6c56ed97bbd8ca46abac61886a113ba31e5f1291
. - Включен стандарт
C23
в CMake-скриптах сборки. - Добавлены T-макросы для парных
char
/wchar_t
функций. - Поддержка вложенных пишущих транзакций в C++ API.
- Переход на "Semantic Versioning 2" и экспорт информации о версии в
VERSION.json
. - Добавлена поддержка переменной среды
SOURCE_DATE_EPOCH
для воспроизводимости сборок. Прежний способ посредствомMDBX_BUILD_TIMESTAMP
также работает и имеет приоритет. - Добавлена возможность указывать дополнительную информацию о сборке libmdbx через опцию
MDBX_BUILD_METADATA
. Сейчас задаваемая информация просто включается внутрь библиотеки в качестве значенияmdbx_build.metadata
, а в дальнейшем также будет использоваться при формировании пакетов и т.п. - Добавлено логирование ошибок возвращаемых из API. Теперь для этого достаточно задать уровень логирования
MDBX_LOG_DEBUG
(для логирования ошибок за вычетомMDBX_NOTFOUND
) илиMDBX_LOG_TRACE
(для логирования всех ошибок, а такжеMDBX_RESULT_TRUE
). - Поддержка сборки посредством Conan.
Изменение поведения:
- Добавлен метод
mdbx::cursor::get_multiple_samelength()
и переименованmdbx::txn::put_multiple_samelength()
. - Для единообразия C++ API при выполнении операции
MDBX_GET_MULTIPLE
теперь также возвращается значение самого ключа. - Для размерных констант
mdbx::env::geometry
базовый тип изменен с беззнаковогоsize_t
на знаковыйintptr_t
. - Теперь выбор в пользу использования ntdll вместо CRT делается только при явном отключении C++ API.
- Теперь выполняется освобождение памяти сброшенных/прерванных читающих транзакций передаваемых в
mdbx_txn_commit()
. Соглашение по API требует чтобы такие транзакции освобождались посредствомmdbx_txn_abort()
, из-за чего функцияmdbx_txn_commit()
возвращала ошибку в таких случаях, не разрушая сами транзакции. Это приводило к утечкам памяти из-за ошибок в приложениях, что побудило изменить поведение. - Использование макроса
__deprecated_enum
если он определен. - При сборке посредством CMake выбор стандарта языка
C
теперь выполняется с учётомCMAKE_C_STANDARD
. - Изменения в опциях сборки:
- опция
MDBX_OSX_SPEED_INSTEADOF_DURABILITY
переименована вMDBX_APPLE_SPEED_INSTEADOF_DURABILITY
, так как актуальна для всех "Яблочных" платформ; - опция
MDBX_MMAP_USE_MS_ASYNC
переименована вMDBX_MMAP_NEEDS_JOLT
, для более точного соответствия своей семантики; - в CMake добавлена поддержка опции
MDBX_USE_MINCORE
; - использование
madvise()
и родственных системных вызовов теперь всегда включено, а опцияMDBX_ENABLE_MADVISE
удалена; - удалены неиспользуемая опция
MDBX_USE_SYNCFILERANGE
и неиспользуемый режимMDBX_LOCKING_BENAPHORE
.
- опция
Исправления:
- Устранен регресс возврата неверной информации из функций
mdbx_env_stat_ex()
иmdbx_env_stat()
. При рефакторинге до выпуска v0.13.1 была допущена ошибка, из-за которой выполнялось суммирование значений без очистки переданного пользователем буфера для результата. Таким образом, возвращаемая информация была верной, только если память используемая для размещения результата содержала нули на момент вызова функции. - Функция
mdbx_close_dbi()
доработана для возврата ошибкиMDBX_DANGLING_DBI
при попытке закрыть dbi-дескриптор таблицы, созданной и/или измененной в ещё выполняющейся транзакции. Такое преждевременное закрытие дескриптора является неверным использованием API и нарушением контракта/предусловий сформулированных в описанииmdbx_close_dbi()
. Однако, вместо возврата ошибки выполнялось некорректное закрытие дескриптора, что могло приводить к созданию таблицы с пустым именем, утечки страниц БД и/или нарушению структуры b-tree (неверной ссылкой на корень таблицы). - Исправлено открытие таблицы с пустым/нулевым именем, в том числе устранена возможность
SIGSEGV
при закрытии её дескриптора. - Добавлены упущенные inline-реализации
mdbx::cursor::upper_bound()
иmdbx::cursor::upper_bound_multivalue()
. - Продолжена корректировка описания С++ API для использования термина "таблица" вместо "sub-database".
- Исправлено проверяемое условие внутри
assert()
в пути обработкиMDBX_GET/NEXT/PREV_MULTIPLE
. - На 32-битных платформах разрешено использовать 4-байтное выравнивание при получении 64-битных значений посредством
MDBX_MULTIPLE
. - Добавлен костыль для устранения проблем из-за некорректной обработки
[[gnu::pure]]
в Apple Clang и MSVC. - Поправлено определение
MDBX_DEPRECATED_ENUM
для старых компиляторов при включении С++11. - Доработано использование
std::experimental::filesystem
для решения проблем со сборкой в старых компиляторах. - Исправлена обработка
MDBX_GET_MULTIPLE
в специальных случаях и одного значения у ключа в позиции курсора. - Исправление сборки при включении профилирования GC и
MDBX_ENABLE_DBI_SPARSE=OFF
.
Загрузки:
- 319K, libmdbx-amalgamated-0.13.2.zpaq, sha256sum:
88fc73507ae9dcedfc9da9387782f3711c99a37ed9dcdbe3e19dd8a5ba3b5bbd
- 431K, libmdbx-amalgamated-0.13.2.tar.xz, sha256sum:
68a48483280e2b76e8fbf886c51e6e51a22f43e94003bfb9c64579a932eb8a01
За информацией о предыдущих версиях обращайтесь к тегам git и ChangeLog.