From 0741c81cfd8dc0864fcf55e04192b2207c8f68f7 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: Tue, 12 Mar 2024 09:02:50 +0300 Subject: [PATCH] =?UTF-8?q?mdbx-chk:=20=D0=BD=D0=B5=20=D1=81=D1=87=D0=B8?= =?UTF-8?q?=D1=82=D0=B0=D0=B5=D0=BC=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=BE=D0=B4-=D1=81=D1=82=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=D1=8B=20=D0=B1=D0=B5=D0=B7=20=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Коммитом 36a7e7ac24fa1817cac83d5e7ae6e351e7cb580b был скорректирован подсчет места занимаемого заголовками и данными. В частности, байты занимаемые заголовков вложенной под-страницы теперь относится к заголовкам, а не пользовательским данным. Однако, в случае когда на под-странице, созданной для хранения куста мульти-значений (MDBX_DUPSORT), после серии удалений остаётся одно значение, которое в MDBX может нулевой длины, получается под-страница с нулевым количеством пользовательских данных. Этот коммит исправляет --- src/mdbx_chk.c | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/src/mdbx_chk.c b/src/mdbx_chk.c index 4bc237a1..73728f9a 100644 --- a/src/mdbx_chk.c +++ b/src/mdbx_chk.c @@ -537,26 +537,14 @@ static int pgvisitor(const uint64_t pgno, const unsigned pgnumber, data_tree_problems += !is_gc_tree; gc_tree_problems += is_gc_tree; } - if (payload_bytes < 1) { - if (nentries > 1) { - problem_add("page", pgno, "zero size-of-entry", - "%s-page: payload %" PRIuPTR " bytes, %" PRIuPTR " entries", - pagetype_caption, payload_bytes, nentries); - /* if ((size_t)header_bytes + unused_bytes < page_size) { - // LY: hush a misuse error - page_bytes = page_size; - } */ - data_tree_problems += !is_gc_tree; - gc_tree_problems += is_gc_tree; - } else { - problem_add("page", pgno, "empty", - "%s-page: payload %" PRIuPTR " bytes, %" PRIuPTR - " entries, deep %i", - pagetype_caption, payload_bytes, nentries, deep); - dbi->pages.empty += 1; - data_tree_problems += !is_gc_tree; - gc_tree_problems += is_gc_tree; - } + if (nentries < 1 || (pagetype == MDBX_page_branch && nentries < 2)) { + problem_add("page", pgno, nentries ? "half-empty" : "empty", + "%s-page: payload %" PRIuPTR " bytes, %" PRIuPTR + " entries, deep %i", + pagetype_caption, payload_bytes, nentries, deep); + dbi->pages.empty += 1; + data_tree_problems += !is_gc_tree; + gc_tree_problems += is_gc_tree; } if (pgnumber) {