Tags: isar/libmdbx
Tags
v0.13.1 "РДС-1" Новая версия со сменой лицензии, существенным расширением API, добавлением функционала и внутренними переработками. В том числе, с незначительным нарушением обратной совместимости API библиотеки. Список нововведений, доработок и изменений слишком велик для размещения здесь, но вся информация есть в файле [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html). ``` git diff' stat: 157 files changed, 41949 insertions(+), 33741 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <[email protected]> ```
v0.12.11 "Лиза и Соня" Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов, в память об убитых в Крыму девочках 2 и 9 лет. Лиза и Соня погибли 23 Июня 2024 на глазах у родителей, в результате удара по общественному городскому пляжу ракетами ATACMS с кассетными боеприпасами. Всего пострадало более 150 граждан России, в том числе 27 детей. Ракеты были выпущенными украинскими бандеровцами/фашистами, но полетные задания формировались и загружались военными США, а управление и наведение ATACAMS невозможно без использования орбитальной группировки военных спутников США. Основные исправления: --------------------- - Исправление для ОС Windows нарезки `FILE_SEGMENT_ELEMENT`. Похоже что был потерян коммит входе работы над оптимизацией пути записи на диск в ОС Windows. В текущем понимании, вероятность проявления ошибки достаточно низкая, так как выявлена она была синтетическими тестами в ходе других доработок, а соответствующих сообщений/жалоб не поступало. К повреждению БД ошибка не приводила, так как сбой происходил до записи данных с возвратом `ERROR_INVALID_PARAMETER` из системного вызова, т.е. либо ошибка не проявлялась, либо транзакция не фиксировалась. - Устранение вероятности `SIGSEGV` при включении логирования уровня `MDBX_LOG_TRACE` в отладочных сборках. - Исправление генерации исключения `key_exists` в C++ API. - Исправление обработки курсоров, открытых в родительских транзакциях и закрытых до завершения вложенных транзакций. В описанной ситуации закрытые курсоры "воскрешались", что приводило к утечке памяти выделенной под такие курсоры. - Костыль для MSVC ARM/ARM64 для предотвращения ICE (Internal Compiler Error). - Устранение `MDBX_EINVAL` для случая вызова `mdbx_env_remove(".")`. - Исправление инверсии bool-результата `env::remove()`в C++ API. Более подробная информация в [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html). git diff' stat: 29 commits, 14 files changed, 379 insertions(+), 151 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <[email protected]>
v0.12.10 "СЭМ" Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов в память Героя России гвардии майора Дмитрия Семёнова с позывным "СЭМ". Значимые исправления и доработки: --------------------------------- - Устранение унаследованной от LMDB ошибки приводящей к повреждению БД при использовании `MDBX_DUPFIXED`. - Исправление ложной ошибки `MDBX_CORRUPTED (-30796)` в сценарии работы в режиме `MDBX_DUPFIXED` и нечетной длинной мульти-значений. - Исправление недочета корректировки сопутствующих курсоров при разделении страницы по сценарию добавления пустой страницы слева. - Доработка `rebalance()` ради уменьшения WAF. - Исправление assert-проверки внутри `check_txn()` для случая завершенных транзакций в режиме `MDBX_NO_TLS`. Последствий ошибки, кроме срабатывания assert-проверки в отладочных сборках, нет. - Устранение ошибки при открытии БД на файловой системе только-для-чтения. - Удалены излишне строгие проверки в утилите `mdbx_chk`, которые приводили к ложно-позитивным ошибкам при проверке БД после серии последних доработок. Более подробная информация в [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html). git diff' stat: 19 commits, 57 files changed, 751 insertions(+), 331 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <[email protected]>
v0.12.9 "Ясень-4" Стабилизирующий выпуск с исправлением обнаруженных ошибок и устранением недочетов. Исправления и доработки: ------------------------ - Ликвидация зависимости от ранее удаленной опции `MDBX_ENABLE_PREFAULT`, из-за чего опция `MDBX_ENABLE_MINCORE` не включалась автоматически, что приводило к не-активации соответствующего улучшения и не-достижению декларируемого уровня производительности в сценариях использования в режиме `MDBX_WRITEMAP`. - Исправление авто-установки `MDBX_ENV_CHECKPID` при отключении использования функционала `madvise()` посредством опции сборки `MDBX_ENABLE_MADVISE=0`. Из-за чего при поддержке системой `madvise(MADV_DONTFORK)` не включался контроль pid. - Добавлена проверка переданного ключа на `NULL` при обработке `MDBX_GET_MULTIPLE`. - Добавлена проверка номеров корневых страниц в `coherency_check()`. - Обеспечен `const` для начала и конца диапазона в аргументах `mdbx_estimate_range()`. - Из разрабатываемой версии перенесены не-нарушающие совместимости доработки C++ API: - добавлен тип `mdbx::cursor::estimation_result`, а поведение методов `cursor::estimate()` унифицировано с `cursor::move()`; - для предотвращения незаметного неверного использования API, для инициализации возвращаемых по ссылке срезов, вместо пустых срезов задействован `slice::invalid()`; - добавлены дополнительные C++ операторы преобразования к типам C API; - для совместимости со старыми стандартами C++ и старыми версиями STL перенесены в public классы `buffer::move_assign_alloc` и `buffer::copy_assign_alloc`; - добавлен тип `mdbx::default_buffer`; - для срезов и буферов добавлены методы `hex_decode()`, `base64_decode()`, `base58_decode()`; - добавлен тип `mdbx::comparator` и функций `mdbx::default_comparator()`; - добавлены статические методы `buffer::hex()`, `base64()`, `base58()`; - для транзакций и курсоров добавлены методы `get_/set_context`; - добавлен метод `cursor::clone()`; - Поддержка base58 приведена в соответствии с черновиком RFC. - Переработка/исправление `to_hex()` и `from_hex()`. - Уменьшение `MDBX_opt_rp_augment_limit` по умолчанию до 1/3 от текущего количества страниц в БД. Более подробная информация в [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html). git diff' stat: 32 commits, 8 files changed, 667 insertions(+), 401 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <[email protected]>
v0.12.8 "Владимир Уткин" Стабилизирующий выпуск с исправлением обнаруженных ошибок и устранением недочетов, в день 100-летия со дня рождения выдающегося советского и российского ученого и конструктора [Влади́мира Фёдоровича У́ткина](https://ru.wikipedia.org/wiki/Уткин,_Владимир_Фёдорович). Исправления и доработки: ------------------------ - Устранение регресса/ошибки в пути обработки `put(MDBX_MULTIPLE)` при пакетном/оптовом помещении в БД множественных значений одного ключа (aka multi-value или dupsort). Проявление проблемы зависит от компилятора и опций оптимизации/кодогенерации, но с большой вероятностью возвращется ошибка `MDBX_BAD_VALSIZE` (`-30781`), а в отладочных сборках срабатывает проверка `cASSERT(mc, !"Invalid key-size")`. Сценарии приводящие к другим проявлениям на данный момент не известны. - Реализована перезапись в `mdbx_put(MDBX_CURRENT)` всех текущих мульти-значений ключа при отсутствии флага `MDBX_NOOVERWRITE`. Ранее в такой ситуации возвращалась ошибка `MDBX_EMULTIVAL`. В текущем понимании новое поведение более удобно и не создаёт проблем совместимости с ранее написанным кодом. - Добавлена возможность использовать `mdbx_cursor_get(MDBX_GET_MULTIPLE)` без предварительной установки курсора, совмещая операцию пакетного получения данных с позиционированием курсора на передаваемый ключ. - Микрооптимизация и рефакторинг `cursor_put_nochecklen()` в продолжение исправления регресса/ошибки в пути обработки `put(MDBX_MULTIPLE)`. - Уточнение формулировок в описании API, в том числе пояснений о `SIGSEGV` и недопустимости прямого изменения данных. Более подробная информация в [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html). git diff' stat: 24 commits, 18 files changed, 624 insertions(+), 94 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <[email protected]>
v0.12.7 "Артек" Стабилизирующий выпуск с исправлением обнаруженных ошибок и устранением недочетов, в день основания международного детского центра [«Арте́к»](https://ru.wikipedia.org/wiki/Артек). Исправления и доработки: ------------------------ - Исправление опечатки в имени переменной внутри `mdbx_env_turn_for_recovery()`. - Обходное решение проблем сборки посредством GCC с использование опций `-m32 -arch=i686 -Ofast`. - Доработка режима "восстановления" БД и переключения на заданную мета-страницу. Более подробная информация в [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html). Мелочи: ------- - Незначительное уточнение CMake-пробника для `std::filesystem`, проверяющего необходимость линковки с дополнительными библиотеками C++. - Устранение минорных предупреждений старых компиляторов в тестах. - Устранение причины ложно-позитивного предупреждения новых версий GCC в C++ API. - Исправление ссылки на репозиторий бенчмарка ioarena. - Добавление перекрестных ссылок в doxygen-документацию по C++ API. - Уточнение ограничений в разделе [Restrictions & Caveats](https://libmdbx.dqdkfa.ru/intro.html#restrictions). - Исправление ссылок на описание `mdbx_canary_put()`. 14 files changed, 222 insertions(+), 56 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <[email protected]>
v0.12.6 "ЦСКА" Стабилизирующий выпуск с исправлением обнаруженных ошибок и устранением недочетов, в день 100-летнего юбилея спортивного клуба [«ЦСКА»](https://ru.wikipedia.org/wiki/Центральный_спортивный_клуб_Армии). Мелочи: ------- - Обновление патча для старых версий buildroot. - Использование clang-format-16. - Использование `enum`-типов вместо `int` для устранения предупреждений GCC 13, что могло ломать сборку в Fedora 38. 14 files changed, 117 insertions(+), 83 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <[email protected]>
v0.12.5 "Динамо" Стабилизирующий выпуск с исправлением обнаруженных ошибок и устранением недочетов, в день 100-летнего юбилея спортивного общества [«Динамо»](https://ru.wikipedia.org/wiki/Динамо_(спортивное_общество)). Благодарности: -------------- - Max <[email protected]> за сообщение о проблеме экспорта из DSO/DLL устаревших функций API. - [`@calvin3721`](https://t.me/calvin3721) за сообщение о проблеме работы `MainDB` с флагами не по-умолчанию. Исправления: ------------ - Поправлен экспорт из DSO/DLL устаревших функций, которые заменены на inline в текущем API. - Устранено использование неверного компаратора при создании или пересоздании `MainDB` с флагами/опциями предполагающим использование специфического компаратора (не по-умолчанию). Мелочи: ------- - Удалена дублирующая диагностика внутри `node_read_bigdata()`. - Исправлены ссылки в описании `mdbx_env_set_geometry()`. - Добавлен отдельный тест `extra/upsert_alldups` для специфического сценария замены/перезаписи одним значением всех multi-значений соответствующих ключу, т.е. замена всех «дубликатов» одним значением. - В C++ API добавлены варианты `buffer::key_from()` с явным именованием по типу данных. - Добавлен отдельный тест `extra/maindb_ordinal` для специфического сценария создания `MainDB` с флагами требующими использования компаратора не по-умолчанию. - Рефакторинг проверки "когерентности" мета-страниц. - Корректировка `osal_vasprintf()` для устранения предупреждений статических анализаторов. 16 files changed, 686 insertions(+), 247 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <[email protected]>
0.12.4 "Арта-333" Стабилизирующий выпуск с исправлением обнаруженных ошибок, устранением недочетов и технических долгов. Ветка 0.12 считается готовой к продуктовому использованию, получает статус стабильной и далее будет получать только исправление ошибок. Разработка будет продолжена в ветке 0.13, а ветка 0.11 становится архивной. Благодарности: -------------- - Max <[email protected]> за сообщение о проблеме ERROR_SHARING_VIOLATION в режиме MDBX_EXCLUSIVE на Windows. - Alisher Ashyrov <https://t.me/a1is43ras4> за сообщение о проблеме с assert-проверкой и содействие в отладке. - Masatoshi Fukunaga <https://gitflic.ru/user/mah0x211> за сообщение о проблеме `put(MDBX_UPSERT+MDBX_ALLDUPS)` для случая замены всех значений в subDb. Исправления (без корректировок новых функций): ---------------------------------------------- - Устранен регресс после коммита 474391c, приводящий к возврату ERROR_SHARING_VIOLATION в Windows при открытии БД в режиме MDBX_EXCLUSIVE для чтения-записи. - Добавлено ограничение размера отображения при коротком read-only файле, для предотвращения ошибки ERROR_NOT_ENOUGH_MEMORY в Windows, которая возникает в этом случае и совсем не информативна для пользователя. - Произведен рефакторинг `dxb_resize()`, в том числе, для устранения срабатывания assert-проверки `size_bytes == env->me_dxb_mmap.current` в специфических многопоточных сценариях использования. Проверка срабатывала только в отладочных сборках, при специфическом наложении во времени читающей и пишущей транзакции в разных потоках, одновременно с изменением размера БД. Кроме срабатывание проверки, каких-либо других последствий не возникало. - Устранена проблема в `put(MDBX_UPSERT+MDBX_ALLDUPS)` для случая замены всех значений единственного ключа в subDb. В ходе этой операции subDb становится полностью пустой, без каких-либо страниц и именно эта ситуация не была учтена в коде, что приводило к повреждению БД при фиксации такой транзакции. - Устранена излишняя assert-проверка внутри `override_meta()`. Что в отладочных сборках могло приводить к ложным срабатываниям при восстановлении БД, в том числе при автоматическом откате слабых мета-страниц. - Скорректированы макросы `__cold`/`__hot`, в том числе для устранения проблемы `error: inlining failed in call to ‘always_inline FOO(...)’: target specific option mismatch` при сборке посредством GCC >10.x для SH4. Ликвидация технических долгов и мелочи: --------------------------------------- - Исправлены многочисленные опечатки в документации. - Доработан тест для полной стохастической проверки `MDBX_EKEYMISMATCH` в режиме `MDBX_APPEND`. - Расширены сценарии запуска `mdbx_chk` из CMake-тестов для проверки как в обычном, так и эксклюзивном режимах чтения-записи. - Уточнены спецификаторы `const` и `noexcept` для нескольких методов в C++ API. - Устранено использование стека под буферы для `wchar`-преобразования путей. - Для Windows добавлена функция `mdbx_env_get_path()` для получения пути к БД в формате многобайтных символов. - Добавлены doxygen-описания для API с широкими символами. - Устранены предупреждения статического анализатора MSVC, все они были несущественные, либо ложные. - Устранено ложное предупреждение GCC при сборке для SH4. - Добавлена поддержка ASAN (Address Sanitizer) при сборке посредством MSVC. - Расширен набор перебираемых режимов в скрипте `test/long_stochastic.sh`, добавлена опция `--extra`. - В C++ API добавлена поддержка расширенных опций времени выполнения `mdbx::extra_runtime_option`, аналогично `enum MDBX_option_t` из C API. - Вывод всех счетчиков page-operations в `mdbx_stat`. 63 files changed, 1161 insertions(+), 569 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <[email protected]>
PreviousNext