From 45aa39c68babd0136abeb60455e71cbe7878c372 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Fri, 9 Jun 2023 00:04:27 +0300 Subject: [PATCH] =?UTF-8?q?mdbx:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ChangeLog.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChangeLog.md | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 19aa8a85..9de382be 100644 --- a/ChangeLog.md +++ b/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) суммарный размер пары ключ-значение. - Реализовано использование асинхронной (overlapped) записи в Windows, - включая использования небуфферизированного ввода-вывода и `WriteGather()`. + включая использования небуферизированного ввода-вывода и `WriteGather()`. Это позволяет сократить накладные расходы и частично обойти проблемы Windows с низкой производительностью ввода-вывода, включая большие задержки `FlushFileBuffers()`. Новый код также обеспечивает консолидацию