Леонид Юрьев (Leonid Yuriev)
8fba5ac8d8
mdbx: устранение излишней assert-проверки внутри override_meta()
.
2023-02-12 23:27:39 +03:00
Леонид Юрьев (Leonid Yuriev)
25e958f081
mdbx: устранение всех предупреждений статического анализатора MSVC (все несущественные или ложные).
2023-02-11 00:26:06 +03:00
Леонид Юрьев (Leonid Yuriev)
7f5ea6d3b8
mdbx: корректировка прототипа __asan_default_options()
.
2023-02-11 00:26:06 +03:00
Леонид Юрьев (Leonid Yuriev)
1684d17b0f
mdbx-windows: поддержка char-версии mdbx_env_get_path()
.
2023-02-11 00:26:06 +03:00
Леонид Юрьев (Leonid Yuriev)
ebbe98afa5
mdbx-windows: ликвидация макроса OSAL_MB2WIDE()
.
2023-02-11 00:26:06 +03:00
Леонид Юрьев (Leonid Yuriev)
351a30f186
mdbx-windows: не расходуем стек под буферы для wchar-преобразования путей.
2023-02-09 22:37:31 +03:00
Леонид Юрьев (Leonid Yuriev)
fb827959a9
mdbx: исправление put(MDBX_UPSERT+MDBX_ALLDUPS)
для случая замены всех значений в subDb.
...
Fixed cursor_put_nochecklen() internals for case when dupsort'ed named subDb
contains a single key with multiple values (aka duplicates), which are replaced
with a single value by put-operation with the `MDBX_UPSERT+MDBX_ALLDUPS` flags.
In this case, the database becomes completely empty, without any pages.
However exactly this condition was not considered and
thus wasn't handled correctly.
Fixes https://gitflic.ru/project/erthink/libmdbx/issue/8
Thanks Masatoshi Fukunaga <https://gitflic.ru/user/mah0x211 > for reporting.
2023-02-01 01:04:24 +03:00
Леонид Юрьев (Leonid Yuriev)
209f784ee7
mdbx: исправление assert-проверок внутри dxb_resize()
.
...
Устранение регресса после a484a1f89bcbf38aeb7a81d6080605f86ddc7933.
Проверка `prev_limit_pgno >= used_pgno` правомочна только в части сценариев,
но не в общем случае.
2023-01-23 23:54:11 +03:00
Леонид Юрьев (Leonid Yuriev)
c01f025bfa
mdbx: обновление года на 2023.
2023-01-16 16:32:02 +03:00
Леонид Юрьев (Leonid Yuriev)
a484a1f89b
mdbx: рефакторинг dxb_resize()
и связанного кода.
...
В том числе, для устранения срабатывания assert-проверки
`size_bytes == env->me_dxb_mmap.current` в специфических многопоточных
сценариях использования.
Проверка срабатывала только в отладочных сборках, при специфическом
наложении во времени читающей и пишущей транзакции в разных потоках,
одновременно с изменением размера БД.
Кроме срабатывание проверки, каких-либо других последствий не возникало.
2023-01-16 02:20:56 +03:00
Леонид Юрьев (Leonid Yuriev)
0979a93a78
mdbx: добавлено примечание об ошибке MinGW MSYS2.
2023-01-12 17:01:27 +03:00
Leonid Yuriev
9e15bd9b29
mdbx-windows: устранение регресса ERROR_SHARING_VIOLATION в режиме MDBX_EXCLUSIVE.
...
Спасибо maxc0d3r@protonmail.com за сообщение о проблеме.
2023-01-12 17:01:27 +03:00
Leonid Yuriev
0159f97e94
mdbx: ограничиваем размер отображения при коротком read-only файле.
...
Цель в предотвращении ошибки ERROR_NOT_ENOUGH_MEMORY в Windows, которая
совсем не информативна для пользователя и возникает в этом случае (когда
файл открыт read-only и короче запрошенного размера).
2023-01-12 01:53:22 +03:00
Леонид Юрьев (Leonid Yuriev)
525c4a55a4
mdbx: fix English typos.
...
Thanks to Dimitris Apostolou <dimitris.apostolou@icloud.com>
2023-01-10 14:16:08 +03:00
Леонид Юрьев (Leonid Yuriev)
3da23da7b3
mdbx: косметический рефакторинг контроля MDBX_APPEND
.
2023-01-09 21:39:42 +03:00
Леонид Юрьев (Leonid Yuriev)
61e77e7b70
mdbx: контроль отсутствия дубликатов LCK-файла с альтернативными именами.
2023-01-07 00:10:23 +03:00
Леонид Юрьев (Leonid Yuriev)
08fb7d5838
mdbx: корректировка отключения MDBX_NOSUBDIR
при открытии mdbx.dat
без директории.
2023-01-07 00:10:19 +03:00
Леонид Юрьев (Leonid Yuriev)
c6b73c8a24
mdbx: добавление me_madv_threshold
и рефакторинг/упрощение.
...
Для уменьшения затрат на MDBX_SHRINK_ALLOWED.
2023-01-03 20:20:03 +03:00
Леонид Юрьев (Leonid Yuriev)
24f2e878c1
mdbx: устранение несущественных предупреждений Valgrind.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
2c8d3e1e12
mdbx: исправление предупреждения UBSAN.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
ab55016599
mdbx: устранение ложного срабатывания assert внутри dpl_reserve()
.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
f0c2927fc7
mdbx: перенос LRU-отметок в теневые страницы по отрицательному смещению.
...
Это позволяет избавиться от повторного поиска в "гзязном" списке
страниц, уже находящихся в стеке курсора, для обнлвления LRU-отметок.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
8519fde741
mdbx: микро-оптимизация cmp_reverse()
.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
bcddeaba9f
mdbx: изменение CMP2INT()
.
...
Решил вернуться к старому варианту. Вроде-бы все актуальные компиляторы
ведут себя с ним прилично (не хуже), а некоторые лучше.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
5317e516d2
mdbx: микро-оптимизация cmp_int()
.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
be05037906
mdbx: перемещение debug/assert-макросов перед атомиками.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
f53dc70038
mdbx: добавление eq_fast()
для сравнений на (не)равенство.
...
Цель в том, чтобы уменьшить кол-во условных и безусловных переходов при
сравнениях равно/неравно, в том числе избегать вызовов задаваемых
кастомных компаратаров и memcmp() для коротких ключей/значений.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
2322138a8e
mdbx: корректировка сообщения об ошибке.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
37867a0b84
mdbx: не обходим проверку когерентности в режиме восстановления.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
f0c43fb24a
mdbx: без необходимости не объединяем не-грязные страницы в дереве.
2023-01-03 19:28:11 +03:00
Леонид Юрьев (Leonid Yuriev)
48bd3fc4c8
mdbx: упрощение default_prefault_write()
.
2022-12-31 23:35:53 +03:00
Леонид Юрьев (Leonid Yuriev)
7ffea70087
mdbx: доработка loose-пути в page_retire()
.
2022-12-31 23:35:53 +03:00
Леонид Юрьев (Leonid Yuriev)
ef460a9229
mdbx: выделение cursor_get()
для уменьшения кол-ва проверок.
2022-12-29 23:03:12 +03:00
Леонид Юрьев (Leonid Yuriev)
df63ff0e7e
mdbx: выделение cursor_del()
для уменьшения кол-ва проверок.
2022-12-29 23:03:12 +03:00
Леонид Юрьев (Leonid Yuriev)
66a5704949
mdbx: выделение cursor_put()
для уменьшения кол-ва проверок.
2022-12-29 19:26:50 +03:00
Леонид Юрьев (Leonid Yuriev)
61d21b0a02
mdbx: не трогать LRU и dbi в cursor_touch() для вложенных курсоров.
2022-12-29 01:20:04 +03:00
Леонид Юрьев (Leonid Yuriev)
0941319940
mdbx: парочка незначительных likely.
2022-12-29 01:20:04 +03:00
Леонид Юрьев (Leonid Yuriev)
bb2e3967eb
mdbx: уменьшение кол-ва вызовов realloc()
.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
e458af602e
mdbx: устранение ненужных условий в отладке (несущественно).
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
d29acf4fdc
mdbx: актуализация bits.md (внутренний справочник).
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
a06fe4f168
mdbx: переработка контроля "некогерентности" для уменьшения накладных расходов.
...
Существует проблема https://libmdbx.dqdkfa.ru/dead-github/issues/269 ,
которая проявляется только при специфической неупорядоченности внутри
ядра ОС, когда страницы, записанные в файл отображенный в память,
становятся видны в памяти посредством работы unified page cache:
- если записанная последней мета-страница "обгоняет" ранее записанные,
т.е. когда записанное в файл позже становится видимым в отображении
раньше, чем записанное ранее.
Теперь, вместо постоянной полной сверки записываемых страниц,
выполняется легковесная проверка при старте транзакций, с переключением
в режим "как раньше" при обнаружении проблемы.
В результате, в некоторых сценариях возвращается 5-10%
производительности, а в отдельных синтетических тестах до 30%.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
0498114469
mdbx: обнуление информации о задержках для невалидных транзакций в mdbx_txn_commit_ex()
.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
85828f677a
mdbx: пересоздание пустой MAIN_DBI при необходимости.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
9cbbdfa025
mdbx: добавление const
к аргументам функций получения и контроля страниц.
2022-12-27 11:50:28 +03:00
Леонид Юрьев (Leonid Yuriev)
686145ec2e
mdbx: рефакторинг с удалением cursor_spill()
и MDBX_NOSPILL
.
2022-12-27 11:50:23 +03:00
Леонид Юрьев (Leonid Yuriev)
fe55f25665
mdbx: использование msync(MS_ASYNC)
для спиллинга в режиме MDBX_WRITEMAP вне зависимости от MDBX_AVOID_MSYNC
и MDBX_MMAP_USE_MS_ASYNC
.
2022-12-22 00:48:41 +03:00
Леонид Юрьев (Leonid Yuriev)
e9a2042df1
mdbx: добавление MDBX_NOTHROW_PURE_FUNCTION
к некоторым функциям.
2022-12-22 00:48:41 +03:00
Леонид Юрьев (Leonid Yuriev)
fd98a635d9
mdbx: не возвращаем ошибку при попытке закрытия MAIN_DBI
.
2022-12-22 00:48:41 +03:00
Леонид Юрьев (Leonid Yuriev)
722c6ecf43
mdbx: use attribute(tls_model(local-dynamic))
as workaround for CLANG bug.
2022-12-22 00:48:40 +03:00
Леонид Юрьев (Leonid Yuriev)
44493c6448
mdbx-tools: поддержка не-печатных имен subDb в mdbx_chk
.
2022-12-22 00:48:40 +03:00