Commit Graph

4212 Commits

Author SHA1 Message Date
Леонид Юрьев (Leonid Yuriev)
f0cfedc26f mdbx-test: добавление extra/dupfixed_addodd. 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)
185e43f3a8
mdbx: выпуск 0.12.9 "Ясень-4"
Стабилизирующий выпуск с исправлением обнаруженных ошибок и устранением недочетов.

Исправления и доработки:
------------------------

 - Ликвидация зависимости от ранее удаленной опции `MDBX_ENABLE_PREFAULT`, из-за
   чего опция `MDBX_ENABLE_MINCORE` не включалась автоматически, что приводило
   к не-активации соответствующего улучшения и не-достижению  декларируемого уровня
   производительности в сценариях использования в режиме `MDBX_WRITEMAP`.

 - Исправление авто-установки `MDBX_ENV_CHECKPID` при отключении использования
   функционала `madvise()` посредством опции сборки `MDBX_ENABLE_MADVISE=0`.
   Из-за чего при поддержке системой `madvise(MADV_DONTFORK)` не включался контроль pid.

 - Добавлена проверка переданного ключа на `NULL` при обработке `MDBX_GET_MULTIPLE`.

 - Добавлена проверка номеров корневых страниц в `coherency_check()`.

 - Обеспечен `const` для начала и конца диапазона в аргументах `mdbx_estimate_range()`.

 - Из разрабатываемой версии перенесены не-нарушающие совместимости доработки C++ API:

     - добавлен тип `mdbx::cursor::estimation_result`, а поведение методов
      `cursor::estimate()` унифицировано с `cursor::move()`;
     - для предотвращения незаметного неверного использования API, для инициализации
       возвращаемых по ссылке срезов, вместо пустых срезов задействован `slice::invalid()`;
     - добавлены дополнительные C++ операторы преобразования к типам C API;
     - для совместимости со старыми стандартами C++ и старыми версиями STL перенесены
       в public классы `buffer::move_assign_alloc` и `buffer::copy_assign_alloc`;
     - добавлен тип `mdbx::default_buffer`;
     - для срезов и буферов добавлены методы `hex_decode()`, `base64_decode()`, `base58_decode()`;
     - добавлен тип `mdbx::comparator` и функций `mdbx::default_comparator()`;
     - добавлены статические методы `buffer::hex()`, `base64()`, `base58()`;
     - для транзакций и курсоров добавлены методы `get_/set_context`;
     - добавлен метод `cursor::clone()`;

 - Поддержка base58 приведена в соответствии с черновиком RFC.

 - Переработка/исправление `to_hex()` и `from_hex()`.

 - Уменьшение `MDBX_opt_rp_augment_limit` по умолчанию до 1/3 от текущего количества страниц в БД.

Более подробная информация в [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html).

git diff' stat: 32 commits, 8 files changed, 667 insertions(+), 401 deletions(-)
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
2023-12-11 23:24:05 +03:00
Леонид Юрьев (Leonid Yuriev)
f16c4303bf mdbx: исправление опечатки в комментарии. 2023-12-08 16:47:40 +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: устранение внутреннего регресса проверки состояние внутри транзакции.
После f0d523c507, при использовании
добавленного 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)
e316bc8b29 mdbx-test: увеличения таймаута для smoke-теста на случай параллельного выполнения под Valgrind. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
5a86afaac3 mdbx-test: 3-часовой таймаут для extra_doubtless_positioning при использовании Valgrind. 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)
14558fa90b mdbx-test: правка тестов для совместимости с проблемными версиями glibc и glibc++. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
1db44c7914 mdbx++: перенос в public типов buffer::move_assign_alloc и buffer::copy_assign_alloc для старых стандартов C++. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
f97c127455 mdbx-test: тест для doubtless-API позиционирования курсоров. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
100f07e89a mdbx++: дополнительные операторы преобразования к типам C API. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
e68771df18 mdbx++: Добавление buffer_pair<> и buffer_pair_spec<>. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
ef69336189 mdbx-test: добавление теста для транскодеров hex/base64/base58. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
0e250a4457 mdbx++: добавление поддержки std::span<>. 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)
dd47f1bfd9 mdbx++: переход на использование по-умолчанию default_allocator вместо legacy_allocator. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
1f2ff07796 mdbx++: переработка/исправление to_hex(). 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
b412807fc1 mdbx++: добавление mdbx::default_buffer. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
8a6bddef44 mdbx++: поправка форматирования против бага clang-format. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
304cf25149 mdbx++: использование slice::invalid() для предотвращения незаметного неверного использования API. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
869cfb3fae mdbx++: исправление опечатки в doxygen-описании. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
0a58601cdf mdbx++: добавление pair::invalid() и взаимодействия с std::pair<>. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
355090f02e mdbx++: добавление is_xyz() для key_mode и value_mode. 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)
b9e2f6dc09 mdbx++: добавление MDBX_CXXnn_CONSTEXPR_ENUM. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
bf21ee7bde mdbx++: добавление операторов сравнения для mdbx::pair. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
0b68980489 mdbx++: добавление cursor::scan(predicate...) и т.п. 2023-12-05 15:32:18 +03:00
Леонид Юрьев (Leonid Yuriev)
4999264460 mdbx++: добавление error::boolean_or_throw(exception_thunk). 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)
225f548339 mdbx++: добавление get_/set_context для транзакций и курсоров. 2023-12-05 15:32:13 +03:00
Леонид Юрьев (Leonid Yuriev)
990d4ea042 mdbx: обновление ChangeLog. 2023-11-28 21:48:56 +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)
d963f3a971 mdbx: обновление ChangeLog. 2023-11-28 09:36:29 +03:00
Леонид Юрьев (Leonid Yuriev)
fb15c8ca0b mdbx++: дополнительные операторы преобразования к типам C API (backport). 2023-11-28 09:36:29 +03:00
Леонид Юрьев (Leonid Yuriev)
b6034e8045 mdbx-test: правка тестов для совместимости с проблемными версиями glibc и glibc++ (backport). 2023-11-28 09:36:29 +03:00