mirror of
https://github.com/isar/libmdbx.git
synced 2025-04-02 15:22:58 +08:00
Стабилизирующий выпуск с исправлением обнаруженных ошибок, устранением недочетов и технических долгов. Ветка 0.12 считается готовой к продуктовому использованию, получает статус стабильной и далее будет получать только исправление ошибок. Разработка будет продолжена в ветке 0.13, а ветка 0.11 становится архивной. Благодарности: -------------- - Max <maxc0d3r@protonmail.com> за сообщение о проблеме ERROR_SHARING_VIOLATION в режиме MDBX_EXCLUSIVE на Windows. - Alisher Ashyrov <https://t.me/a1is43ras4> за сообщение о проблеме с assert-проверкой и содействие в отладке. - Masatoshi Fukunaga <https://gitflic.ru/user/mah0x211> за сообщение о проблеме `put(MDBX_UPSERT+MDBX_ALLDUPS)` для случая замены всех значений в subDb. Исправления (без корректировок новых функций): ---------------------------------------------- - Устранен регресс после коммита 474391c83c5f81def6fdf3b0b6f5716a87b78fbf, приводящий к возврату ERROR_SHARING_VIOLATION в Windows при открытии БД в режиме MDBX_EXCLUSIVE для чтения-записи. - Добавлено ограничение размера отображения при коротком read-only файле, для предотвращения ошибки ERROR_NOT_ENOUGH_MEMORY в Windows, которая возникает в этом случае и совсем не информативна для пользователя. - Произведен рефакторинг `dxb_resize()`, в том числе, для устранения срабатывания assert-проверки `size_bytes == env->me_dxb_mmap.current` в специфических многопоточных сценариях использования. Проверка срабатывала только в отладочных сборках, при специфическом наложении во времени читающей и пишущей транзакции в разных потоках, одновременно с изменением размера БД. Кроме срабатывание проверки, каких-либо других последствий не возникало. - Устранена проблема в `put(MDBX_UPSERT+MDBX_ALLDUPS)` для случая замены всех значений единственного ключа в subDb. В ходе этой операции subDb становится полностью пустой, без каких-либо страниц и именно эта ситуация не была учтена в коде, что приводило к повреждению БД при фиксации такой транзакции. - Устранена излишняя assert-проверка внутри `override_meta()`. Что в отладочных сборках могло приводить к ложным срабатываниям при восстановлении БД, в том числе при автоматическом откате слабых мета-страниц. - Скорректированы макросы `__cold`/`__hot`, в том числе для устранения проблемы `error: inlining failed in call to ‘always_inline FOO(...)’: target specific option mismatch` при сборке посредством GCC >10.x для SH4. Ликвидация технических долгов и мелочи: --------------------------------------- - Исправлены многочисленные опечатки в документации. - Доработан тест для полной стохастической проверки `MDBX_EKEYMISMATCH` в режиме `MDBX_APPEND`. - Расширены сценарии запуска `mdbx_chk` из CMake-тестов для проверки как в обычном, так и эксклюзивном режимах чтения-записи. - Уточнены спецификаторы `const` и `noexcept` для нескольких методов в C++ API. - Устранено использование стека под буферы для `wchar`-преобразования путей. - Для Windows добавлена функция `mdbx_env_get_path()` для получения пути к БД в формате многобайтных символов. - Добавлены doxygen-описания для API с широкими символами. - Устранены предупреждения статического анализатора MSVC, все они были несущественные, либо ложные. - Устранено ложное предупреждение GCC при сборке для SH4. - Добавлена поддержка ASAN (Address Sanitizer) при сборке посредством MSVC. - Расширен набор перебираемых режимов в скрипте `test/long_stochastic.sh`, добавлена опция `--extra`. - В C++ API добавлена поддержка расширенных опций времени выполнения `mdbx::extra_runtime_option`, аналогично `enum MDBX_option_t` из C API. - Вывод всех счетчиков page-operations в `mdbx_stat`. 63 files changed, 1161 insertions(+), 569 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
107 lines
3.1 KiB
Groff
107 lines
3.1 KiB
Groff
.\" Copyright 2015-2023 Leonid Yuriev <leo@yuriev.ru>.
|
|
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
|
|
.TH MDBX_CHK 1 "2023-03-03" "MDBX 0.12.4"
|
|
.SH NAME
|
|
mdbx_chk \- MDBX checking tool
|
|
.SH SYNOPSIS
|
|
.B mdbx_chk
|
|
[\c
|
|
.BR \-V ]
|
|
[\c
|
|
.BR \-v [ v [ v ]]]
|
|
[\c
|
|
.BR \-n ]
|
|
[\c
|
|
.BR \-q ]
|
|
[\c
|
|
.BR \-c ]
|
|
[\c
|
|
.BR \-w ]
|
|
[\c
|
|
.BR \-d ]
|
|
[\c
|
|
.BR \-i ]
|
|
[\c
|
|
.BI \-s \ subdb\fR]
|
|
.BR \ dbpath
|
|
.SH DESCRIPTION
|
|
The
|
|
.B mdbx_chk
|
|
utility intended to check an MDBX database file.
|
|
.SH OPTIONS
|
|
.TP
|
|
.BR \-V
|
|
Write the library version number to the standard output, and exit.
|
|
.TP
|
|
.BR \-v
|
|
Produce verbose output, including summarize space and page usage statistics.
|
|
If \fB\-vv\fP is given, be more verbose, show summarized B-tree info
|
|
and space allocation.
|
|
If \fB\-vvv\fP is given, be more verbose, include summarized statistics
|
|
of leaf B-tree pages.
|
|
If \fB\-vvvv\fP is given, be even more verbose, show info of each page
|
|
during B-tree traversal and basic info of each GC record.
|
|
If \fB\-vvvvv\fP is given, turn maximal verbosity, display the full list
|
|
of page IDs in the GC records and size of each key-value pair of database(s).
|
|
.TP
|
|
.BR \-q
|
|
Be quiet; do not output anything even if an error was detected.
|
|
.TP
|
|
.BR \-c
|
|
Force using cooperative mode while opening environment, i.e. don't try to open
|
|
in exclusive/monopolistic mode. Only exclusive/monopolistic mode allow complete
|
|
check, including full check of all meta-pages and actual size of database file.
|
|
.TP
|
|
.BR \-w
|
|
Open environment in read-write mode and lock for writing while checking.
|
|
This could be impossible if environment already used by another process(s)
|
|
in an incompatible read-write mode. This allow rollback to last steady commit
|
|
(in case environment was not closed properly) and then check transaction IDs
|
|
of meta-pages. Otherwise, without \fB\-w\fP option environment will be
|
|
opened in read-only mode.
|
|
.TP
|
|
.BR \-d
|
|
Disable page-by-page traversal of B-tree. In this case, without B-tree
|
|
traversal, it is unable to check for lost-unused pages nor for double-used
|
|
pages.
|
|
.TP
|
|
.BR \-i
|
|
Ignore wrong order errors, which will likely false-positive if custom
|
|
comparator(s) was used.
|
|
.TP
|
|
.BR \-s \ subdb
|
|
Verify and show info only for a specific subdatabase.
|
|
.TP
|
|
.BR \-0 | \-1 | \-2
|
|
Using specific meta-page 0, or 2 for checking.
|
|
.TP
|
|
.BR \-t
|
|
Turn to a specified meta-page on successful check.
|
|
.TP
|
|
.BR \-T
|
|
Turn to a specified meta-page EVEN ON UNSUCCESSFUL CHECK!
|
|
.TP
|
|
.BR \-u
|
|
Warms up the DB before checking via notifying OS kernel of subsequent access to the database pages.
|
|
.TP
|
|
.BR \-U
|
|
Warms up the DB before checking, notifying the OS kernel of subsequent access to the database pages,
|
|
then forcibly loads ones by sequential access and tries to lock database pages in memory.
|
|
.TP
|
|
.BR \-n
|
|
Open MDBX environment(s) which do not use subdirectories.
|
|
This is legacy option. For now MDBX handles this automatically.
|
|
|
|
.SH DIAGNOSTICS
|
|
Exit status is zero if no errors occur. Errors result in a non-zero exit status
|
|
and a diagnostic message being written to standard error
|
|
if no quiet mode was requested.
|
|
.SH "SEE ALSO"
|
|
.BR mdbx_stat (1),
|
|
.BR mdbx_copy (1),
|
|
.BR mdbx_dump (1),
|
|
.BR mdbx_load (1)
|
|
.BR mdbx_drop (1)
|
|
.SH AUTHOR
|
|
Leonid Yuriev <https://gitflic.ru/user/erthink>
|