4834 Commits

Author SHA1 Message Date
Леонид Юрьев (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
Леонид Юрьев (Leonid Yuriev)
d461ba86c7 mdbx++: несущественная корректировка конструкторов mdbx::buffer::silo. 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
b49cd49c68 mdbx: интенсификация слияния страниц изменением порога по-умолчанию с 25% до 33%.
Ранее две страницы объединялись если были заполнены на 25% или менее, с образованием страницы заполненной на 50% или менее.

Теперь порог по-умолчанию установлен в 33%, что при объединении будет порождать страницу заполненную на 66%.
2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
75131c082b mdbx: добавление rkl_destructive_merge() и унификация порядка dst/src аргументов rkl_merge(). 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
3462bc116a mdbx: удаление known_continuous аргумента rkl_push(). 2025-06-28 00:34:04 +03:00
Леонид Юрьев (Leonid Yuriev)
b3329fddf2
mdbx: исправление опечатки MDBX_ENOMEM.
Вместо `MDBX_ENOMEM` был использован идентификатор `ENOMEM`,
что могло ломать сборку на не-POSIX/Windows платформах,
в зависимости от конфигурации и/или версии SDK.
2025-06-01 11:26:17 +03:00
Леонид Юрьев (Leonid Yuriev)
8b4ec09d08 mdbx: исправление имён параметров в прототипе rkl_destructive_move(). 2025-05-29 22:56:34 +03:00
Леонид Юрьев (Leonid Yuriev)
ecbffc65f4
mdbx: дополнение ChangeLog. 2025-05-21 14:13:36 +03:00
Леонид Юрьев (Leonid Yuriev)
e03b8e1227 mdbx: добавление ignore_enosys_and_einval() и её использование для отказа от OFD-блокировок. 2025-05-20 13:37:54 +03:00
Леонид Юрьев (Leonid Yuriev)
c88c51d33c mdbx: разделение ignore_enosys() и ignore_enosys_and_eagain(). 2025-05-20 13:37:54 +03:00
Леонид Юрьев (Leonid Yuriev)
ef82fea032 mdbx: избавление от memset() внутри lck_op(). 2025-05-20 13:37:54 +03:00
Леонид Юрьев (Leonid Yuriev)
f82cf6a4b3 mdbx: перемещение и доработка проверки _FILE_OFFSET_BITS для Android. 2025-05-20 13:37:54 +03:00
Леонид Юрьев (Leonid Yuriev)
60c0483987 mdbx-tests: устранение бестолковых предупреждений MSVC. 2025-05-16 00:50:55 +03:00
Леонид Юрьев (Leonid Yuriev)
9da03deac0 mdbx: исправление пропущенного const (косметика). 2025-05-16 00:08:51 +03:00