4847 Commits

Author SHA1 Message Date
Леонид Юрьев (Leonid Yuriev)
584d5c344d mdbx: update ChangeLog. 2025-07-29 15:03:09 +03:00
Леонид Юрьев (Leonid Yuriev)
933565b1b2 mdbx-chk: count and report %-filling histogram of tree(s). 2025-07-29 14:50:47 +03:00
Леонид Юрьев (Leonid Yuriev)
0cc52a3cc3 mdbx-chk: report switching to non-exclusive/accede mode. 2025-07-29 14:50:42 +03:00
Леонид Юрьев (Leonid Yuriev)
457564c498 mdbx-chk: rename internal variables (cosmetics). 2025-07-29 14:50:42 +03:00
Леонид Юрьев (Leonid Yuriev)
3410e28e1f mdbx: fix comment typo. 2025-07-29 14:50:42 +03:00
Леонид Юрьев (Leonid Yuriev)
ecc36a11ec mdbx: report the parent-pgno in an issues during a DB check. 2025-07-28 14:36:47 +03:00
Леонид Юрьев (Leonid Yuriev)
5c6d91f7c8 mdbx: provide the parent-pgno during a tree traversal. 2025-07-28 14:36:47 +03:00
Леонид Юрьев (Leonid Yuriev)
79465dbc7f mdbx: refactor internal walking functions. 2025-07-28 14:36:47 +03:00
Леонид Юрьев (Leonid Yuriev)
d6f397145c mdbx: reorder logging functions. 2025-07-28 14:36:47 +03:00
Леонид Юрьев (Leonid Yuriev)
fb5f7f4f83 mdbx: dbi-related minor changes. 2025-07-27 21:47:12 +03:00
Леонид Юрьев (Leonid Yuriev)
f0e6db59e2
mdbx: update ChangeLog. 2025-07-26 16:12:53 +03:00
Леонид Юрьев (Leonid Yuriev)
2411b88812 mdbx: minor addition to README. 2025-07-26 16:12:05 +03:00
Леонид Юрьев (Leonid Yuriev)
a2547d21af mdbx-tests: random order of a parameterized tests inside the stochastic script. 2025-07-26 14:09:05 +03:00
Леонид Юрьев (Leonid Yuriev)
eef334235e
mdbx: *** using english for commit titles at the request of community ***.
At the request of several non-Russian-speaking developers, it was
decided to return to using English in the commit' brief-headers at least.
2025-07-26 14:06:26 +03:00
Леонид Юрьев (Leonid Yuriev)
0899ea8450 mdbx-tests: актуализация секции cross-qemu в GNUmakefile. 2025-07-25 22:33:18 +03:00
Леонид Юрьев (Leonid Yuriev)
58dd21cf98 mdbx-tests: использование SysV-семафоров при cross-тестах посредством qemu. 2025-07-25 22:33:18 +03:00
Леонид Юрьев (Leonid Yuriev)
0da87b6423 mdbx: ссылки на зеркала в документации. 2025-07-25 14:15:23 +03:00
Леонид Юрьев (Leonid Yuriev)
39326e79bc mdbx: дополнение ChangeLog. 2025-07-20 16:39:58 +03:00
Леонид Юрьев (Leonid Yuriev)
6f49e7dfeb mdbx: переработка ошибок файловых блокировок в API копирования с устранением проблемы на OSX.
На POSIX-платформах внутри API копирования используются файловый
блокировки `fcntl(F_SETLK)` и `flock()`, так как только совместное
использование обеспечивает блокировку на всех платформах и файловых
системах, включая NFS и SMB.

Однако, в зависимости от платформы, версии ядра ОС, типа файловой
системы, а в случае NFS/SMB также от удаленной стороны, используемые
системные файловые блокировки могут не работать или конфликтовать между
собой (в частности на OSX).

