From cc271cdcd8792ac27caefcbe45c7349ccd5b5765 Mon Sep 17 00:00:00 2001 From: kungasc Date: Wed, 27 Sep 2023 13:07:12 +0300 Subject: [PATCH] KIKIMR-19139 Load index in Dump --- ydb/core/tablet_flat/flat_part_dump.cpp | 58 ++++++++++++++------- ydb/core/tablet_flat/flat_part_index_iter.h | 8 +++ ydb/core/tablet_flat/flat_table.h | 2 +- 3 files changed, 48 insertions(+), 20 deletions(-) diff --git a/ydb/core/tablet_flat/flat_part_dump.cpp b/ydb/core/tablet_flat/flat_part_dump.cpp index 456522162041..cb710af7e30b 100644 --- a/ydb/core/tablet_flat/flat_part_dump.cpp +++ b/ydb/core/tablet_flat/flat_part_dump.cpp @@ -1,6 +1,6 @@ #include "flat_part_dump.h" #include "flat_part_iface.h" -#include "flat_page_index.h" +#include "flat_part_index_iter.h" #include "flat_page_data.h" #include "flat_page_frames.h" #include "flat_page_blobs.h" @@ -51,10 +51,20 @@ namespace { Index(part, depth); if (depth > 2) { - for (auto iter = part.Index->Begin(); iter; ++iter) { + auto index = TPartIndexIt(&part, Env, { }); + + for (ssize_t i = 0; ; i++) { + auto ready = i == 0 ? index.Seek(0) : index.Next(); + if (ready != EReady::Data) { + if (ready == EReady::Page) { + Out << " | -- the rest of the index rows aren't loaded" << Endl; + } + break; + } + Out << Endl; - DataPage(part, iter->GetPageId()); + DataPage(part, index.GetPageId()); } } } @@ -90,15 +100,21 @@ namespace { { Key.reserve(part.Scheme->Groups[0].KeyTypes.size()); - auto label = part.Index.Label(); - - const auto items = (part.Index->End() - part.Index->Begin() + 1); + auto index = TPartIndexIt(&part, Env, { }); + auto label = index.TryGetLabel(); - Out - << " + Index{" << (ui16)label.Type << " rev " - << label.Format << ", " << label.Size << "b}" - << " " << items << " rec" << Endl - << " | Page Row Bytes ("; + if (label) { + Out + << " + Index{" << (ui16)label->Type << " rev " + << label->Format << ", " << label->Size << "b}" + << Endl + << " | Page Row Bytes ("; + } else { + Out + << " + Index{unknown}" + << Endl + << " | Page Row Bytes ("; + } for (auto off : xrange(part.Scheme->Groups[0].KeyTypes.size())) { Out << (off ? ", " : ""); @@ -108,20 +124,24 @@ namespace { Out << ")" << Endl; - ssize_t seen = 0; - - for (ssize_t i = 0; i < items; i++) { + for (ssize_t i = 0; ; i++) { Key.clear(); - if (depth < 2 && (seen += 1) > 10) { - Out - << " | -- skipped " << (items - Min(items, seen - 1)) - << " entries, depth level " << depth << Endl; + if (depth < 2 && i >= 10) { + Out << " | -- skipped the rest entries, depth level " << depth << Endl; + break; + } + // prints without LastKeyRecord, but it seems ok for now + auto ready = i == 0 ? index.Seek(0) : index.Next(); + if (ready != EReady::Data) { + if (ready == EReady::Page) { + Out << " | -- the rest of the index rows aren't loaded" << Endl; + } break; } - auto record = part.Index.At(i); + auto record = index.GetRecord(); for (const auto &info: part.Scheme->Groups[0].ColsKeyIdx) Key.push_back(record->Cell(info)); diff --git a/ydb/core/tablet_flat/flat_part_index_iter.h b/ydb/core/tablet_flat/flat_part_index_iter.h index 23e133a3575e..07e886e497bf 100644 --- a/ydb/core/tablet_flat/flat_part_index_iter.h +++ b/ydb/core/tablet_flat/flat_part_index_iter.h @@ -98,6 +98,14 @@ class TPartIndexIt { return TryGetIndex(); } + std::optional TryGetLabel() { + auto index = TryGetIndex(); + if (!index) { + return { }; + } + return index->Label(); + } + public: TRowId GetEndRowId() const { return EndRowId; diff --git a/ydb/core/tablet_flat/flat_table.h b/ydb/core/tablet_flat/flat_table.h index 71fd8ffdb304..0b0cf7963933 100644 --- a/ydb/core/tablet_flat/flat_table.h +++ b/ydb/core/tablet_flat/flat_table.h @@ -303,7 +303,7 @@ class TTable: public TAtomicRefCount { for (const auto& flat : Flatten) { if (const TPartView &partView = flat.second) { size += partView->DataSize(); - rows += partView->Index.Rows(); + rows += partView.Part->Stat.Rows; } }