Леонид Юрьев (Leonid Yuriev)
603ce05435
mdbx: исправление vlen_min для режима dupfixed.
2024-02-28 20:12:38 +03:00
Леонид Юрьев (Leonid Yuriev)
fbc83dd069
mdbx: исправление ложной ошибки MDBX_CORRUPTED (-30796)
в сценарии "odd dupfixed".
...
Повреждение БД и/или потери данных не происходило, проблема лишь в
возврате ложной ошибки.
Благодарю пользователя/разработчика @Dvirsw (https://t.me/Dvirsw ) за
сообщения о проблеме и предоставление минимального/оптимального сценария
воспроизведения.
--
Проблема была из-за излишнего условия при контроле внутренего поля
mp_upper в ходе проверки структуры страниц БД.
Поле mp_upper указывает на нижнуюю границу заполнения страницы от конца
к началу. Вследствие того, что значения ключей выравниваетня на четную
границу, это поле четно во всех случаях за исключением LEAF2-страницы
(листовая страница вложенного дерева для множественных значений
финсированной/одинаковой длины одного ключа), на которой размещено
нечетное количество значений нечетной длины.
Ошибка не проявлялась в большинстве случаев (в том числе в
стохастических тестах), так как штатно лишняя проверка производилась
только при чтении страницы и перебалансировке ключей, но не при каждом
добавлении значения. Тем не менее, сценарии тестов требуют
доработки/расширения для явного добавления нечетных dupfixed-сценариев.
2024-02-28 20:12:38 +03:00
Леонид Юрьев (Leonid Yuriev)
72332a8f9e
mdbx: устранение несущественного замечания Coverity.
2023-12-08 15:09:01 +03:00
Леонид Юрьев (Leonid Yuriev)
6b72d88fde
mdbx: исправление внутреннего регресса lck_serize_rc в сценарии повторного открытия БД одним процессом.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
4c139b3619
mdbx: устранение внутреннего регресса проверки состояние внутри транзакции.
...
После f0d523c507042cc70eeeb690778c9b2be6a8b33f, при использовании
добавленного API блокировок, возможно ложно-положительное определение
состояние "внутри транзакции".
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
169e69c52e
mdbx: подстройка rp_augment_limit в зависимости от gc_time_limit.
...
Когда rp_augment_limit не задан пользователем посредством
`MDBX_opt_rp_augment_limit`, то как и ранее он подстраивается в
зависимости от текущего размера БД (актуального кол-ва страниц).
Теперь-же авто-устанавливаемое значение rp_augment_limit вычисляется
обратно-пропорционально `MDBX_opt_gc_time_limit`:
- Если gc_time_limit == 0, то rp_augment_limit устанавливается в 1/3 от
общего кол-ва страниц БД, но не меньше рационального минимума.
Это соответствует прежнему поведению и обеспечивает достаточно глубокую
переработку GC во всех не-экстремальных сценариях.
- При gc_time_limit >= 16_секунд
rp_augment_limit устанавливается в минимальное значение.
- Когда 0 < gc_time_limit < 16_секунд
rp_augment_limit устанавливается между минимумом и 1/3 от размера БД
пропорционально остатку gc_time_limit до 16 секунд.
Соответственно, при больших значениях gc_time_limit, выбирается меньшее
значение rp_augment_limit, и контроль глубины переработки GC
ограничивается в основном по-времени.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
eeec44f56d
mdbx: добавление MDBX_opt_gc_time_limit.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
508cf83c32
mdbx: исправление несущественной опечатки в комментарии.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
eb90ec6192
mdbx: новый размер MDBX_opt_rp_augment_limit по умолчанию в 1/3 от текущего кол-ва страниц в БД.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
349759648d
mdbx: правка rthc_afterfork()
для Valgrind.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
43dbf8ec4f
mdbx: правка txn_valgrind()
для случая resurrect-after-fork.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
be8428257d
mdbx++: переделка поддержки base58 по RFC-draft.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
1f2ff07796
mdbx++: переработка/исправление to_hex()
.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
55142d8d6f
mdbx++: добавление txn::commit_embark_read()
.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
25015c54e1
mdbx: обещанное "doubtless" API для позиционирования курсоров.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
5cf6542fa0
mdbx: добавление mdbx_cursor_scan_from()
в API.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
bc562d5c06
mdbx: добавление mdbx_cursor_scan()
в API.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
ed59ad22c6
mdbx: добавление mdbx_cursor_on_first/last_dup()
в API.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
eee3e6eb6b
mdbx++: добавление compare_positions()
для курсоров.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
adcbb39379
mdbx: добавление mdbx_cursor_compare()
в API.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
10abf73191
mdbx: рефакторинг и микро-оптимизация cursor_next|_prev()
для dupsort-узлов.
...
- меньше сравнений и переходов.
- вложенный курсор всегда сбрасывается/очищается при переходе с dupsort-узла.
2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
8d67d23224
mdbx: исправление несущественной опечатки в комментарии.
2023-11-28 21:45:41 +03:00
Леонид Юрьев (Leonid Yuriev)
4a7a2034c0
mdbx: новый размер MDBX_opt_rp_augment_limit по умолчанию в 1/3 от текущего кол-ва страниц в БД.
2023-11-28 21:45:21 +03:00
Леонид Юрьев (Leonid Yuriev)
1277fe965d
mdbx++: переделка поддержки base58 по RFC-draft (backport).
2023-11-28 09:36:10 +03:00
Леонид Юрьев (Leonid Yuriev)
7fc6a1b658
mdbx++: переработка/исправление to_hex()
(backport).
2023-11-28 01:18:24 +03:00
Леонид Юрьев (Leonid Yuriev)
6e4473777e
mdbx: проверка pid только для запроса активной env (backport).
2023-11-28 01:10:23 +03:00
Леонид Юрьев (Leonid Yuriev)
d6a79a9c5f
mdbx++: переименование slice::as_intXX()
в slice::as_intXX_adapt()
и добавление slice::as_intXX()
.
2023-11-26 16:56:34 +03:00
Леонид Юрьев (Leonid Yuriev)
7f21515940
mdbx: микро-оптимизация cursor_set()
.
...
Чуть меньше сравнений и переходов.
2023-11-26 12:25:13 +03:00
Леонид Юрьев (Leonid Yuriev)
b905a6a391
mdbx: const
для начала и конца диапазона в аргументах mdbx_estimate_range()
(backport).
2023-11-12 21:30:09 +03:00
Леонид Юрьев (Leonid Yuriev)
d94f34b2c0
mdbx: рефакторинг обработки MDBX_GET_MULTIPLE
добавление проверки key
на NULL
(backport).
2023-11-12 21:30:09 +03:00
Леонид Юрьев (Leonid Yuriev)
f5ce7322c4
mdbx: исправление авто-установки MDBX_ENV_CHECKPID
для случая MDBX_ENABLE_MADVISE=0
(backport).
2023-11-12 21:30:09 +03:00
Леонид Юрьев (Leonid Yuriev)
ab5d290f11
mdbx: проверка номеров корневых страниц в coherency_check()
(backport).
2023-11-12 21:29:18 +03:00
Леонид Юрьев (Leonid Yuriev)
44beae00ec
mdbx: const
для начала и конца диапазона в аргументах mdbx_estimate_range()
.
2023-11-12 20:37:57 +03:00
Леонид Юрьев (Leonid Yuriev)
b7605e8033
mdbx: рефакторинг обработки MDBX_GET_MULTIPLE
добавление проверки key
на NULL
.
2023-11-12 20:37:57 +03:00
Леонид Юрьев (Leonid Yuriev)
7eb2f4130e
mdbx: использование const MDBX_txn
где это возможно в API (backport).
2023-11-12 19:33:27 +03:00
Леонид Юрьев (Leonid Yuriev)
af4dfe541b
mdbx: добавление mdbx_env_resurrect_after_fork()
в API.
2023-11-12 01:49:53 +03:00
Леонид Юрьев (Leonid Yuriev)
a22ec56938
mdbx: использование pthread_atfork(after_fork)
.
2023-11-12 01:49:53 +03:00
Леонид Юрьев (Leonid Yuriev)
ce74fae036
mdbx: рефакторинг и выделение env_open()
.
2023-11-12 01:49:53 +03:00
Леонид Юрьев (Leonid Yuriev)
54efb8bd81
mdbx: не считаем ошибки ipc-unlock критичными в случае смены pid.
2023-11-12 01:49:53 +03:00
Леонид Юрьев (Leonid Yuriev)
a3e2300f58
mdbx: возможность вызова osal_lck_destroy()
в дочернем процессе после fork()
.
2023-11-12 01:49:53 +03:00
Леонид Юрьев (Leonid Yuriev)
7ad54f54b4
mdbx: объединение lck-списка и rthc-таблицы для упрощения (де)регистрации TLS-деструкторов.
2023-11-12 01:49:53 +03:00
Леонид Юрьев (Leonid Yuriev)
eddade7b99
mdbx: корректировка префиксов имён osal-ipc функций.
2023-11-12 01:00:41 +03:00
Леонид Юрьев (Leonid Yuriev)
97418d5c9c
mdbx: рефакторинг env_handle_pathname()
для одной точки выделения/освобождения памяти.
2023-11-12 01:00:41 +03:00
Леонид Юрьев (Leonid Yuriev)
1b2f5f25d4
mdbx: рефакторинг и вынос txn_abort()
без кода входящих пероверок.
2023-11-12 01:00:41 +03:00
Леонид Юрьев (Leonid Yuriev)
2fe01eee89
mdbx: проверка pid только для запроса активной env.
2023-11-12 01:00:41 +03:00
Леонид Юрьев (Leonid Yuriev)
6477e6c5de
mdbx: исправление авто-установки MDBX_ENV_CHECKPID
для случая MDBX_ENABLE_MADVISE=0
.
2023-11-12 01:00:41 +03:00
Леонид Юрьев (Leonid Yuriev)
dea6570fc1
mdbx: доработка coherency_check()
для случая плохих номеров корневых страниц.
2023-11-11 12:29:15 +03:00
Леонид Юрьев (Leonid Yuriev)
0916d24321
mdbx: использование опции ENABLE_MEMCHECK
вместо ENABLE_VALGRIND
и MDBX_USE_VALGRIND
.
2023-11-11 12:29:13 +03:00
Леонид Юрьев (Leonid Yuriev)
c9c02dddfb
mdbx: добавление mdbx_dbi_rename()
в API.
2023-11-11 12:29:10 +03:00
Леонид Юрьев (Leonid Yuriev)
903d964f4d
mdbx: интенсивное использование __restrict
, в том числе при определении элементов структур.
2023-11-11 12:29:10 +03:00