Поэтому в этом коммите реализуется более гибкий подход. Если кратко,
то допускается отказ одной из блокировок при успехе другой:

 - При успехе fcntl(F_SETLK) допускается EAGAIN/EWOULDBLOCK и EREMOTEIO от flock(),
   если целевой файл на не-локальной файловой системе, а также на не-Linux платформах,
   где одновременная блокировка может быть не разрешена fcntl(F_SETLK) и flock().

 - При успехе flock() допускается ENOTSUP и REMOTEIO от fcntl(F_SETLK),
   если целевой файл на не-локальной файловой системе.
2025-07-20 16:21:15 +03:00
Леонид Юрьев (Leonid Yuriev)
43f3deee00 mdbx: условное определение MDBX_ENOSYS как ENOTSUP/ENOSYS. 2025-07-20 16:21:15 +03:00
Леонид Юрьев (Leonid Yuriev)
65b9b5ec6d mdbx-tests: дополнение extra/dbi. 2025-07-19 21:18:50 +03:00
Леонид Юрьев (Leonid Yuriev)
0d73718000 mdbx: устранение возможности неверного возврата MDBX_DBS_FULL при открытии DBI-дескрипторов.
В lockfree-пути открытия DBI-дескрипторов, при просмотре уже открытых
таблиц, пропускались элементы отличающиеся не только по имени, но также
и при несовпадении запрашиваемых флагов и актуальных флагов уже открытой
таблицы.

Если при этом уже было достигнуто (ранее заданное) максимальное
количество открытых DBI-дескрипторов, то возвращалась ошибка
`MDBX_DBS_FULL`, в том числе в ситуациях когда результат должен быть
другим.

