4704 Commits

Author SHA1 Message Date
Леонид Юрьев (Leonid Yuriev)
b308559dd9 mdbx: понижение уровня логирования для "skip update meta".
Спасибо [Илье Михееву](https://github.com/JkLondon) за сообщение о недочете.
2025-03-28 15:12:10 +03:00
Леонид Юрьев (Leonid Yuriev)
b4e65f5d21 mdbx: обновление NOTICE. 2025-03-22 23:29:43 +03:00
Леонид Юрьев (Leonid Yuriev)
390490edf4 mdbx: уточнение типа адреса для донатов. 2025-03-22 23:17:35 +03:00
Леонид Юрьев (Leonid Yuriev)
94531a9cdc mdbx++: вброс std::invalid_argument с явным сообщением "MDBX_EINVAL" . 2025-03-22 19:43:23 +03:00
Леонид Юрьев (Leonid Yuriev)
f8e332a205 mdbx-test: расширение extra/cursor-closing. 2025-03-22 19:43:23 +03:00
Леонид Юрьев (Leonid Yuriev)
021d83b841 mdbx: устранение регресса при использовании курсоров для DBI=0 в читающих транзакциях.
В результате рефакторинга и ряда оптимизаций для завершения/гашения
курсоров в читающих и пишущих транзакций стал использоваться общий код.
Причем за основу, был взят соответствующий фрагмент относящийся к
пишущим транзакциям, в которых пользователю не позволяется
использоваться курсоры для DBI=0 и поэтому эта итераций пропускалась.

В результате, при завершении читающих транзакциях, курсоры связанные с
DBI=0 не завершались должным образом, а при их повторном использовании
или явном закрытии после завершения читающей транзакции происходило
обращение к уже освобожденной памяти. Если же такие курсоры
отсоединялись или закрывались до завершения читающей транзакции, то
ошибка не имела шансов на проявление.

Спасибо Илье Михееву (https://github.com/JkLondon) и команде Erigon (https://erigon.tech) за сообщения о проблеме.
2025-03-22 19:08:52 +03:00
Леонид Юрьев (Leonid Yuriev)
4e33bad6e7
mdbx: отсечение хвоста ChangeLog с отделением в ChangeLog-01. 2025-03-21 00:31:54 +03:00
Леонид Юрьев (Leonid Yuriev)
a313dd2fae
mdbx: merge branch stable into master. 2025-03-21 00:11:00 +03:00
Леонид Юрьев (Leonid Yuriev)
2e4962a2f3 mdbx-docs: изменение <title> и meta-title в index.html 2025-03-20 21:50:53 +03:00
Леонид Юрьев (Leonid Yuriev)
00917f8c96 mdbx: корректировка ChangeLog. 2025-03-20 19:15:56 +03:00
Леонид Юрьев (Leonid Yuriev)
999f8644f6
mdbx: дополнение ChangeLog. 2025-03-20 18:02:00 +03:00
Леонид Юрьев (Leonid Yuriev)
5d9fb63fb8 mdbx: усиление контроля сигнатур курсоров (backport). 2025-03-20 18:00:44 +03:00
Леонид Юрьев (Leonid Yuriev)
06f8573f5f mdbx: усиление контроля сигнатур курсоров. 2025-03-20 17:20:47 +03:00
Леонид Юрьев (Leonid Yuriev)
1e0a1014a4 mdbx-tests: корректировка обработки прерывания теста посредством SIGTERM/SIGINT (backport). 2025-03-20 14:23:19 +03:00
Леонид Юрьев (Leonid Yuriev)
7eb7931a23 mdbx-tests: корректировка обработки прерывания теста посредством SIGTERM/SIGINT. 2025-03-20 14:13:20 +03:00
Леонид Юрьев (Leonid Yuriev)
35349cf538 mdbx: добавление опции сборки MDBX_ENABLE_NON_READONLY_EXPORT и логирование соответствующих ситуаций (backport).
Закрывает [запрос](https://gitflic.ru/project/erthink/libmdbx/issue/16).
2025-03-20 13:55:07 +03:00
Леонид Юрьев (Leonid Yuriev)
8157d07b00 mdbx: использование при наличии EREMOTEIO вместо ENOTBLK в качестве MDBX_EREMOTE (backport). 2025-03-20 13:53:47 +03:00
Леонид Юрьев (Leonid Yuriev)
3c3628c798 mdbx-tests: кратное сокращение итераций тестов в зависимости от конфигурации Valgrind/Debug/CI (backport). 2025-03-20 01:58:02 +03:00
Леонид Юрьев (Leonid Yuriev)
3a0dbee58c mdbx-tests: устранение невыравненного доступа в extra/close-dbi для UBSAN (backport). 2025-03-20 01:57:38 +03:00
Леонид Юрьев (Leonid Yuriev)
e11d419d20 mdbx-tests: перехват и логирование исключений в extra-C++ тестах (backport). 2025-03-20 01:56:55 +03:00
Леонид Юрьев (Leonid Yuriev)
59343d9106 mdbx++: minor reflow Doxygen comments (backport). 2025-03-20 01:56:07 +03:00
Леонид Юрьев (Leonid Yuriev)
2127d3b7d7 mdbx-tests: расширение extra/dupfix-multiple (backport). 2025-03-20 01:55:41 +03:00
Леонид Юрьев (Leonid Yuriev)
065aef35ea mdbx++: добавление mdbx::cursor::put_multiple_samelength() (backport). 2025-03-20 01:55:10 +03:00
Леонид Юрьев (Leonid Yuriev)
9653c8f45b mdbx: рефакторинг проверок с выносом в cursor_check_multiple() (backport). 2025-03-20 01:52:21 +03:00
Леонид Юрьев (Leonid Yuriev)
7ed769e9c6 mdbx: поддержка MDBX_MULTIPLE с нулевым размером данных (backport). 2025-03-20 01:51:37 +03:00
Леонид Юрьев (Leonid Yuriev)
52a19fecca mdbx++: явное определение external-инстанцирования mdbx::buffer<> c API-атрибутами (backport). 2025-03-20 01:50:27 +03:00
Леонид Юрьев (Leonid Yuriev)
3282adf8bd mdbx: исправление регресса в пути обработки MDBX_MULTIPLE (backport).
Пакетная вставка значений посредством операции `MDBX_MULTIPLE` могла
приводить к падениям и повреждению структуры БД. Ошибка оставалось не
замеченной из-за специфических условий проявления, которые не
реализовались в тестах.

Проблема присутствовала во всех выпусках начиная с v0.13.1, но
соответствующая ошибка не связана с конкретным коммита в истории, а
является следствием нескольких доработок (шагов рефакторинга), которые
суммарно привели к регрессу.

Технически ошибка обусловлена не-обнулением переменной, которая не
обнулялась в некотором пути выполнения и исходно не требовала обнуления,
но такое обнуление потребовалось после ряда этапов оптимизации кода и
рефакторинга.

Основным условием проявления является пакетная вставка multi-значений в
dupsort-таблицу с фиксированным размером значений, при котором набор
значений соответствующий обновляемом ключу, перестаёт помещаться на
вложенной странице и преобразуется/выносится во вложенное дерево
страниц. Если такой вынос/преобразование происходило до исчерпания
переданного набора значений, то при следующей итерации повторно
производились действия соответствующие выносу данных в отдельное дерево
страниц. Что могла приводить как к разыменованию неверных указателей
(повреждению содержимого памяти) и/или к повреждению содержимого страниц
образующих структуру БД.

Исправление свелось к добавлению одной строчки кода, но также были
расширены тесты для покрытия соответствующих сценариев.
2025-03-20 01:49:42 +03:00
Леонид Юрьев (Leonid Yuriev)
529f2c2380 mdbx-tests: уменьшение кол-ва итераций в extra/crunched-delete для 32-битных сборок во избежания MDBX_MAP_FULL (backport). 2025-03-20 01:49:17 +03:00
Леонид Юрьев (Leonid Yuriev)
1dfe1e872e mdbx++: добавление mdbx::cursor::seek_multiple_samelength() (backport). 2025-03-20 01:48:58 +03:00
Леонид Юрьев (Leonid Yuriev)
767ba21977 mdbx: костыли для CLANG < 20 при использовании [[атрибутов]] C23 (backport). 2025-03-20 01:48:22 +03:00
Леонид Юрьев (Leonid Yuriev)
0a9c9840da mdbx-tests: существенное расширение extra/cursor-closing (backport). 2025-03-20 01:47:56 +03:00
Леонид Юрьев (Leonid Yuriev)
9c177de034 mdbx-tests: дополнение extra/txn (backport). 2025-03-20 01:47:24 +03:00
Леонид Юрьев (Leonid Yuriev)
5f37ea60d2 mdbx++: проверка __cpp_concepts >= 202002 для использования концептов C++ (backport). 2025-03-20 01:46:43 +03:00
Леонид Юрьев (Leonid Yuriev)
c457804fad mdbx: исправление затенения курсоров во вложенных транзакциях (backport). 2025-03-20 01:46:13 +03:00
Леонид Юрьев (Leonid Yuriev)
6c036add8b mdbx: переработка проверки курсоров на входе API-функций с добавлением cursor_check() (backport). 2025-03-20 01:44:20 +03:00
Леонид Юрьев (Leonid Yuriev)
5fd319bbc2 mdbx: переработка mdbx_txn_release_all_cursors_ex() (backport). 2025-03-20 01:42:50 +03:00
Леонид Юрьев (Leonid Yuriev)
682233ba28 mdbx++: переформатирование (временно) неиспользуемого кода (backport). 2025-03-20 01:41:58 +03:00
Леонид Юрьев (Leonid Yuriev)
c5936eb5da mdbx++: удаление исключения при запросе транзакции у отсоединённого курсора (backport). 2025-03-20 01:41:32 +03:00
Леонид Юрьев (Leonid Yuriev)
d8890bc169 mdbx++: добавление inplace_storage_size_rounding в capacity_policy для буферов (backport). 2025-03-20 01:41:05 +03:00
Леонид Юрьев (Leonid Yuriev)
73d52c1963 mdbx++: добавление mdbx::cursor_managed::withdraw_handle() (backport). 2025-03-20 01:40:41 +03:00
Леонид Юрьев (Leonid Yuriev)
58729a2fbd mdbx: корректировка описания MDBX_MVCC_RETARDED и соответствующего сообщения об ошибке (backport). 2025-03-20 01:40:11 +03:00
Леонид Юрьев (Leonid Yuriev)
5dfe3433a8 mdbx: устранение гонки в tbl_setup(MDBX_DUPFIXED | MDBX_INTEGERDUP) при работе в разных потоках (backport).
Проблема была в том, что в случаях фиксированного размера значений
clc.lmin/clc.lmax устанавливались в env->kvs[], а затем корректировались
по актуальному размеру данных в БД. Поэтому при конкурентном вызове из
разных потоков, один поток мог выполнять инициализацию, а второй
прочитать временные/промежуточные значения lmin/lmax.

В результате, при конкурентном старте транзакций в разных потоках при
использовании только-что открытого dbi-хендла, проверка допустимости
длины значения могла заканчиваться ложной ошибкой MDBX_BAD_VALSIZE.
2025-03-20 01:24:34 +03:00
Леонид Юрьев (Leonid Yuriev)
1720762080 mdbx: переименование cursor_validate() (backport). 2025-03-20 01:24:30 +03:00
Леонид Юрьев (Leonid Yuriev)
91570a084f mdbx: добавление MDBX_SEEK_AND_GET_MULTIPLE в API операций курсора (backport). 2025-03-20 01:17:47 +03:00
Леонид Юрьев (Leonid Yuriev)
0fff8d0704 mdbx-doc: doxygen-описания для doubtless-positioning констант (backport). 2025-03-20 01:17:11 +03:00
Леонид Юрьев (Leonid Yuriev)
484b488f92 mdbx-tests: добавление поддержки опции MDBX_VALIDATION и использование в стохастическом тесте (backport). 2025-03-20 01:16:48 +03:00
Леонид Юрьев (Leonid Yuriev)
2fbdaccf60 mdbx-tests: поддержка значений on/off для опций командной строки (backport). 2025-03-20 01:15:53 +03:00
Леонид Юрьев (Leonid Yuriev)
753b2270fd mdbx: добавление mdbx_cursor_close2() в API (backport). 2025-03-20 01:14:34 +03:00
Леонид Юрьев (Leonid Yuriev)
33ceba0a5a mdbx: добавление cursor_reset() и cursor_drown() (backport). 2025-03-20 01:13:44 +03:00
Леонид Юрьев (Leonid Yuriev)
2476fba287 mdbx: рефакторинг cursor_eot() для упрощения txn_done_cursors() (backport). 2025-03-20 01:12:59 +03:00