mdbx: проверяем выравнивание размера БД на юнит выделения памяти, а не на размер страницы.

Теоретически до этого коммита могла быть некоторая неувязка:
 - при открытии БД с размером страницы 4K на Windows (где размер секции кратен 64K) в режиме read-only,
 - после того как БД использовалась на POSIX (где размер отображения кратен размеру системной страницы).

Ранее ошибка могла возвращаться со стороны системы (например INVALID_PARAMETER) и по ней крайне сложно было понять в чем дело.
Теперь же будет логирование ошибки и возврат MDBX_WANNA_RECOVERY.
This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2025-02-20 23:04:56 +03:00
parent 66c747e4a9
commit 9b31c517e6

View File

@ -660,8 +660,9 @@ __cold int dxb_setup(MDBX_env *env, const int lck_rc, const mdbx_mode_t mode_bit
} }
if (env->flags & MDBX_RDONLY) { if (env->flags & MDBX_RDONLY) {
if (filesize_before & (globals.sys_pagesize - 1)) { if (filesize_before & (globals.sys_allocation_granularity - 1)) {
ERROR("%s", "filesize should be rounded-up to system page"); ERROR("filesize should be rounded-up to system allocation granularity %u",
globals.sys_allocation_granularity);
return MDBX_WANNA_RECOVERY; return MDBX_WANNA_RECOVERY;
} }
WARNING("%s", "ignore filesize mismatch in readonly-mode"); WARNING("%s", "ignore filesize mismatch in readonly-mode");