Спасибо [Артёму Воротникову](https://github.com/vorot93) за сообщение о проблеме!
2025-07-19 21:18:43 +03:00
Леонид Юрьев (Leonid Yuriev)
8ebdc6d79b mdbx: переделка обновления/загрузки флагов MainDB с выделением latch_maindb_locked().
В новом коде:
 - нет необходимости в захвате глобальной txn-блокироки;
 - меньше вероятность коллизий/гонок.
2025-07-19 21:18:43 +03:00
Леонид Юрьев (Leonid Yuriev)
9c6eed615a mdbx-tests: дополнение extra/txn сценарием провоцирующим гонку за атрибуты MainDB-DBI. 2025-07-19 21:18:43 +03:00
Леонид Юрьев (Leonid Yuriev)
f5e3cfd533 mdbx: устранение неожиданной ошибки MDBX_BAD_DBI при гонках внутри процесса.
Запуск читающих и пишущих транзакций взаимно не блокируется. Однако,
внутри одного процесса, DBI-хендлы и атрибуты таблиц используются
совместно всеми транзакциями (в рамках экземпляра среды работы с БД).
Поэтому после изменения атрибутов таблиц, в том числе при первоначальном
чтении актуальных атрибутов MainDB, может возникать состояние гонок при
одновременном старте нескольких транзакций.

Этим коммитом исправляются недочеты в обработке ситуации таких гонок,
из-за чего могла возвращается неожиданная (с точки зрения пользователя)
ошибка `MDBX_BAD_DBI`.

Формально ошибка присутствовала начиная с коммита `e6af7d7c53428ca2892bcbf7eec1c2acee06fd44` от 2023-11-05.
Однако, до этого (исторически, как было унаследовано от LMDB)
отсутствовал какой-либо контроль смены атрибутов MainDB во время старта
и/или работы транзакций. Поэтому вместо возврата каких-либо ошибок
подобные состояние гонок и/или связанные с изменением атрибутов MainDB
оставались необработанными/незамеченными, либо проявлялись как редкие
неуловимые сбои пользовательских приложений.

Спасибо [Артёму Воротникову](https://github.com/vorot93) за сообщение о проблеме!
2025-07-19 21:18:41 +03:00
Леонид Юрьев (Leonid Yuriev)
e9d47291b0 mdbx: косметический рефакторинг txn_renew(). 2025-07-15 19:01:17 +03:00
Леонид Юрьев (Leonid Yuriev)
0c70b548e8 mdbx-make: добавление цели check-posix-locking для CI-тестов всех вариантов POSIX-блокировок. 2025-07-14 21:06:39 +03:00
Леонид Юрьев (Leonid Yuriev)
b2a7942f8d mdbx-cmake: переформатирование свойств тестов для удобочитаемости. 2025-07-14 17:04:19 +03:00
Леонид Юрьев (Leonid Yuriev)
2b115069c1 mdbx: исправление resurrect-after-fork при использовании SysV-семафоров (MDBX_LOCKING=5).
Ошибка/недоработка была с первой реализации resurrect-after-fork в
ноябре 2023, но оставалась не замеченной из-за отсутствия
CI-тестирования на платформе OSX/Mac (где нет поддержки разделяемых
мьютексов).
2025-07-14 17:03:38 +03:00
Леонид Юрьев (Leonid Yuriev)
90a4e1847d mdbx: удаление лишней/отладочной assert-проверки внутри cursor_put(). 2025-07-14 00:44:35 +03:00
Леонид Юрьев (Leonid Yuriev)
2a41db6b67 mdbx-windows: исправление assert-проверок внутри txn_lock()/txn_unlock(). 2025-07-14 00:41:48 +03:00
Leonid Yuriev
8fba09ceb6 mdbx: исправление опечатки в отладочном логировании. 2025-07-14 00:40:40 +03:00
Леонид Юрьев (Leonid Yuriev)
62f4986731 mdbx-make: изменение кол-ва внутренних итераций прогона тестов для уменьшения затрат на CI. 2025-07-12 20:53:04 +03:00
Леонид Юрьев (Leonid Yuriev)
1b1bec2b30 mdbx: отключение MSVC предупреждений C5286 и C5287. 2025-07-11 10:44:17 +03:00
Leonid Yuriev
c7b119af68 mdbx: исправление сравнения знакового и беззнакового значений. 2025-07-11 10:36:32 +03:00
Леонид Юрьев (Leonid Yuriev)
57ffdf6cd9 mdbx-tests: дополнение cmake-тестов сценариями запуска mdbx_copy. 2025-07-11 10:36:09 +03:00
Леонид Юрьев (Leonid Yuriev)
e28f484947 mdbx: удаление лишних/вредных assert-проверок внутри txn_lock()/txn_unlock(). 2025-07-11 10:36:09 +03:00
Леонид Юрьев (Leonid Yuriev)
53c14bc92c mdbx-tools: добавление опции -f в утилиту mdbx_copy. 2025-07-11 10:36:09 +03:00
Леонид Юрьев (Leonid Yuriev)
4bb69a1c8f mdbx-tests: простейшее тестирование MDBX_CP_OVERWRITE. 2025-07-11 10:36:09 +03:00
Леонид Юрьев (Leonid Yuriev)
ba6ce86d5f mdbx: добавление опции MDBX_CP_OVERWRITE в API копирования БД. 2025-07-11 10:36:09 +03:00
Леонид Юрьев (Leonid Yuriev)
fa73f44ff0 mdbx: дополнение ChangeLog. 2025-06-28 10:48:11 +03:00
Леонид Юрьев (Leonid Yuriev)
79b33ba8fd mdbx: устранение предупреждения lcc-1.29 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
a600c2a7a2 mdbx: устранение вероятности ошибки MDBX_ENODATA при поиске в GC. 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
10bf63eb9a mdbx: замена части PNL-макросов функциями. 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
9020ea9d6c mdbx: допущение нехватки страниц при ранней/не-отложенной очистке GC (продолжение). 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
31d5ab62bf mdbx-tests: остановка/отстрел дочерних процессов с ожиданием.
Основная цель = обеспечить формирование логов без обрезания хвостов, в том числе при использовании дублирования (tee) и компрессии (lz4/gzip).
2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
ecf5acfff0 mdbx: изоляция txl-списков от кода PNL. 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
bb37c93dd5 mdbx: ранняя/не-отложенная очистка GC (начало). 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
40af0565c5 mdbx-tests: явное NUMA-распределение в battery/tmux-тесте. 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
0359eca01c mdbx-tests: поддержка опции --numa # для привязки стохастического теста к NUMA-узлу. 2025-06-28 00:34:04 +03:00