2449 Commits

Author SHA1 Message Date
Леонид Юрьев (Leonid Yuriev)
e035f102ab mdbx: устранение сбоя аудита таблиц при инвалидации dbi-хендла вследствие отмены вложенной транзакции. 2025-03-02 00:10:56 +03:00
Леонид Юрьев (Leonid Yuriev)
1240ed2ba3 mdbx: исправление оплошности в спецификации формата при логировании имен таблиц. 2025-03-02 00:10:56 +03:00
Леонид Юрьев (Leonid Yuriev)
6ca63b46d8 mdbx: уменьшение в 16 раз предлагаемого размера БД для устранения проблем Valgrind/ASAN. 2025-03-02 00:10:56 +03:00
Леонид Юрьев (Leonid Yuriev)
9b31c517e6 mdbx: проверяем выравнивание размера БД на юнит выделения памяти, а не на размер страницы.
Теоретически до этого коммита могла быть некоторая неувязка:
 - при открытии БД с размером страницы 4K на Windows (где размер секции кратен 64K) в режиме read-only,
 - после того как БД использовалась на POSIX (где размер отображения кратен размеру системной страницы).

Ранее ошибка могла возвращаться со стороны системы (например INVALID_PARAMETER) и по ней крайне сложно было понять в чем дело.
Теперь же будет логирование ошибки и возврат MDBX_WANNA_RECOVERY.
2025-02-20 23:11:28 +03:00
Леонид Юрьев (Leonid Yuriev)
54d8c0d290 mdbx: переработка проверка размера файла БД при открытии.
Переработка 05cdf9d202b14ac09c801c7893e65271fa27f378. У предыдущего
варианта был недостаток, при необходимости выдачи предупреждения
и открытии БД с изменением геометрии, предупреждение не выдавалось,
что может затруднять анализ/разбор проблемных ситуаций.
2025-02-20 23:11:28 +03:00
Леонид Юрьев (Leonid Yuriev)
05cdf9d202 mdbx: устранение излишнего предупреждения при смене размера БД во время открытия.
Изменение геометрии (увеличение размера) больших БД может быть не
возможно после их открытия вследствие системных ограничений (отсутствия
свободного адресного пространства).

Поэтому API предусматривает возможность запросить изменение
геометрии/размера БД перед её открытием. В этом сценарии ранее могло
выдаваться лишнее/ненужное предупреждение о несоответствии файла БД
новому размеру. Теперь этот недостаток исправлен.

Спасибо Илье Михееву (Erigon) за сообщение об этом недочете.
2025-02-19 23:22:18 +03:00
Леонид Юрьев (Leonid Yuriev)
4730abe3e5 mdbx: корректировка излишне строгого условия в assert-проверке внутри recalculate_subpage_thresholds(). 2025-02-11 14:01:10 +03:00
Леонид Юрьев (Leonid Yuriev)
cb8eec6d11 mdbx: устранение регресса вероятности SIGSEGV при вытеснении/spilling страниц.
Ошибка внесена коммитом `a6f7d74a32a3cbcc310916a624a31302dbebfa07` от
2024-03-07 и присутствует в выпусках v0.13.1, v0.13.2, v0.13.3. Проблема
оставалась незамеченной из-за специфических условий и низкой вероятности
проявления.

Суть ошибки:

- функция cursor_touch() подготавливает стек страниц курсора к внесению
  изменений, при этом все страницы в стеке (от корневой до листовой
  в текущей позиции курсора) должны стать доступными для модификации.

- микрооптимизация добавленная коммитом пропускала обход стека, если
  корневая страница уже доступна для модификации, но это
  допустимо/корректно только при отсутствии в стеке вытесненных/spilled
  страниц.

- если же складывалась ситуация когда в стека была вытесненная
  некорневая страница, то она так и оставалась недоступной для записи и
  при попытке её изменения возникал SIGSEGV.
2025-01-27 10:09:04 +03:00
Леонид Юрьев (Leonid Yuriev)
340bd080c9 mdbx: исправление опечатки в cursor_touch().
При переделке курсоров было пропущено отрицание в условии, при оценке
кол-ва страниц, которые могут потребоваться для выполнения операции.

