2413 Commits

Author SHA1 Message Date
Леонид Юрьев (Leonid Yuriev)
0306ba8136 mdbx-dist: отключение clang-format в амальгамированном исходном коде. 2024-11-13 19:16:26 +03:00
Леонид Юрьев (Leonid Yuriev)
871bb7f56c mdbx: обмен порядка атрибутов pure|const/maybe_unused в определении функций. 2024-11-13 15:05:26 +03:00
Леонид Юрьев (Leonid Yuriev)
7aa5d9ab97 mdbx++: доработка использования std::experimental::filesystem. 2024-11-13 15:05:26 +03:00
Леонид Юрьев (Leonid Yuriev)
6c56ed97bb mdbx: доработка/исправление и постоянная активация корректирующей обратной связи при обновлении GC.
При обновлении GC, с помещением/возвратом страниц, возникает рекурсивная
зависимость, так как страницы, необходимые для CoW-модификации GC и
размещения списков возвращаемых страниц, берутся/выделяются из этих-же
списков и/или из GC. Эта рекуррентная зависимость разрешается путём
подготовки необходимого запаса страниц и двух-стадийным заполнением
списков, с повторением всего цикла при изменении ситуации/расклада, плюс
применение некоторых эвристик и поправок. Кроме корректной работы,
принципиально важным тут является минимизация количества
повторов/рестартов процесса, в том числе исключение возможности
бесконечного зацикливания.

Существующая реализация многократно/итеративно дорабатывалась. Поэтому
она неплохо обкатана и стабильна, но одновременно сложна и запутана.

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

Этим коммитом добавляется и активируется еще один механизм нацеленный на
улучшение сходимости и минимизацию повторов/рестартов. Суть механизма в
формировании и учета поправки, которая на следующем цикле позволит
учесть все переходные процессы/затраты вне зависимости от их природы, и
этим обеспечить моментальную сходимость.

