4705 Commits

Author SHA1 Message Date
Леонид Юрьев (Leonid Yuriev)
2476fba287 mdbx: рефакторинг cursor_eot() для упрощения txn_done_cursors() (backport). 2025-03-20 01:12:59 +03:00
Леонид Юрьев (Leonid Yuriev)
2b6a768750 mdbx: косметический рефакторинг cursor_shadow() (backport). 2025-03-20 01:12:15 +03:00
Леонид Юрьев (Leonid Yuriev)
b6dcdcf2dc mdbx: запрещение unbind/close курсоров для вложенных транзакций (backport). 2025-03-20 01:10:11 +03:00
Леонид Юрьев (Leonid Yuriev)
175e4a2e1b mdbx: проверка владельца потока владеющего транзакцией только при MDBX_TXN_CHECKOWNER=ON (backport). 2025-03-20 01:06:56 +03:00
Леонид Юрьев (Leonid Yuriev)
f9d7eb5525 mdbx-doc: актуализация раздела MacOS в README (backport). 2025-03-20 01:01:05 +03:00
Леонид Юрьев (Leonid Yuriev)
69895e2b55 mdbx-make: поиск gnu-sed на Darwin/MacOS (backport). 2025-03-20 00:57:17 +03:00
Леонид Юрьев (Leonid Yuriev)
15bd9cfc89 mdbx: удаление const у транзакции в cursor_bind() и cursor_renew() (backport). 2025-03-20 00:52:16 +03:00
Леонид Юрьев (Leonid Yuriev)
d8f9f3ba58 mdbx: проверяем выравнивание размера БД на юнит выделения памяти, а не на размер страницы (backport).
Теоретически до этого коммита могла быть некоторая неувязка:
 - при открытии БД с размером страницы 4K на Windows (где размер секции кратен 64K) в режиме read-only,
 - после того как БД использовалась на POSIX (где размер отображения кратен размеру системной страницы).

Ранее ошибка могла возвращаться со стороны системы (например INVALID_PARAMETER) и по ней крайне сложно было понять в чем дело.
Теперь же будет логирование ошибки и возврат MDBX_WANNA_RECOVERY.
2025-03-20 00:46:45 +03:00
Леонид Юрьев (Leonid Yuriev)
4150f411dc mdbx: переработка проверка размера файла БД при открытии (backport).
Переработка 05cdf9d202b14ac09c801c7893e65271fa27f378. У предыдущего
варианта был недостаток, при необходимости выдачи предупреждения
и открытии БД с изменением геометрии, предупреждение не выдавалось,
что может затруднять анализ/разбор проблемных ситуаций.
2025-03-20 00:45:57 +03:00
Леонид Юрьев (Leonid Yuriev)
32ca9691c3 mdbx-doc: добавление ссылки на привязку к Zig (backport). 2025-03-20 00:44:54 +03:00
Леонид Юрьев (Leonid Yuriev)
4f59864ef5 mdbx-cmake: используем -flto=auto для GCC >= 11.4 (backport).
При сборке посредством GCC >= 11.4 больше не возникает предупреждений:
  lto-wrapper: warning: using serial compilation of # LTRANS jobs
  lto-wrapper: note: see the ‘-flto’ option documentation for more information

Однако, использование auto-режима не является оптимальным решением, так
как при параллельной сборке посредством make или ninja, каждая уже
запущенная ветвь компиляции породит потоки ещё для каждого ядра ЦПУ.

Таким образом реальная нагрузка может расти квадратично, т.е. чем больше
у вас ядер -- тем хуже и при 96 ядрах может работать 9216 потоков сборки.

