mirror of
https://github.com/isar/libmdbx.git
synced 2025-08-19 19:39:26 +08:00
mdbx: merge branch master
into stable
.
This commit is contained in:
519
ChangeLog.md
519
ChangeLog.md
@@ -1,8 +1,516 @@
|
||||
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).
|
||||
English version [by liar Google](https://libmdbx-dqdkfa-ru.translate.goog/md__change_log.html?_x_tr_sl=ru&_x_tr_tl=en)
|
||||
and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/libmdbx.dqdkfa.ru/md__change_log.html).
|
||||
|
||||
|
||||
## v0.13.3 "Королёв" от 2025-01-12
|
||||
|
||||
Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов
|
||||
в день рождения и в память об [Серге́е Па́вловиче Королёве](https://ru.wikipedia.org/wiki/Королёв,_Сергей_Павлович),
|
||||
советском учёном и Главном конструкторе ракетно-космических систем.
|
||||
|
||||
Благодарности:
|
||||
|
||||
- [Алексею Костюку (aka Keller)](https://t.me/keller18306) за сообщения об ошибках и недочетах.
|
||||
- [Erigon](https://docs.erigon.tech/) за спонсорство.
|
||||
- [Lazymio](https://github.com/wtdcode) за новые [привязки к Python](https://pypi.org/project/libmdbx/).
|
||||
|
||||
Новое:
|
||||
|
||||
- В C API добавлена функция `mdbx_cursor_count_ex()` позволяющая получить как количество мульти-значений
|
||||
соответствующих текущему ключу, так и информацию о вложенном дереве хранящем эти значения.
|
||||
|
||||
- В C++ API добавлен метод `mdbx::txn::make_broken()` аналогичный `mdbx_txn_break()`.
|
||||
|
||||
- В утилиты mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat добавлено логирование ошибок,
|
||||
предупреждений и важных сообщений от libmdbx.
|
||||
|
||||
Исправления:
|
||||
|
||||
- Устранён регресс неразблокировки мьютекса при попытки повторного закрытия dbi-дескриптора,
|
||||
в том числе при попытке явно закрыть дескриптор после удаления связанной с ним таблицы.
|
||||
|
||||
Вместо возврата ошибки `MDBX_BAD_DBI` происходил выход из тела функции по успешному пути,
|
||||
но без освобождения захваченной блокировки.
|
||||
Ошибка была внесена 2024-10-23 коммитом `3049bb87b5b14d83b16d121c186ce8fb3f21383e`.
|
||||
|
||||
- Устранён регресс состояния вложенного/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
|
||||
|
||||
Ранее этот подставной/замещенный boot_id отбраковывался внутри libmdbx,
|
||||
так как файл располагается в `tmpfs`, а не в файловой системе `/proc`.
|
||||
В результате boot_id для проверки целостности БД не был доступен.
|
||||
Теперь при работе внутри LXC-контейнера такой bootid будет использоваться.
|
||||
|
||||
Однако, полноценно работающий контроль по boot_id не возможен, так как при
|
||||
рестарте LXC-контейнера (но не хоста) boot_id будет меняться, хотя
|
||||
данные в unified page cache сохраняются.
|
||||
|
||||
Таким образом, при рестарте LXC-контейнера без рестарта хоста, libmdbx придется
|
||||
откатить состояние БД до крайней точки устойчивой фиксации, что повлечет
|
||||
утрату данных пользователя в случаях когда они могли быть сохранены.
|
||||
Однако, улучшить ситуацию пока не представляется возможным, как минимум
|
||||
до доступности boot_id хостовой системы изнутри LXC-контейнера.
|
||||
|
||||
- Устранёна ошибка неверной обработки попытки запуска вложенной читающей транзакции.
|
||||
Теперь в таких ситуациях возвращается ошибка `MDBX_EINVAL`, так как вложенность
|
||||
поддерживается только для транзакций чтения-записи.
|
||||
|
||||
Ошибка была внесена при рефакторинге, коммитом `2f2df1ee76ab137ee66d00af69a82a30dc0d6deb`
|
||||
чуть более 5 лет назад и долго оставалось не замеченной.
|
||||
|
||||
- Устранён SIGSEGV-регресс обращения к нулевому адресу при работе в режиме только-чтение без использования LCK-файла,
|
||||
например при размещении БД на носителе доступном только для чтения.
|
||||
|
||||
Ошибка была внесена при реализации функционала парковки читающих транзакций.
|
||||
|
||||
Изменение поведения:
|
||||
|
||||
- Теперь при включении профилирования GC (сборка с опцией `MDBX_ENABLE_PROFGC=ON`)
|
||||
подсчитываются затраты времени ЦПУ на слияние списков страниц, т.е. на работу функции `pnl_merge()`.
|
||||
|
||||
- В утилите тестирования значение режима данных переименовано из `data.dups` в `data.multi`.
|
||||
|
||||
- Доработан контроль длины ключа внутри `cursor_seek()`.
|
||||
|
||||
Ранее проверка внутри `cursor_seek()` не позволяла искать ключи длиннее, чем можно поместить в таблицу.
|
||||
Однако, при поиске/позиционировании это не является ошибкой для таблиц с ключами переменного размера.
|
||||
|
||||
- Если посредством `mdbx_env_set_option(MDBX_opt_txn_dp_limit)` пользователем не задано собственно значение,
|
||||
то выполняется подстройка dirty-pages-limit при старте каждой не-вложенной пишущей транзакций,
|
||||
исходя из объёма доступного ОЗУ и размера БД.
|
||||
|
||||
- Теперь в режиме `MDBX_NOSTICKYTHREADS` допускается commit/abort вложенных транзакций из любого треда/потока.
|
||||
|
||||
- Теперь при попытке запуска вложенных транзакций в режиме `MDBX_WRITEMAP` производится
|
||||
логирование и возврат ошибки `MDBX_INCOMPATIBLE`.
|
||||
|
||||
- Теперь в C++ API в конструкторах/инициализаторах и методах связанных с формированием геометрии БД
|
||||
по-умолчанию используются только `default`-значений, в том числа для минимального и максимального
|
||||
размера. В результате, при создании БД с геометрией по-умолчанию не происходит выбор максимального
|
||||
размера страницы из-за очень большого максимального размера БД.
|
||||
|
||||
- Внутри `mdbx_env_set_geometry()` доработаны эвристики для подбора параметров геометрии БД запрошенных пользователем "по-умолчанию".
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
## v0.13.2 "Прошлогодний Снег" (Last Year's Snow) от 2024-12-11
|
||||
|
||||
Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов
|
||||
в день рождения и в память об [Алекса́ндре Миха́йловиче Тата́рском](https://ru.wikipedia.org/wiki/Татарский,_Александр_Михайлович),
|
||||
российском режиссёре-мультипликаторе, создавшем такие знаменитые
|
||||
мультфильмы как "Падал прошлогодний снег", "Пластилиновая ворона",
|
||||
заставку "Спокойной ночи, малыши!" и многие другие шедевры нашего
|
||||
детства.
|
||||
|
||||
Новое:
|
||||
|
||||
- Ускорено обновление GC при возврате/помещении списков страниц в
|
||||
сложных сценариях. Был доработан и активирован ранее отключенный
|
||||
экспериментальный режим корректирующей обратной связи. Этим
|
||||
принципиально улучшилась сходимость (сократилось количество повторных
|
||||
попыток), а также устранен дефект приводящий к "зацикливанию" при
|
||||
фиксации транзакций (с возвратом ошибки `MDBX_PROBLEM`) в редких
|
||||
специфических условиях.
|
||||
Подробности см. в описании коммита [`6c56ed97bbd8ca46abac61886a113ba31e5f1291`](https://gitflic.ru/project/erthink/libmdbx/commit/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`.
|
||||
|
||||
Мелочи:
|
||||
|
||||
- Теперь `MDBX_ENABLE_BIGFOOT` включена по-умолчанию вне зависимости от разрядности платформы.
|
||||
- Дополнение README и исправление опечаток/орфографии.
|
||||
- Использование `WIN32` вместо `${CMAKE_SYSTEM_NAME}`.
|
||||
- Подавление параноидальных предупреждений MSVC в extra-тестах.
|
||||
- Дополнение отладочного логирования внутри `dxb_resize()`.
|
||||
- Добавление в сценарии CMake/CTest копирования dll под Windows для работы исключений в тестах на C++.
|
||||
- Добавление С++ теста `extra/open`.
|
||||
- Доработка `osal_jitter()` для уменьшения задержек в тестах под Windows.
|
||||
- Исправление максимальной длины значений в тесте `extra/crunched-delete`.
|
||||
- Добавление логирования С++ исключений в `extra/dupfix_multiple`.
|
||||
- Корректировка API-макросов для Doxygen.
|
||||
- Уточнение описания `mdbx_dbi_close()` для случая хендлов измененных таблиц.
|
||||
- Добавление теста `extra/early_close_dbi`.
|
||||
- Доработка скрипта стохастического теста и его переименование в `stochastic.sh`.
|
||||
- Доработка тестов для совместимости с режимами сборки до С++17.
|
||||
- Добавление `.WAIT` для устранения коллизий при распараллеливании сборки посредстом GNU Make 4.4.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
## v0.13.1 "РДС-1" от 2024-08-29
|
||||
|
||||
Новая версия со сменой лицензии, существенным расширением API,
|
||||
добавлением функционала и внутренними переработками. В том числе,
|
||||
с незначительным нарушением обратной совместимости API библиотеки.
|
||||
|
||||
Новое:
|
||||
|
||||
- Изменение лицензии на Apache 2.0, пояснения и подробности в файле `COPYRIGHT`.
|
||||
|
||||
- Реструктуризация исходного кода с рефакторингом.
|
||||
|
||||
- Переработка курсоров для унификации поведения, более регулярного
|
||||
кода, уменьшения количества ветвлений и машинных операций.
|
||||
|
||||
- Перенос функционала утилиты `mdbx_chk` внутрь библиотеки в виде
|
||||
функции `mdbx_env_chk() `для проверка целостности структуры БД, в том
|
||||
числе с вовлечением логики приложения.
|
||||
|
||||
- Опция `MDBX_opt_gc_time_limit` для более гибкого контроля времени
|
||||
расходуемого на поиск последовательностей соседствующих свободных
|
||||
страниц в GC.
|
||||
|
||||
- Снижение накладных расходов на запуск транзакций в сценариях с
|
||||
большим количеством DBI-хендов, за счет отложенной/ленивой инициализации
|
||||
элементов служебных таблиц. В том числе, механизм поддержки разреженных
|
||||
наборов DBI-хендов, управляемый опцией сборки `MDBX_ENABLE_DBI_SPARSE`,
|
||||
которая включена по-умолчанию.
|
||||
|
||||
- Снижение накладных расходов на открытие DBI-хендов. В том числе,
|
||||
механизм отложенного освобождения и поддержки быстрого пути открытия без
|
||||
использования блокировок, управляемый опцией сборки
|
||||
`MDBX_ENABLE_DBI_LOCKFREE`, которая включена по-умолчанию.
|
||||
|
||||
- Поддержка "парковки" читающих транзакций с их вытеснением ради
|
||||
переработки старых MVCC-снимков и предотвращения проблем вызываемых
|
||||
приостановкой переработки мусора. Механизм парковки и вытеснения
|
||||
припаркованных транзакций является как дополнением, так и более простой
|
||||
в использовании альтернативой обратному вызову
|
||||
[Handle-Slow-Readers](https://libmdbx.dqdkfa.ru/group__c__err.html#ga2cb11b56414c282fe06dd942ae6cade6).
|
||||
Для удобства функции `mdbx_txn_park()` и `mdbx_txn_unpark()` имеют
|
||||
дополнительные аргументы, позволяющие запросить автоматическую
|
||||
"распарковку" припаркованных и перезапуск вытесненных транзакций.
|
||||
|
||||
- Расширение API позиционирования курсоров более удобными и очевидными
|
||||
операциями по аналогии условиям `<`, `<=`, `==`, `>=`, `>` как для
|
||||
ключей, так и для пар ключ-значение.
|
||||
|
||||
- Функции `mdbx_dbi_rename()` и `mdbx_dbi_rename2()` для переименования таблиц.
|
||||
|
||||
- Функции `mdbx_cursor_unbind()` и `mdbx_txn_release_all_cursors()` для
|
||||
гибкого управления курсорами в сценариях повторного использования для
|
||||
уменьшения накладных расходов.
|
||||
|
||||
- Функция `mdbx_env_resurrect_after_fork()` для восстановление открытой
|
||||
среды работы с БД в дочернем процессе после ветвления/расщепления
|
||||
процесса.
|
||||
|
||||
- Функция `mdbx_cursor_compare()` для сравнения позиций курсоров
|
||||
аналогично оператору `<=>`.
|
||||
|
||||
- Функции `mdbx_cursor_scan()` и `mdbx_cursor_scan_from()` для
|
||||
сканирования таблиц с использованием функционального предиката и
|
||||
уменьшением сопутствующих накладных расходов.
|
||||
|
||||
- Функции `mdbx_cursor_on_first_dup()` и `mdbx_cursor_on_last_dup()`
|
||||
для оценки позиции курсора.
|
||||
|
||||
- Функция `mdbx_preopen_snapinfo()` для получения информации о БД без
|
||||
её открытия.
|
||||
|
||||
- Функция `mdbx_enumerate_tables()` для получение информации
|
||||
об именованных пользовательских таблицах.
|
||||
|
||||
- Поддержка функций логирования обратного вызова без функционала
|
||||
`vprintf()`, что существенно облегчает использование логирования в
|
||||
привязках к другим языкам программирования.
|
||||
|
||||
- Режим работы `MDBX_NOSTICKYTHREADS` вместо `MDBX_NOTLS` для упрощения
|
||||
интеграции с легковесными потоками/нитями их мультиплексирования вместе
|
||||
с транзакциями по потокам операционной системы.
|
||||
|
||||
- Опция `MDBX_opt_prefer_waf_insteadof_balance`.
|
||||
|
||||
- Опции `MDBX_opt_subpage_limit`, `MDBX_opt_subpage_room_threshold`,
|
||||
`MDBX_opt_subpage_reserve_prereq`, `MDBX_opt_subpage_reserve_limit`.
|
||||
|
||||
- Управление основной блокировкой lock/unlock/upgrade/downgrade для координации пишущих транзакций.
|
||||
|
||||
- Функции `mdbx_limits_keysize_min()` и `mdbx_limits_valsize_min()` для
|
||||
получения нижней границы длины ключей и значений.
|
||||
|
||||
- Для идентификации БД добавлен UUID доступный в поле `mi_dxbid` структуры `MDBX_envinfo`,
|
||||
получаемой посредством `mdbx_env_info_ex()`.
|
||||
|
||||
- Расширение API функциями lock/unlock/upgrade/downgrade основной блокировки.
|
||||
|
||||
- Добавление в API функций `mdbx_cursor_unbind()` и `mdbx_txn_release_all_cursors()`.
|
||||
|
||||
- Добавление в API функций `mdbx_txn_copy2pathname()` и `mdbx_txn_copy2fd()`.
|
||||
|
||||
- Добавление в утилиту `mdbx_copy` опций `-d` и `-p`.
|
||||
|
||||
- Расширение и доработка C++ API:
|
||||
|
||||
- добавлен тип `mdbx::cursor::estimate_result`, а поведение методов
|
||||
`mdbx::cursor::estimate()` унифицировано с `mdbx::cursor::move()`;
|
||||
- для предотвращения незаметного неверного использования API, для инициализации
|
||||
возвращаемых по ссылке срезов, вместо пустых срезов задействован `mdbx::slice::invalid()`;
|
||||
- добавлены дополнительные C++ операторы преобразования к типам C API;
|
||||
- для совместимости со старыми стандартами C++ и старыми версиями STL перенесены
|
||||
в public классы `mdbx::buffer::move_assign_alloc` и `mdbx::buffer::copy_assign_alloc`;
|
||||
- добавлен тип `mdbx::default_buffer`;
|
||||
- для срезов и буферов добавлены методы `mdbx::buffer::hex_decode()`, `mdbx::buffer::base64_decode()`, `mdbx::buffer::base58_decode()`;
|
||||
- добавлен тип `mdbx::comparator` и функций `mdbx::default_comparator()`;
|
||||
- добавлены статические методы `mdbx::buffer::hex()`, `mdbx::buffer::base64()`, `mdbx::buffer::base58()`;
|
||||
- для транзакций и курсоров добавлены методы `get_/set_context`;
|
||||
- добавлен метод `mdbx::cursor::clone()`;
|
||||
- поддержка base58 переработана и приведена в соответствии с черновиком RFC,
|
||||
в текущем понимании теперь это одна из самых высокопроизводительных реализаций base58;
|
||||
- переработка `to_hex()` и `from_hex()`;
|
||||
- добавлены перегрузи со `std::string_view` для методов `open_map`/`create_map`/`drop_map`/`clear_map`/`rename_map()`;
|
||||
- добавлены перегрузки методов put/insert/upsert для `mdbx::pair`;
|
||||
- добавлены методы принимающие имена таблиц/subDb через `mdbx::slice`.
|
||||
|
||||
Нарушение совместимости:
|
||||
|
||||
- Использование термина "таблица" вместо "subDb".
|
||||
- Опция `MDBX_COALESCE` объявлена устаревшей, так как соответствующий функционал всегда включен начиная с предыдущей версии 0.12.
|
||||
- Опция `MDBX_NOTLS` объявлена устаревшей и заменена на `MDBX_NOSTICKYTHREADS`.
|
||||
- Опция сборки `MDBX_USE_VALGRIND` заменена на общепринятую `ENABLE_MEMCHECK`.
|
||||
- В структуре `MDBX_envinfo` серии полей вида `meta1`, `meta2` и `meta3` заменены на массивы вида `meta[3]`.
|
||||
- В шаблонных классах и функциях С++ API по-умолчанию вместо `mdbx::legacy_buffer` использован тип `mdbx::default_buffer` использующий полиморфные аллокаторы С++ 17.
|
||||
- Удаление `DEFAULT_MAPSIZE` и изменение геометрии по-умолчанию при создании БД.
|
||||
- Возвращение `MDBX_TXN_INVALID` (`INT32_MIN`) вместо `-1`
|
||||
из `mdbx_txn_flags()` при передаче невалидной транзакции.
|
||||
|
||||
Исправления:
|
||||
|
||||
- Исправление упущенного `TXN_END_EOTDONE` при сбое старта читающей транзакции.
|
||||
Упомянутый флажок отсутствовал в пути разрушения транзакции при ошибке
|
||||
её запуска. Из-за чего делалась попытка разрушить курсоры, что приводило
|
||||
к падению **отладочных сборок**, так как в них соответствующий массив
|
||||
намеренно заполнен некорректными указателями.
|
||||
|
||||
- Устранение возможности `SIGSEGV` внутри `coherency_check()` после
|
||||
изменения геометрии другим процессом с увеличением верхнего размера БД
|
||||
и увеличением БД больше предыдущего лимита.
|
||||
|
||||
- Исправление assert-проверки при попытке создания таблицы с другими флагами/опциями.
|
||||
|
||||
Мелочи:
|
||||
|
||||
- Обновление конфигурации Doxygen до 1.9.6.
|
||||
- Добавление `--read-var-info=yes` для Valgrind.
|
||||
- Вывод из `mdbx_chk` информации об уровне детализации/verbosity.
|
||||
|
||||
## v0.13.0 от 2023-04-23
|
||||
|
||||
Технический тэг, отмечающий начало ветки `0.13`
|
||||
с новым функционалом и изменением API.
|
||||
|
||||
|
||||
********************************************************************************
|
||||
|
||||
|
||||
## v0.12.12 "Доллежаль" от 2024-10-27
|
||||
|
||||
Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов,
|
||||
в память о советском ученом-энергетике Николае Антоновиче Доллежаль в день 125-летия со дня его рождения.
|
||||
|
||||
Это последний выпуск куста стабильных версий 0.12.x, спустя более двух
|
||||
лет после выпуска 0.12.1. Последующие выпуски 0.12.x будут формироваться
|
||||
только в случае существенных проблем/ошибок, вероятность чего близка к
|
||||
нулю. Для всех проектов находящихся в стадии активной разраборки
|
||||
рекомендуется использовать ветку `master`.
|
||||
|
||||
```
|
||||
git diff' stat: x commits, y files changed, z insertions(+), zz deletions(-)
|
||||
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
|
||||
```
|
||||
|
||||
Значимые исправления:
|
||||
|
||||
- Исправление упущенного `TXN_END_EOTDONE` при сбое старта читающей транзакции.
|
||||
Упомянутый флажок отсутствовал в пути разрушения транзакции при ошибке
|
||||
её запуска. Из-за чего делалась попытка разрушить курсоры, что приводило
|
||||
к падению **отладочных сборок**, так как в них соответствующий массив
|
||||
намеренно заполнен некорректными указателями.
|
||||
|
||||
- Устранение возможности `SIGSEGV` внутри `coherency_check()` после
|
||||
изменения геометрии другим процессом с увеличением верхнего размера БД
|
||||
и увеличением БД больше предыдущего лимита.
|
||||
|
||||
- Доработка `mdbx_close_dbi()` для возврата ошибки при попытке закрыть
|
||||
dbi-дескриптор таблицы, созданной и/или измененной в ещё выполняющейся
|
||||
транзакции. Такое преждевременное закрытие дескриптора является неверным
|
||||
использованием API и нарушением контракта/предусловий сформулированных
|
||||
в описании `mdbx_close_dbi()`. Однако, вместо возврата ошибки
|
||||
выполнялось некорректное закрытие дескриптора, что могло приводить к
|
||||
созданию таблицы с пустым именем, утечки страниц БД и/или нарушению
|
||||
структуры b-tree (неверной ссылкой на корень таблицы).
|
||||
Добавлен соответствующий тест `extra/early_close_dbi`.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
## v0.12.11 "Лиза и Соня" от 2024-07-23
|
||||
|
||||
Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов,
|
||||
в память об убитых в Крыму девочках 2 и 9 лет.
|
||||
|
||||
Лиза и Соня погибли 23 Июня 2024 на глазах у родителей, в результате
|
||||
удара по общественному городскому пляжу ракетами ATACMS с кассетными
|
||||
боеприпасами. Всего пострадало более 150 граждан России, в том числе 27
|
||||
детей. Ракеты были выпущенными украинскими бандеровцами/фашистами, но
|
||||
полетные задания формировались и загружались военными США, а управление
|
||||
и наведение ATACAMS невозможно без использования орбитальной группировки
|
||||
военных спутников США.
|
||||
|
||||
```
|
||||
git diff' stat: 29 commits, 14 files changed, 379 insertions(+), 151 deletions(-)
|
||||
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
|
||||
```
|
||||
|
||||
Значимые исправления:
|
||||
|
||||
- Исправление для ОС Windows нарезки `FILE_SEGMENT_ELEMENT`.
|
||||
Похоже что был потерян коммит входе работы над оптимизацией пути записи
|
||||
на диск в ОС Windows. В текущем понимании, вероятность проявления ошибки
|
||||
достаточно низкая, так как выявлена она была синтетическими тестами в
|
||||
ходе других доработок, а соответствующих сообщений/жалоб не поступало. К
|
||||
повреждению БД ошибка не приводила, так как сбой происходил до записи
|
||||
данных с возвратом `ERROR_INVALID_PARAMETER` из системного вызова, т.е.
|
||||
либо ошибка не проявлялась, либо транзакция не фиксировалась.
|
||||
|
||||
- Устранение вероятности `SIGSEGV` при включении логирования
|
||||
уровня `MDBX_LOG_TRACE` в отладочных сборках.
|
||||
|
||||
- Исправление генерации исключения `key_exists` в C++ API.
|
||||
|
||||
- Исправление опечаток в документации и README.
|
||||
|
||||
- Исправление обработки курсоров, открытых в родительских транзакциях и
|
||||
закрытых до завершения вложенных транзакций. В описанной ситуации
|
||||
закрытые курсоры "воскрешались", что приводило к утечке памяти
|
||||
выделенной под такие курсоры.
|
||||
|
||||
- Костыль для MSVC ARM/ARM64 для предотвращения ICE (Internal Compiler Error).
|
||||
|
||||
- Устранение `MDBX_EINVAL` для случая вызова `mdbx_env_remove(".")`.
|
||||
|
||||
- Исправление инверсии bool-результата `env::remove()` в C++ API.
|
||||
|
||||
- Исправление опечатки `равно`/`неравно` в условии внутри
|
||||
`update_gc()`. Существенных последствий ошибки не было, но в
|
||||
определенных сценариях, сходимость требовала еще одного цикла повтора
|
||||
внутри update_gc().
|
||||
|
||||
Прочие доработки:
|
||||
|
||||
- Проверка совместимости флагов GC/FreeDB на случай их изменения в будущих версиях.
|
||||
- Очистка сообщений `FormatMessageA()` от концевых переводов строк.
|
||||
- Уточнение макроса `__always_inline` для особо яблочных версий CLANG.
|
||||
- Использование `\n` вместо `std::endl` в C++ API при .
|
||||
- Проверка дополнительных и пока не используемых полей в meta-страницах.
|
||||
- Отключение ненужной отладки внутри `txn_merge()`.
|
||||
- Исправление условий и привязки к версиям компиляторов при формировании макроса `MDBX_DEPRECATED`.
|
||||
- Больше атрибутов `__cold` для редко-используемых функций (backport).
|
||||
- Добавление методов `buffer::append_bytes()` и `buffer::clear_and_reserve()`.
|
||||
- Отключение установки признака фатальной ошибки для не-активной среды при отличии идентификатора процесса.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
## v0.12.12 "Доллежаль" от 2024-10-27
|
||||
|
||||
@@ -226,7 +734,7 @@ Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
|
||||
|
||||
- Из разрабатываемой версии перенесены не-нарушающие совместимости доработки C++ API:
|
||||
|
||||
- добавлен тип `mdbx::cursor::estimation_result`, а поведение методов
|
||||
- добавлен тип `mdbx::cursor::estimate_result`, а поведение методов
|
||||
`cursor::estimate()` унифицировано с `cursor::move()`;
|
||||
- для предотвращения незаметного неверного использования API, для инициализации
|
||||
возвращаемых по ссылке срезов, вместо пустых срезов задействован `slice::invalid()`;
|
||||
@@ -265,6 +773,7 @@ Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
|
||||
|
||||
## v0.12.8 "Владимир Уткин" от 2023-10-17
|
||||
|
||||
|
||||
Стабилизирующий выпуск с исправлением обнаруженных ошибок и устранением недочетов,
|
||||
в день 100-летия со дня рождения выдающегося советского и российского ученого и конструктора [Влади́мира Фёдоровича У́ткина](https://ru.wikipedia.org/wiki/Уткин,_Владимир_Фёдорович).
|
||||
|
||||
@@ -538,7 +1047,7 @@ Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
|
||||
все они были несущественные, либо ложные.
|
||||
- Устранено ложное предупреждение GCC при сборке для SH4.
|
||||
- Добавлена поддержка ASAN (Address Sanitizer) при сборке посредством MSVC.
|
||||
- Расширен набор перебираемых режимов в скрипте `test/long_stochastic.sh`,
|
||||
- Расширен набор перебираемых режимов в скрипте `test/stochastic.sh`,
|
||||
добавлена опция `--extra`.
|
||||
- В C++ API добавлена поддержка расширенных опций времени выполнения `mdbx::extra_runtime_option`,
|
||||
аналогично `enum MDBX_option_t` из C API.
|
||||
@@ -848,7 +1357,7 @@ Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
|
||||
- Уменьшение в 42 раза значения по-умолчанию для `me_options.dp_limit`
|
||||
в отладочных сборках.
|
||||
- Добавление платформы `gcc-riscv64-linux-gnu` в список для цели `cross-gcc`.
|
||||
- Небольшие правки скрипта `long_stochastic.sh` для работы в Windows.
|
||||
- Небольшие правки скрипта `stochastic.sh` для работы в Windows.
|
||||
- Удаление ненужного вызова `LockFileEx()` внутри `mdbx_env_copy()`.
|
||||
- Добавлено описание использования файловых дескрипторов в различных режимах.
|
||||
- Добавлено использование `_CrtDbgReport()` в отладочных сборках.
|
||||
|
Reference in New Issue
Block a user