Commit Graph

4196 Commits

Author SHA1 Message Date
Леонид Юрьев (Leonid Yuriev)
94936fd4c9 mdbx-testing: добавление теста пересоздания таблицы с другими флагами/опциями. 2024-08-22 00:04:56 +03:00
Леонид Юрьев (Leonid Yuriev)
a17b190dc8 mdbx: обновленный clang-format (косметика). 2024-08-22 00:04:41 +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
Alexey Sharov
77a35608f6 mdbx-testing: увеличение размера БД до 32Гб (вдвое) в "tmux-батарейном" тесте. 2024-08-13 23:17:19 +03:00
Леонид Юрьев (Leonid Yuriev)
7511f480a4 mdbx-testing: уменьшение мощности "tmux-батарейного" теста вдвое (под "более типовую" виртуалку). 2024-08-13 23:15:34 +03:00
Леонид Юрьев (Leonid Yuriev)
0c9f531c72 mdbx-testing: добавление опции --db-upto-gb в стохастический скрипт. 2024-08-13 23:14:49 +03:00
Леонид Юрьев (Leonid Yuriev)
f477fa13e0 mdbx-testing: включение ulimit -c unliminted в стохастическом скрипте. 2024-08-13 23:13:58 +03:00
Леонид Юрьев (Leonid Yuriev)
b054a69e72 mdbx: исправление и рефакторинг цикла чтения мета-страниц при старте читающих транзакций.
Сценарий достаточно запутанный/сложный.
2024-08-11 09:44:32 +03:00
Леонид Юрьев (Leonid Yuriev)
aca692212f mdbx-testing: исправление упущенной опции --extra в battery-tmux. 2024-08-11 09:44:32 +03:00
Леонид Юрьев (Leonid Yuriev)
8cc5e8c262 mdbx: дополнение ChangeLog. 2024-08-08 00:17:09 +03:00
Леонид Юрьев (Leonid Yuriev)
edfa526138 mdbx: устранение возможности SIGSEGV внутри coherency_check().
Падение происходило в случае когда:

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

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

Похоже что в ходе какого-то рефакторинга потерялась соответствующая
проверка. Этот коммит добавляет её как временное решение, до переноса
проверки «когерентности» после изменения размера отображения (добавлено в
TODO).
2024-08-07 17:38:53 +03:00
Леонид Юрьев (Leonid Yuriev)
7bff3b3df6 mdbx: корректировка имен и ссылок в ChangeLog. 2024-08-03 15:14:23 +03:00
Леонид Юрьев (Leonid Yuriev)
7b09ecd9b7 mdbx-doc: дополнение описания mdbx_env_copy() и родственных функций. 2024-08-03 15:14:23 +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)
dd5329c164 mdbx-doc: корректировка/исправление разметки Doxygen. 2024-08-03 12:50:44 +03:00
Леонид Юрьев (Leonid Yuriev)
dd0ee3f278 mdbx: дополнение ChangeLog. 2024-08-03 00:30:06 +03:00
Леонид Юрьев (Leonid Yuriev)
ee8c9225d6 mdbx-testing: повтор сценария с mdbx_txn_copy2pathname() до получения успешной копии для предотвращения сбоев test/CMakeLists.txt. 2024-08-02 23:33:22 +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)
4c0290b576 mdbx-testing: добавление mdbx_txn_copy2pathname() в тестовый сценарий. 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)
f34ebc853d mdbx-testing: добавление mdbx_dbi_sequence() в jitter-сценарий. 2024-08-02 01:11:09 +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)
7873118cdb mdbx++: добавление (рас)парковки транзакций чтения в C++ API. 2024-07-24 19:58:02 +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)
485d6d1f50 mdbx: корректировка/актуализация ChangeLog для v0.13.x 2024-07-23 16:15:05 +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)
ad0ba7a661 mdbx: добавление секции о v0.12.11 в ChangeLog. 2024-07-23 14:20:57 +03:00
Леонид Юрьев (Leonid Yuriev)
0a36ed3ca1 mdbx: исправление опечатки в имени ior_sgv_gap4terminator. 2024-07-21 22:27:05 +03:00
Леонид Юрьев (Leonid Yuriev)
6941ec17bc mdbx: обновление ChangeLog. 2024-07-20 16:43:45 +03:00
Леонид Юрьев (Leonid Yuriev)
6b2b15ebc8 mdbx: допускаем лишние/устаревшие флаги для GC/FreeDB для старых БД. 2024-07-20 14:05:16 +03:00
Леонид Юрьев (Leonid Yuriev)
5c643f72b5 mdbx-testing: уменьшение длительности/глубины тестирования extra/crunched_delete на MacOS. 2024-07-20 13:19:25 +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)
f20addd7fc mdbx-doc: доработка doxygen-ссылок. 2024-07-13 17:03:06 +03:00
Леонид Юрьев (Leonid Yuriev)
8a04337e79 mdbx: корректировка ChangeLog. 2024-07-13 16:15:21 +03:00
Леонид Юрьев (Leonid Yuriev)
8e8ac09e14 mdbx: корректировка mdbx_enumerate_subdb(). 2024-07-13 16:13:11 +03:00