mirror of
https://github.com/isar/libmdbx.git
synced 2024-12-30 02:24:14 +08:00
mdbx: обновление ChangeLog.
This commit is contained in:
parent
d02bdcf2bd
commit
45aa39c68b
60
ChangeLog.md
60
ChangeLog.md
@ -9,6 +9,61 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
||||
|
||||
Поддержка стабильной ветки.
|
||||
|
||||
Исправления и доработки:
|
||||
|
||||
- Исправление опечатки в имени переменной внутри `mdbx_env_turn_for_recovery()`,
|
||||
что приводило к неверному поведению в некоторых ситуациях.
|
||||
|
||||
С точки зрения пользователя, с учетом актуальных сценариев использования
|
||||
утилиты `mdbx_chk`, был только один специфический/редкий сценарий
|
||||
проявления ошибки/проблемы - когда выполнялась проверка и активация
|
||||
слабой/weak мета-страницы с НЕ-последней транзакцией после системной
|
||||
аварии машины, где БД использовалась в хрупком/небезопасном режиме.
|
||||
В сценарии, при успешной проверке целевой страницы и её последующей
|
||||
активации выводилось сообщение об ошибке, связанной со срабатыванием
|
||||
механизма контроля не-когерентности кэша файловой системы и отображенных
|
||||
в ОЗУ данных БД. При этом БД успешно восстанавливалось и не было
|
||||
каких-либо негативных последствия, кроме самого сообщения об ошибке.
|
||||
|
||||
Технически же ошибка проявлялась при "переключении" на мета-страницу,
|
||||
когда у хотя-бы одной из двух других мета-страниц номер транзакции был
|
||||
больше:
|
||||
|
||||
* Если содержимое других мета-страниц было корректным, а номера
|
||||
связанных транзакций были больше, то результирующий номер транзакции в
|
||||
целевой/активируемой мета-страницы устанавливается без учета этих
|
||||
мета-страниц и мог быть меньше-или-равным.
|
||||
|
||||
* В результате, если такие мета-страницы были в статусе слабых/weak, то
|
||||
при закрытии БД после переключения могла срабатывать защита от
|
||||
не-когерентности unified buffer/page cache, а в отладочных сборках могла
|
||||
срабатывать assert-проверка.
|
||||
|
||||
* Если же такие мета-страницы были в статусе сильных/steady, то
|
||||
переключение на новую мета-страницу могло не давать эффекта либо
|
||||
приводить к появлению двух мета-страниц с одинаковым номером транзакции,
|
||||
что является ошибочной ситуацией.
|
||||
|
||||
- Обходное решение проблем сборки посредством GCC с использование опций `-m32 -arch=i686 -Ofast`.
|
||||
Проблема обусловлена ошибкой GCC, из-за которой конструкция `__attribute__((__target__("sse2")))`
|
||||
не включает полноценное использование инструкций SSE и SSE2, если это не было сделано посредством
|
||||
опций командной строки, но была использована опция `-Ofast`. В результате сборка заканчивалась
|
||||
сообщением об ошибке:
|
||||
`error: inlining failed in call to 'always_inline' '_mm_movemask_ps': target specific option mismatch`
|
||||
|
||||
- Доработка режима "восстановления" БД и переключения на заданную мета-страницу:
|
||||
* Устранение обновления без необходимости мета-страницы с увеличением номера транзакции;
|
||||
* Устранение вывода (логирования) бессмысленного/лишнего предупреждения о пропуске обновления геометрии БД;
|
||||
* Более ожидаемое и безопасное поведение при проверке БД с указанием целевой мета-страницы в режиме чтения-записи.
|
||||
|
||||
Теперь при открытии БД посредством `mdbx_env_open_for_recovery()` не
|
||||
выполняется неявное изменение/обновление БД, в том числе при закрытии
|
||||
БД. Это позволяет обезопасить БД (снизить шанс её разрушения) если
|
||||
пользователь при попытке восстановления, либо просто в качестве
|
||||
эксперимента, задал утилите `mdbx_chk` неверную или опасную комбинацию
|
||||
параметров. При этом обычная проверка, как и явное переключение
|
||||
мета-страниц, работают по-прежнему.
|
||||
|
||||
Мелочи:
|
||||
|
||||
- Незначительное уточнение CMake-пробника для `std::filesystem`,
|
||||
@ -17,7 +72,8 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
||||
- Устранение причины ложно-позитивного предупреждения новых версий GCC в C++ API.
|
||||
- Исправление ссылки на репозиторий бенчмарка ioarena.
|
||||
- Добавление перекрестных ссылок в doxygen-документацию по C++ API.
|
||||
- уточнение ограничений в разделе [Restrictions & Caveats](https://libmdbx.dqdkfa.ru/intro.html#restrictions).
|
||||
- Уточнение ограничений в разделе [Restrictions & Caveats](https://libmdbx.dqdkfa.ru/intro.html#restrictions).
|
||||
- Исправление ссылок на описание `mdbx_canary_put()`.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -372,7 +428,7 @@ Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
|
||||
суммарный размер пары ключ-значение.
|
||||
|
||||
- Реализовано использование асинхронной (overlapped) записи в Windows,
|
||||
включая использования небуфферизированного ввода-вывода и `WriteGather()`.
|
||||
включая использования небуферизированного ввода-вывода и `WriteGather()`.
|
||||
Это позволяет сократить накладные расходы и частично обойти проблемы
|
||||
Windows с низкой производительностью ввода-вывода, включая большие
|
||||
задержки `FlushFileBuffers()`. Новый код также обеспечивает консолидацию
|
||||
|
Loading…
x
Reference in New Issue
Block a user