From 16ee199bf7141641d4bbdc46a9a3211a436683b7 Mon Sep 17 00:00:00 2001 From: Chongfeng Hu Date: Mon, 13 Jan 2025 11:45:37 -0800 Subject: [PATCH] Add a new command to nimble_dump: stripe_groups_metadata (#133) Summary: Pull Request resolved: https://github.com/facebookincubator/nimble/pull/133 `stripe_groups_metadata` dumps the stripes metadata information as referenced by the footer: https://www.internalfb.com/code/fbsource/[3a9c4e4b1b7b7e7b22668f54ddc12f0ccfc904b4]/fbcode/dwio/nimble/tablet/Footer.fbs?lines=52 Reviewed By: helfman Differential Revision: D68035171 fbshipit-source-id: 388428157144ab03e3f2af15a158b65ad9f00b2b --- dwio/nimble/tools/NimbleDump.cpp | 25 +++++++++++++++++++++++++ dwio/nimble/tools/NimbleDumpLib.cpp | 23 +++++++++++++++++++++++ dwio/nimble/tools/NimbleDumpLib.h | 1 + 3 files changed, 49 insertions(+) diff --git a/dwio/nimble/tools/NimbleDump.cpp b/dwio/nimble/tools/NimbleDump.cpp index 54e363c..d01cf1e 100644 --- a/dwio/nimble/tools/NimbleDump.cpp +++ b/dwio/nimble/tools/NimbleDump.cpp @@ -339,6 +339,31 @@ int main(int argc, char* argv[]) { ); // clang-format on + app.addCommand( + "stripe_groups_metadata", + "", + "Print stripe groups metadata information", + "Prints stripe groups information as referenced by the footer.", + [](const po::variables_map& options, + const std::vector& /*args*/) { + nimble::tools::NimbleDumpLib{ + std::cout, options["file"].as()} + .emitStripeGroupsMetadata(options["no_header"].as()); + }, + positionalArgs) + // clang-format off + .add_options() + ( + "file", + po::value()->required(), + "Nimble file path. Can be a local path or a Warm Storage path." + )( + "no_header,n", + po::bool_switch()->default_value(false), + "Don't print column names. Default is to include column names." + ); + // clang-format on + app.addAlias("i", "info"); app.addAlias("b", "binary"); app.addAlias("c", "content"); diff --git a/dwio/nimble/tools/NimbleDumpLib.cpp b/dwio/nimble/tools/NimbleDumpLib.cpp index 1cbac6a..6988b1b 100644 --- a/dwio/nimble/tools/NimbleDumpLib.cpp +++ b/dwio/nimble/tools/NimbleDumpLib.cpp @@ -886,4 +886,27 @@ void NimbleDumpLib::emitStripesMetadata(bool noHeader) { }); } +void NimbleDumpLib::emitStripeGroupsMetadata(bool noHeader) { + TabletReader tabletReader{*pool_, file_.get()}; + TableFormatter formatter( + ostream_, + { + {"Group Id", 10, Alignment::Left}, + {"Offset", 15, Alignment::Left}, + {"Size", 15, Alignment::Left}, + {"Compression Type", 18, Alignment::Left}, + }, + noHeader); + auto stripeGroupsMetadata = tabletReader.stripeGroupsMetadata(); + for (auto i = 0; i < stripeGroupsMetadata.size(); ++i) { + const auto& metadata = stripeGroupsMetadata[i]; + formatter.writeRow({ + commaSeparated(i), + commaSeparated(metadata.offset()), + commaSeparated(metadata.size()), + toString(metadata.compressionType()), + }); + } +} + } // namespace facebook::nimble::tools diff --git a/dwio/nimble/tools/NimbleDumpLib.h b/dwio/nimble/tools/NimbleDumpLib.h index b09df78..d92a6b5 100644 --- a/dwio/nimble/tools/NimbleDumpLib.h +++ b/dwio/nimble/tools/NimbleDumpLib.h @@ -44,6 +44,7 @@ class NimbleDumpLib { uint32_t stripeId); void emitLayout(bool noHeader, bool compressed); void emitStripesMetadata(bool noHeader); + void emitStripeGroupsMetadata(bool noHeader); private: std::shared_ptr pool_;