В текущем понимании, описанный выше недостаток полностью
устраняется/исправляется этим коммитом.
2024-11-07 09:32:27 +03:00
Леонид Юрьев (Leonid Yuriev)
de36d94aca mdbx: предотвращение включения отладки только из-за активации assert-проверок. 2024-11-04 20:42:39 +03:00
Леонид Юрьев (Leonid Yuriev)
3d6e196422 mdbx: исправление отрытия таблицы с пустым/нулевым именем и устранение SIGSEGV при её закрытии. 2024-10-26 09:57:10 +03:00
Леонид Юрьев (Leonid Yuriev)
3049bb87b5 mdbx: доработка mdbx_close_dbi() для возврата MDBX_DANGLING_DBI при попытке закрыть dbi-хендл измененной в транзакции таблицы. 2024-10-26 09:49:22 +03:00
Леонид Юрьев (Leonid Yuriev)
22233b0991 mdbx: перемещение MDBX_NORETURN в прототипах assert-failed для нового clang. 2024-10-10 06:15:17 +03:00
Леонид Юрьев (Leonid Yuriev)
ecf862a4f6 mdbx: доработка osal_jitter() для уменьшения задержек в тестах под Windows. 2024-10-08 18:11:16 +03:00
Leonid Yuriev
bf58ec59f5 mdbx: допущение 4-байтового выравнивания данных MDBX_MULTIPLE для 32-битных сборок.
На 32-битных платформах элементы массивов 64-битных типов могут быть
выравнены на 4-байтовую границу. Из-за этого `mdbx_put(MDBX_MULTIPLE)`
могла возвращать ошибку `MDBX_BAD_VALSIZE`, считая что переданные
пользователем данные не выровнены.
2024-10-08 18:11:12 +03:00
Леонид Юрьев (Leonid Yuriev)
9fa76a56fc mdbx: добавление #ifdef для iPhone. 2024-09-28 08:22:14 +03:00
Леонид Юрьев (Leonid Yuriev)
f738552721 mdbx: возвращение ключа при MDBX_GET_MULTIPLE для единообразия C++ API. 2024-09-18 21:19:27 +03:00
Леонид Юрьев (Leonid Yuriev)
29d0a96818 mdbx: исправление условия внутри assert() в пути обработки MDBX_GET/NEXT/PREV_MULTIPLE. 2024-09-18 21:14:43 +03:00
Леонид Юрьев (Leonid Yuriev)
74f7d13455 mdbx: дополнение отладочного логирования внутри dxb_resize(). 2024-09-14 20:33:35 +03:00
Леонид Юрьев (Leonid Yuriev)
c69f23ed70 mdbx: по-умолчанию MDBX_ENABLE_BIGFOOT=1 вне зависимости от разрядности платформы. 2024-09-09 00:09:17 +03:00
Леонид Юрьев (Leonid Yuriev)
5fc7a6b107
mdbx: выпуск 0.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) <leo@yuriev.ru>
```
2024-08-30 00:01:07 +03:00
Леонид Юрьев (Leonid Yuriev)
b4dcf148c5 mdbx: исправление assert-проверки при попытке создания таблицы с другими флагами/опциями.
Сообщение о проблеме https://t.me/libmdbx/6101
2024-08-22 00:04:41 +03:00
Леонид Юрьев (Leonid Yuriev)
2b5d7ed29a mdbx: вывод номера транзакции при ситуации зацикливания внутри gc_update(). 2024-08-22 00:04:41 +03:00
Леонид Юрьев (Leonid Yuriev)
b054a69e72 mdbx: исправление и рефакторинг цикла чтения мета-страниц при старте читающих транзакций.
Сценарий достаточно запутанный/сложный.
2024-08-11 09:44:32 +03:00
Леонид Юрьев (Leonid Yuriev)
edfa526138 mdbx: устранение возможности SIGSEGV внутри coherency_check().
Падение происходило в случае когда:

 - Некоторый процесс увеличивал размер БД с изменением геометрии (с
   увеличением предельного размера БД и её отображения в ОЗУ), затем
   задействовал страницу из добавленного сегмента в качестве корневой для
   FreeDB/GC и/или MainDB и фиксировал транзакцию.

 - Другой процесс, уже работавший с БД до изменения геометрии первым
   процессом, запускал транзакцию чтения. Падение происходило при проверке
   «когерентности» отображения страниц БД в ОЗУ, при проверке отметок
   модификации внутри корневых страниц, так как в этом случае они были вне
   границ текущего отображения БД в адресном пространстве этого процесса.

Похоже что в ходе какого-то рефакторинга потерялась соответствующая
проверка. Этот коммит добавляет её как временное решение, до переноса
проверки «когерентности» после изменения размера отображения (добавлено в
TODO).
2024-08-07 17:38:53 +03:00
Леонид Юрьев (Leonid Yuriev)
7ed4a551f4 mdbx: внутренние переименования subDb в таблицы. 2024-08-03 15:14:23 +03:00
Леонид Юрьев (Leonid Yuriev)
57e558a57d mdbx: использование термина "таблица" вместо "sub-database". 2024-08-03 15:14:23 +03:00
Леонид Юрьев (Leonid Yuriev)
69f85af242 mdbx-tools: добавление опций -d и -p для mdbx_copy. 2024-08-02 23:33:22 +03:00
Леонид Юрьев (Leonid Yuriev)
9eef3c3541 mdbx-tools: исправление сравнения thread_id для припаркованных транзакций. 2024-08-02 23:33:22 +03:00
Леонид Юрьев (Leonid Yuriev)
a0e278ff00 mdbx++: добавление обработки MDBX_EDEADLK в С++ API. 2024-08-02 23:33:22 +03:00
Леонид Юрьев (Leonid Yuriev)
d21ae28bb9 mdbx++: добавление обработки MDBX_MVCC_RETARDED в C++ API. 2024-08-02 23:33:22 +03:00
Леонид Юрьев (Leonid Yuriev)
b6b126195b mdbx: исправление упущенного TXN_END_EOTDONE при сбое старта читающей транзакции.
Упомянутый флажок отсутствовал в пути разрушения транзакции при ошибке
её запуска. Из-за чего делалась попытка разрушить курсоры, что приводило
к падению отладочных сборок, так как в них соответствующий массив
намеренно заполнен некорректными указателями.
2024-08-02 23:33:22 +03:00
Леонид Юрьев (Leonid Yuriev)
e7488bc30c mdbx: добавление mdbx_txn_copy2fd() и mdbx_txn_copy2pathname(), включая дополнительные опции. 2024-08-02 19:06:14 +03:00
Леонид Юрьев (Leonid Yuriev)
0a9d96affd mdbx: устранения ложной ошибки не-когерентности при использовании mdbx_dbi_sequence(MAIN_DBI) без других изменений.
Временная подпорка для coherency_check(), которую в перспективе
следует заменить вместе с переделкой установки mod_txnid.

Суть проблемы:
 - coherency_check() в качестве одного из критериев "когерентности"
   проверяет условие meta.maindb.mod_txnid == maindb.root->txnid;
 - при обновлении maindb.sequence высталяется DBI_DIRTY, что приведет
   к обновлению meta.maindb.mod_txnid = current_txnid;
 - однако, если в само дерево maindb обновление не вносились и оно
   не пустое, то корневая страницы останеться с прежним txnid и из-за
   этого ложно сработает coherency_check().

Временное (текущее) решение: Принудительно обновляем корневую
страницу в описанной выше ситуации. Это устраняет проблему, но и
не создает рисков регресса.

Итоговое решение, которое предстоит реализовать:
 - изменить семантику установки/обновления mod_txnid, привязав его
   строго к изменению b-tree, но не атрибутов;
 - обновлять mod_txnid при фиксации вложенных транзакций;
 - для dbi-хендлов пользовательских subDb (видимо) можно оставить
   DBI_DIRTY в качестве признака необходимости обновления записи
   subDb в MainDB, при этом взводить DBI_DIRTY вместе с обновлением
   mod_txnid, в том числе при обновлении sequence.
 - для MAIN_DBI при обновлении sequence не следует взводить DBI_DIRTY
   и/или обновлять mod_txnid, а только взводить MDBX_TXN_DIRTY.
 - альтернативно, можно перераспределить флажки-признаки dbi_state,
   чтобы различать состояние dirty-tree и dirty-attributes.
2024-08-01 22:08:26 +03:00
Леонид Юрьев (Leonid Yuriev)
dc7f15c63e mdbx-tools: отображение статусов parked/ousted для транзакций. 2024-07-27 12:47:21 +03:00
Леонид Юрьев (Leonid Yuriev)
9e3a36b74d mdbx: корректировка txn_end() для устранения лишних MDBX_TXN_OUSTED. 2024-07-27 12:44:06 +03:00
Леонид Юрьев (Leonid Yuriev)
2e7d325cf1 mdbx: добавление поддержки MDBX_OUSTED в mdbx_strerror() и C++ API. 2024-07-24 15:57:55 +03:00
Леонид Юрьев (Leonid Yuriev)
cb743d44fc mdbx: новый/поправленный clang-format. 2024-07-24 11:27:41 +03:00
Леонид Юрьев (Leonid Yuriev)
a430b3b288 mdbx: исправление опечатки 0x%u в логировании. 2024-07-24 11:22:59 +03:00
Леонид Юрьев (Leonid Yuriev)
69aa9e0fe1 mdbx: устранение лишней итерации внутри tree_rebalance().
Допускаем итерацию с не-вовлечением еще не-измененных страниц,
только когда страницы для объединения доступны справа и слева,

Т.е. допускаем итерацию для выбора лучшей альтернативы (справа или слева),
и избегаем этой итерации когда альтернативы нет.
2024-07-23 16:07:27 +03:00
Леонид Юрьев (Leonid Yuriev)
9309aa7e12 mdbx: уточнение комментариев в коде (косметика). 2024-07-23 15:58:59 +03:00
Леонид Юрьев (Leonid Yuriev)
0a36ed3ca1 mdbx: исправление опечатки в имени ior_sgv_gap4terminator. 2024-07-21 22:27:05 +03:00
Леонид Юрьев (Leonid Yuriev)
6b2b15ebc8 mdbx: допускаем лишние/устаревшие флаги для GC/FreeDB для старых БД. 2024-07-20 14:05:16 +03:00
Леонид Юрьев (Leonid Yuriev)
9d9a19ae17 mdbx: форматирование/пробелы/косметика. 2024-07-20 13:15:27 +03:00
Леонид Юрьев (Leonid Yuriev)
b1cc8b2e9f mdbx-windows: исправление нарезки FILE_SEGMENT_ELEMENT.
Ошибка слишком грубая.
Похоже при переработке I/O под Windows при `git pull --rebase` потерялся коммит.

К повреждению БД проблема не приводила, так как сбой происходил во время записи данных с возвратом ERROR_INVALID_PARAMETER из системного вызова.
2024-07-20 13:15:21 +03:00
Леонид Юрьев (Leonid Yuriev)
c46270ec56 mdbx-windows: исправление падения при логировании ошибки WriteFileGather(). 2024-07-20 13:15:21 +03:00
Леонид Юрьев (Leonid Yuriev)
7dee88e27f mdbx-test: вывод кадров стека для решения проблем Windows. 2024-07-18 20:57:10 +03:00
Леонид Юрьев (Leonid Yuriev)
242ebefdb7 mdbx-windows: добавление потерянного #include <wincrypt.h>. 2024-07-14 23:42:24 +03:00
Леонид Юрьев (Leonid Yuriev)
8e8ac09e14 mdbx: корректировка mdbx_enumerate_subdb(). 2024-07-13 16:13:11 +03:00
Леонид Юрьев (Leonid Yuriev)
32df0ad1eb mdbx: устранение регресса SIGSEGV при открытии БД с измененным размером страницы. 2024-07-12 11:43:12 +03:00
Леонид Юрьев (Leonid Yuriev)
ec0ada7b8c mdbx: парковка читающих транзакций. 2024-07-12 01:05:56 +03:00
Леонид Юрьев (Leonid Yuriev)
fe31958d46 mdbx: добавление UUID для идентификации БД. 2024-07-10 22:33:46 +03:00
Леонид Юрьев (Leonid Yuriev)
319753661a mdbx: рефакторинг coherency_check_written(). 2024-07-05 22:00:05 +03:00
Леонид Юрьев (Leonid Yuriev)
9acbe88566 mdbx: добавление mdbx_enumerate_subdb(). 2024-07-05 00:25:28 +03:00
Леонид Юрьев (Leonid Yuriev)
49c6e14b30 mdbx++: расширение API методами принимающими имена subDb через mdbx::slice. 2024-07-04 23:20:37 +03:00