Тем не менее, использование `job-server` в CMake пока не возможно, а при
сборке libmdbx не так много работы чтобы чтобы обрушить систему нагрузкой.
2025-03-20 00:41:13 +03:00
Леонид Юрьев (Leonid Yuriev)
f82b760b6e mdbx-cmake: избегаем двойной работы compiler.cmake без необходимости (backport). 2025-03-20 00:40:12 +03:00
Леонид Юрьев (Leonid Yuriev)
d6b359756c mdbx-cmake: расслабление условий для использования LTO с CLANG на Linux (backport). 2025-03-20 00:40:02 +03:00
Леонид Юрьев (Leonid Yuriev)
4d454d6e80 mdbx-cmake: расширение поиска LLVMgold.so в относительных lib-директориях (backport). 2025-03-20 00:35:47 +03:00
Леонид Юрьев (Leonid Yuriev)
44467d0883 mdbx-make: добавление цели ninja-assertions и её использование при make check (backport). 2025-03-20 00:30:01 +03:00
Леонид Юрьев (Leonid Yuriev)
49e6bd9296 mdbx++: использование mdbx_txn_release_all_cursors_ex() (backport). 2025-03-20 00:29:20 +03:00
Леонид Юрьев (Leonid Yuriev)
e37194affe
mdbx: дополнение ChangeLog. 2025-03-19 23:50:29 +03:00
Леонид Юрьев (Leonid Yuriev)
917e2827f5 mdbx-tests: кратное сокращение итераций тестов в зависимости от конфигурации Valgrind/Debug/CI. 2025-03-19 23:30:49 +03:00
Леонид Юрьев (Leonid Yuriev)
2fd1772503 mdbx-tests: устранение невыравненного доступа в extra/close-dbi для UBSAN. 2025-03-18 13:14:47 +03:00
Леонид Юрьев (Leonid Yuriev)
694626727f mdbx: использование cmp_lenfast() вместо cmp_lenfast(). 2025-03-18 10:46:55 +03:00
Леонид Юрьев (Leonid Yuriev)
2aa47f20c3 mdbx-tests: перехват и логирование исключений в extra-C++ тестах. 2025-03-18 10:46:55 +03:00
Leo Yuriev
e6891b295b mdbx++: minor reflow Doxygen comments. 2025-03-18 10:46:55 +03:00
Леонид Юрьев (Leonid Yuriev)
c0b1ab1466 mdbx-tests: расширение extra/dupfix-multiple. 2025-03-18 10:46:55 +03:00
Леонид Юрьев (Leonid Yuriev)
71d95d1a5f mdbx++: добавление mdbx::cursor::put_multiple_samelength(). 2025-03-18 10:46:55 +03:00
Леонид Юрьев (Leonid Yuriev)
7a923b3d41 mdbx: рефакторинг проверок с выносом в cursor_check_multiple(). 2025-03-18 10:46:55 +03:00
Леонид Юрьев (Leonid Yuriev)
8008afc6e1 mdbx: поддержка MDBX_MULTIPLE с нулевым размером данных. 2025-03-18 10:46:55 +03:00
Леонид Юрьев (Leonid Yuriev)
7ae11e0fdb mdbx++: явное определение external-инстанцирования mdbx::buffer<> c API-атрибутами. 2025-03-17 23:28:58 +03:00
Леонид Юрьев (Leonid Yuriev)
5c1745a7cd mdbx: добавление гистограммы количества multi-значений/дубликатов в chk. 2025-03-17 23:28:46 +03:00
Леонид Юрьев (Leonid Yuriev)
23a417fe19 mdbx: исправление регресса в пути обработки MDBX_MULTIPLE.
Пакетная вставка значений посредством операции `MDBX_MULTIPLE` могла
приводить к падениям и повреждению структуры БД. Ошибка оставалось не
замеченной из-за специфических условий проявления, которые не
реализовались в тестах.

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

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

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

