mirror of
https://github.com/isar/libmdbx.git
synced 2025-04-01 02:32:57 +08:00
mdbx: дополнение ChangeLog.
This commit is contained in:
parent
5d9fb63fb8
commit
999f8644f6
90
ChangeLog.md
90
ChangeLog.md
@ -10,9 +10,33 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/libmdbx
|
||||
|
||||
Благодарности:
|
||||
|
||||
- [Erigon](https://docs.erigon.tech/) за спонсорство.
|
||||
- [Erigon](https://erigon.tech/) за спонсорство.
|
||||
- [Илье Михееву](https://t.me/IlyaMkhv) за сообщения о недочетах и тестирование.
|
||||
- [Alex Sharov](https://github.com/AskAlexSharov) за сообщение об ошибках и тестирование.
|
||||
- [maxc0d3r](https://gitflic.ru/user/maxc0d3r) for bug reporting and testing.
|
||||
- [Alain Picard](https://github.com/castortech) for support [Java bindings](https://github.com/castortech/mdbxjni) and MacOS universal binaries patch for CMake build scenario,
|
||||
also for bug reporting (put-`MDBX_MULTIPLE` regression). Big thank for assistance with debugging and testing.
|
||||
|
||||
|
||||
Новое:
|
||||
|
||||
- Добавлена опция сборки `MDBX_ENABLE_NON_READONLY_EXPORT` позволяющая использовать в режиме чтения-записи БД расположенных в файловых системах экспортированных через NFS.
|
||||
По-умолчанию опция выключена и при открытии в неэксклюзивном режиме чтения-записи БД расположенных файловых системах доступных извне по NFS будет возвращаться ошибка `MDBX_EREMOTE`.
|
||||
Включение опции позволяет открывать БД в описанных выше ситуациях, но риск чтения неверных данных на удалённой стороне ложится на пользователя.
|
||||
|
||||
- Поддержка MacOS universal binaries при сборке посредством CMake.
|
||||
|
||||
- Для закрытия или отсоединения всех курсоров с получением их количества в API добавлена функция `mdbx_txn_release_all_cursors_ex()`.
|
||||
|
||||
- Добавлена операция `MDBX_SEEK_AND_GET_MULTIPLE` в API курсора, позволяющая за одну операцию выполнить позиционирование
|
||||
курсора на конкретное значение и начать чтение multi-значений в пакетном режиме.
|
||||
|
||||
- Добавлены методы `mdbx::cursor::put_multiple_samelength()`, `mdbx::cursor::seek_multiple_samelength()`, `mdbx::cursor_managed::withdraw_handle()`.
|
||||
|
||||
- В политику управления выделением для `mdbx::buffer<ALLOCATOR, CAPACITY_POLICY>` добавлен параметр `inplace_storage_size_rounding`.
|
||||
Одновременно с этим переработан внутренний union-тип `mdbx::buffer<ALLOCATOR, CAPACITY_POLICY>::silo::bin` для возможности увеличения без пенальти встроенного в экземпляр буфера места под данные.
|
||||
|
||||
- В API добавлена функция `mdbx_cursor_close2()` возвращающая код ошибки.
|
||||
|
||||
Исправления:
|
||||
|
||||
@ -39,13 +63,75 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/libmdbx
|
||||
|
||||
- Устранена причина попыток рекурсивного захвата мьютекса при работе `mdbx_chk -w` в сборах с поддержкой Valring/ASAN и под управлением этих инструментов.
|
||||
|
||||
- Проверка владельца потока владеющего транзакцией только при `MDBX_TXN_CHECKOWNER=ON`.
|
||||
- Устранены проверки потока владеющего транзакцией при сборке с опцией `MDBX_TXN_CHECKOWNER=OFF`.
|
||||
|
||||
- Устранена вероятность ситуации гонки в `tbl_setup(MDBX_DUPFIXED | MDBX_INTEGERDUP)` при работе в разных потоках.
|
||||
В реальных сценариях вероятность проявления проблемы была близка к нулю.
|
||||
Для подробностей смотрите комментарий коммита `3e91500fac475947f5b58268d5edd3c9cc4f77f6`.
|
||||
|
||||
- Устранён регресс затенения курсоров во вложенных транзакциях.
|
||||
При реализации отложенной/ленивой инициализации dbi-дескрипторов также было реализовано отложенное затенение курсоров (создание копии состояния для отката при прерывании транзакции),
|
||||
что существенно уменьшало накладные расходы при старте и завершении вложенных транзакций в сценариях с большим количеством курсоров.
|
||||
Однако, была допущена логическая ошибка, вследствие которой отложенная инициализация и затенение выполнялись при использовании dbi-дескрипторов, но не курсора открытого в родительской транзакции.
|
||||
В результате, родительские курсоры во вложенных транзакциях могли не затеняться, что приводило к неконсистентному состоянию в случае
|
||||
прерывания/откате вложенной транзакции и в соответствующей таблицы были изменения в рамках прерванной вложенной транзакции.
|
||||
Проблема не реализовывалась в тестовых сценариях и не была замечена при эксплуатации, но была обнаружена при расширении тестов.
|
||||
Ошибка присутствует в версиях 0.13.x и последующих, начиная с коммита `e6af7d7c53428ca2892bcbf7eec1c2acee06fd44` от 2023-11-05.
|
||||
|
||||
- Устранён регресс в пути обработки операции `MDBX_MULTIPLE`.
|
||||
Пакетная вставка значений посредством `MDBX_MULTIPLE` могла приводить к падениям и повреждению структуры БД. Ошибка оставалось не
|
||||
замеченной из-за специфических условий проявления, которые не реализовались в тестах.
|
||||
Проблема присутствовала во всех выпусках начиная с v0.13.1, но соответствующая ошибка не связана с конкретным коммита в истории, а
|
||||
является следствием нескольких доработок (шагов рефакторинга), которые суммарно привели к регрессу.
|
||||
Технически ошибка обусловлена не-обнулением переменной, чего не происходило в некотором пути выполнения, так как исходно не требовалось.
|
||||
Однако, такое обнуление потребовалось после ряда этапов оптимизации и рефакторинга смежных участков кода.
|
||||
Для подробностей смотрите комментарий коммита `23a417fe19614481c6546845995d6dc845baf797`.
|
||||
|
||||
- Скорректировано описание ошибки `MDBX_MVCC_RETARDED` и текста соответствующего сообщения.
|
||||
|
||||
- В C++ API добавлена упущенная проверка `__cpp_concepts >= 202002` для использования концептов C++.
|
||||
|
||||
Изменение поведения:
|
||||
|
||||
- Функция `mdbx_txn_release_all_cursors()` возвращает только код ошибки, не смешивая его с количеством обработанных/закрытых курсоров.
|
||||
Для аналогичных действий с получением количества закрытых курсоров в API добавлена функция `mdbx_txn_release_all_cursors_ex()`.
|
||||
|
||||
- Использование системного кода ошибки `EREMOTEIO` ("Remote I/O error") вместо `ENOTBLK` ("Block device required") в качестве `MDBX_EREMOTE` для индикации ошибочной ситуации открытия БД расположенной на сетевом носителе.
|
||||
|
||||
- Для основных вариантов использования шаблона `mdbx::buffer<>` теперь явно инстанцируются внутри библиотеки,
|
||||
одновременно соответствующие специализации шаблона помечены как `external` для предотвращения повторного инстанцирования в пользовательском коде.
|
||||
|
||||
- Запрещена отвязка/открепление курсоров во вложенных транзакциях, т.е. вызовы `mdbx_cursor_unbind()` и
|
||||
`mdbx_txn_release_all_cursors(unbind=true)` для курсоров открытых в одной из родительских транзакций.
|
||||
Причина в том, что в случае отмены вложенной транзакции возникает неконструктивная неопределенность
|
||||
— следует ли восстанавливать состояние курсоров. Если не восстанавливать, то получается что вложенная транзакция может
|
||||
поломать родительскую, сделав её продолжение невозможным. Если восстанавливать, то также следует «воскрешать» закрытые
|
||||
курсоры, что неизбежно приведет к путанице, утечкам памяти и использованию после освобождения.
|
||||
|
||||
- В C++ API отменён вброс исключения при запросе транзакции у отсоединённого курсора посредством вывоза `mdbx::cursor::txn()`.
|
||||
|
||||
Прочие доработки:
|
||||
|
||||
- Доработка использования LTO в CMake-сценариях: использование `-flto=auto` для GCC >= 11.4,
|
||||
расслабление условий для включения LTO для CLANG на Linux, расширение поиска `LLVMgold.so` в относительных lib-директориях.
|
||||
|
||||
- Добавлены дополнительные проверки сигнатур курсоров при итерации связанных списков.
|
||||
|
||||
- Кратное сокращение итераций тестов в зависимости от конфигурации Valgrind/Debug/CI.
|
||||
|
||||
- Устранены предупреждения UBASN о невыравненном доступе в тесте extra/close-dbi.
|
||||
|
||||
- Добавлен перехват и логирование исключений в extra-тестах на C++.
|
||||
|
||||
- Расширены тесты extra/dupfix-multiple, extra/cursor-closing и extra/txn.
|
||||
|
||||
- В утилиту тестирования добавлена поддержка режима/опции `MDBX_VALIDATION` и поддержка значений `on`/`off` для опций командной строки.
|
||||
|
||||
- Добавлены doxygen-описания для doubtless-positioning констант.
|
||||
|
||||
- Переработана проверка курсоров на входе в API-функций с добавлением `cursor_check()`, `cursor_reset()` и `cursor_drown()`.
|
||||
|
||||
- Отключено использование C23 `[[атрибутов]]` для версий CLANG меньше 20.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user