В текущем понимании ошибка не приводила к каким-либо проблемам, ибо
оценка делает по верхней границе с существенным запасом, а в худшем
случае это могло приводить к прерыванию транзакции из-за достижения
ограничения на кол-во грязных страниц.
2025-01-26 16:37:00 +03:00
Леонид Юрьев (Leonid Yuriev)
7074b94b2e mdbx: упрощение gcu_loose(). 2025-01-26 16:36:55 +03:00
Леонид Юрьев (Leonid Yuriev)
beb5a81d12 mdbx-doc: обновление номера версии и даты в заголовках man-страниц. 2025-01-17 18:29:15 +03:00
Леонид Юрьев (Leonid Yuriev)
56d1dbef45 mdbx: обновление года в ©. 2025-01-15 19:36:07 +03:00
Леонид Юрьев (Leonid Yuriev)
2c3b36da64 mdbx: рефакторинг txn_renew() транзакций с вычленением txn_basal_start(). 2025-01-15 00:50:57 +03:00
Леонид Юрьев (Leonid Yuriev)
314b8ce1f0 mdbx: переименование (косметика). 2025-01-15 00:50:57 +03:00
Леонид Юрьев (Leonid Yuriev)
7e772114bc mdbx: рефакторинг читающих транзакций в вычленением txn_ro_start(), txn_ro_seize(), txn_ro_slot(). 2025-01-15 00:50:36 +03:00
Леонид Юрьев (Leonid Yuriev)
0accf98ff7 mdbx: добавление опции сборки MDBX_ENABLE_NON_READONLY_EXPORT и логирование соответствующих ситуаций.
Закрывает [запрос](https://gitflic.ru/project/erthink/libmdbx/issue/16).
2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
950db52fe8 mdbx: выделение basal/ro/nested txn-функций в отдельные файлы (без изменений кода). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
380385c1db mdbx: упрощение выхода по not-found пути из cursor_seek(). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
10e7e5c899 mdbx: рефакторинг mdbx_txn_commit_ex() 5/5 (вычленение txn_basal_end()). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
6d92a778a5 mdbx: оформление опции сборки MDBX_NOSUCCESS_PURE_COMMIT (выключено по умолчанию). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
c60f6afe5f mdbx: упрощение/выпрямление/рефакторинг txn_end() и затронутых зависимостей. 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
a5bb555db3 mdbx: рефакторинг mdbx_txn_commit_ex() 4/5 (вычленение txn_basal_commit()). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
b9b784c18e mdbx: рефакторинг mdbx_txn_commit_ex() 3/5 (вычленение txn_nested_join()). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
c6cd482ea0 mdbx: рефакторинг mdbx_txn_commit_ex() 2/5 (struct commit_timestamp, latency_init/gcprof/done()). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
2b9401e372 mdbx: рефакторинг mdbx_txn_commit_ex() 1/5 (переменование локальных timestamp-переменных). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
6fe7baa1b8 mdbx: упрощение mdbx_txn_break(). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
1e5fef2c76 mdbx: рефакторинг txn-api с выносом отдельных txn-функций. 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
0a4156fe6f mdbx: перенос check_env() из txn_end() в функции txn-api. 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
a89d418c91 mdbx: рефакторинг mdbx_txn_straggler() с добавлением проверки env. 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
585ccdf716 mdbx: изменение TXN_END_NAMES. 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
81e2623a54 mdbx: рефакторинг затенения и завершения курсоров, с удалением TXN_END_EOTDONE и добавлением txn_may_have_cursors. 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
b681b59434 mdbx: рефакторинг/вычленение txn_basal_create/destroy(). 2025-01-14 13:26:54 +03:00
Леонид Юрьев (Leonid Yuriev)
a994a9bbcc mdbx: использование MDBX_GET_BOTH для проверки наличия добавляемого значения в таблице. 2025-01-13 16:55:41 +03:00
Леонид Юрьев (Leonid Yuriev)
c751977bf7 mdbx-tools: добавление логирования ошибок/предупреждений по все утилиты. 2025-01-12 14:38:20 +03:00
Леонид Юрьев (Leonid Yuriev)
e5fe279632 mdbx: логирование ошибок при открытии lck-файла. 2025-01-12 14:30:39 +03:00
Леонид Юрьев (Leonid Yuriev)
8408a2eed3 mdbx: добавление разделителя между MDBX_BUILD_FLAGS_CONFIG и MDBX_BUILD_FLAGS (косметика). 2025-01-12 11:54:24 +03:00
Леонид Юрьев (Leonid Yuriev)
0297136648 mdbx: улучшение авто-переключения в режим without-lck при открытии БД на read-only-носителе. 2025-01-12 02:58:59 +03:00
Леонид Юрьев (Leonid Yuriev)
92a49c7c8c mdbx: устранение риска потери/перезаписи errno при неожиданных ошибках в close(). 2025-01-12 02:58:59 +03:00
Леонид Юрьев (Leonid Yuriev)
b75e16f4f8 mdbx: устранение null-dereference регресса в режиме readonly-without-lck. 2025-01-12 02:58:59 +03:00
Леонид Юрьев (Leonid Yuriev)
9c8f90b713 mdbx: доработка эвристик для выбора/подстройки default-значений в mdbx_env_set_geometry(). 2025-01-11 02:30:53 +03:00
Леонид Юрьев (Leonid Yuriev)
b00e8ea13f mdbx: использование txl_contain() в audit(). 2025-01-08 13:29:10 +03:00
Леонид Юрьев (Leonid Yuriev)
faa9753d2d mdbx: перемещение и корректировка комментария размечающего внутренние поля пишущей транзакции. 2025-01-05 14:44:00 +03:00
Леонид Юрьев (Leonid Yuriev)
5ba257fafc mdbx: добавление упущенного static для txl_reserve(). 2025-01-05 14:44:00 +03:00
Леонид Юрьев (Leonid Yuriev)
bad6e3c2e2 mdbx: очистка флажка ENV_TXKEY внутри rthc_dtor().
На штатную работу это никак не влияет, но немного облегчит разбор
ситуаций когда глобальный конструктор не вызывается, либо делается
попытка вызвать его дважды (из-за ошибок rtc/libc, etc).
2025-01-05 14:40:56 +03:00
Леонид Юрьев (Leonid Yuriev)
dc98f06d2c mdbx: логирование и возврат MDBX_INCOMPATIBLE при попытке запуска вложенных транзакций в режиме MDBX_WRITEMAP. 2025-01-03 22:14:00 +03:00
Леонид Юрьев (Leonid Yuriev)
1bf008ac16 mdbx: доработка контроля потока-владельца транзакции.
1. Теперь допускается commit/abort вложенных транзакций из любого треда в режиме MDBX_NOSTICKYTHREADS.

2. Более наглядные/явные проверки без зависимости от больше/меньше.
Одна проверка внутри check_txn() для всех основных случаев (bad_bits != 0) и две проверки для abort/reset/break (bad_bits == 0).

+-------------------------------------------------------------------------------------------------------+
|          Три анализируемых txn->flags       |         Проверка txn->owner == osal_thread_self()       |
+-----------------+------------+--------------+-----------------------+---------------------------------+
| NOSTICKYTHREADS | TXN_RDONLY | TXN_FINISHED | usual (bad_bits != 0) | abort/reset/break (bad_bits==0) |
|      -          |     -      |     -        |     +                 |         +                       |
|      -          |     -      |     +        |     +                 |         +                       |
|      -          |     +      |     -        |     +                 |         +                       |
|      -          |     +      |     +        |     +                 |         -                       |
|      +          |     -      |     -        |     -                 |         -                       |
|      +          |     -      |     +        |     +                 |         +                       |
|      +          |     +      |     -        |     -                 |         -                       |
|      +          |     +      |     +        |     +                 |         -                       |
+-------------------------------------------------------------------------------------------------------+
2025-01-03 22:12:17 +03:00
Леонид Юрьев (Leonid Yuriev)
1e4e2eb3c8 mdbx-doc: исправление опечатки в комментарии. 2024-12-29 08:42:48 +03:00
Леонид Юрьев (Leonid Yuriev)
df8b15f639 mdbx: const для транзакции в txn_take_gcprof(). 2024-12-28 09:38:08 +03:00
Леонид Юрьев (Leonid Yuriev)
26f6fd351a mdbx: подстройка dirty-pages-limit при старте транзакций. 2024-12-27 09:39:36 +03:00
Леонид Юрьев (Leonid Yuriev)
c8c541649c mdbx: доработка контроля длины ключа внутри cursor_seek().
Ранее проверка внутри cursor_seek() не позволяла искать ключи длиннее чем можно поместить в таблицу,
что при поиске/позиционировании не является ошибкой для ключей переменного размера.
2024-12-27 09:39:36 +03:00