Исправление свелось к добавлению одной строчки кода, но также были
расширены тесты для покрытия соответствующих сценариев.
2025-03-17 23:28:28 +03:00
Леонид Юрьев (Leonid Yuriev)
db44f4ed71 mdbx-tools: добавление опции -c (concise) в mdbx_dump. 2025-03-17 23:28:16 +03:00
Леонид Юрьев (Leonid Yuriev)
ef9fd1f3fb mdbx-tests: уменьшение кол-ва итераций в extra/crunched-delete для 32-битных сборок во избежания MDBX_MAP_FULL. 2025-03-17 23:27:51 +03:00
Леонид Юрьев (Leonid Yuriev)
2e6d9fd4d4 mdbx++: добавление mdbx::cursor::seek_multiple_samelength(). 2025-03-17 23:27:34 +03:00
Леонид Юрьев (Leonid Yuriev)
83e42d03bb mdbx: костыли для CLANG < 20 при использовании [[аттрибутов]] C23. 2025-03-17 23:27:14 +03:00
Леонид Юрьев (Leonid Yuriev)
dfd265d46f mdbx-tests: существенное расширение extra/cursor-closing. 2025-03-17 23:26:49 +03:00
Леонид Юрьев (Leonid Yuriev)
08d10ad0a1 mdbx-tests: дополнение extra/txn. 2025-03-17 23:26:30 +03:00
Леонид Юрьев (Leonid Yuriev)
8ebedde181 mdbx++: проверка __cpp_concepts >= 202002 для использования концептов C++. 2025-03-17 23:26:18 +03:00
Леонид Юрьев (Leonid Yuriev)
dcf35e5306 mdbx: исправление затенения курсоров во вложенных транзакциях. 2025-03-17 23:25:53 +03:00
Леонид Юрьев (Leonid Yuriev)
aeac971f0b mdbx: переработка проверки курсоров на входе API-функций с добавлением cursor_check(). 2025-03-17 23:25:30 +03:00
Леонид Юрьев (Leonid Yuriev)
6c8047a402 mdbx: переработка mdbx_txn_release_all_cursors_ex(). 2025-03-17 23:20:40 +03:00
Леонид Юрьев (Leonid Yuriev)
438d185250 mdbx++: переформатирование (временно) неиспользуемого кода. 2025-03-17 23:20:28 +03:00
Леонид Юрьев (Leonid Yuriev)
ee6843062d mdbx++: удаление исключения при запросе транзакции у отсоединённого курсора. 2025-03-17 23:20:03 +03:00
Леонид Юрьев (Leonid Yuriev)
70adf71770 mdbx++: добавление inplace_storage_size_rounding в capacity_policy для буферов. 2025-03-17 23:16:30 +03:00
Леонид Юрьев (Leonid Yuriev)
fa2c27fa08 mdbx++: добавление mdbx::cursor_managed::withdraw_handle(). 2025-03-17 23:16:12 +03:00
Леонид Юрьев (Leonid Yuriev)
7a72d1b273 mdbx: корректировка описания MDBX_MVCC_RETARDED и соответствующего сообщения об ошибке. 2025-03-17 23:15:48 +03:00
Леонид Юрьев (Leonid Yuriev)
3e91500fac mdbx: устранение гонки в tbl_setup(MDBX_DUPFIXED | MDBX_INTEGERDUP) при работе в разных потоках.
Проблема была в том, что в случаях фиксированного размера значений
clc.lmin/clc.lmax устанавливались в env->kvs[], а затем корректировались
по актуальному размеру данных в БД. Поэтому при конкурентном вызове из
разных потоков, один поток мог выполнять инициализацию, а второй
прочитать временные/промежуточные значения lmin/lmax.

В результате, при конкурентном старте транзакций в разных потоках при
использовании только-что открытого dbi-хендла, проверка допустимости
длины значения могла заканчиваться ложной ошибкой MDBX_BAD_VALSIZE.
2025-03-17 23:13:26 +03:00
Леонид Юрьев (Leonid Yuriev)
546b48b6eb mdbx: переименование cursor_validate(). 2025-03-17 23:01:30 +03:00
Леонид Юрьев (Leonid Yuriev)
2ffa5cf371 mdbx: добавление MDBX_SEEK_AND_GET_MULTIPLE в API операций курсора. 2025-03-17 22:58:57 +03:00
Леонид Юрьев (Leonid Yuriev)
b546dc69d2 mdbx-doc: doxygen-описания для doubtless-positioning констант. 2025-03-17 22:58:44 +03:00
Леонид Юрьев (Leonid Yuriev)
42706c45a0 mdbx-tests: добавление поддержки опции MDBX_VALIDATION и использование в стохастическом тесте. 2025-03-17 22:58:29 +03:00
Леонид Юрьев (Leonid Yuriev)
8dda33329b mdbx-tests: поддержка значений on/off для опций командной строки. 2025-03-17 22:58:08 +03:00