diff --git a/dbms/src/Storages/Page/tools/PageCtl/PageStorageCtlV3.cpp b/dbms/src/Storages/Page/tools/PageCtl/PageStorageCtlV3.cpp index c6d52f515f1..ba6ed5c6138 100644 --- a/dbms/src/Storages/Page/tools/PageCtl/PageStorageCtlV3.cpp +++ b/dbms/src/Storages/Page/tools/PageCtl/PageStorageCtlV3.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -54,6 +55,7 @@ struct ControlOptions DISPLAY_WAL_ENTRIES = 5, DISPLAY_REGION_INFO = 6, DISPLAY_BLOB_DATA = 7, + DELETE_KVSTORE_REGION = 8, }; std::vector paths; @@ -95,6 +97,7 @@ ControlOptions ControlOptions::parse(int argc, char ** argv) 5 is dump entries in WAL log files 6 is display all region info 7 is display blob data (in hex) + 8 is delete regino in kvstore )") // ("show_entries", value()->default_value(true), @@ -314,7 +317,10 @@ class PageStorageControlV3 } // Other display mode need to restore ps instance - auto display = [](auto & mvcc_table_directory, auto & blob_store, const ControlOptions & opts) { + auto display = []([[maybe_unused]] auto & ps, + auto & mvcc_table_directory, + auto & blob_store, + const ControlOptions & opts) { switch (opts.mode) { case ControlOptions::DisplayType::DISPLAY_SUMMARY_INFO: @@ -378,6 +384,28 @@ class PageStorageControlV3 fmt::println("hex:{}", hex_data); break; } + case ControlOptions::DisplayType::DELETE_KVSTORE_REGION: + { + if constexpr (std::is_same_v) + { + if (KVSTORE_NAMESPACE_ID != opts.namespace_id) + { + LOG_WARNING( + DB::Logger::get(), + "A valid KVStore namespace should with namespace id {}", + KVSTORE_NAMESPACE_ID); + } + LOG_INFO(DB::Logger::get(), "Remove region, region_id={}", opts.page_id); + WriteBatch wb(opts.namespace_id); + wb.delPage(opts.page_id); + ps.write(std::move(wb)); + } + else if constexpr (std::is_same_v) + { + std::cout << "Do not support in Unips mode." << std::endl; + } + break; + } default: std::cout << "Invalid display mode." << std::endl; break; @@ -390,7 +418,7 @@ class PageStorageControlV3 ps.restore(); auto & mvcc_table_directory = ps.page_directory->mvcc_table_directory; auto & blobstore = ps.blob_store; - display(mvcc_table_directory, blobstore, options); + display(ps, mvcc_table_directory, blobstore, options); } else if constexpr (std::is_same_v) { @@ -398,7 +426,7 @@ class PageStorageControlV3 ps->restore(); auto & mvcc_table_directory = ps->page_directory->mvcc_table_directory; auto & blobstore = ps->blob_store; - display(mvcc_table_directory, *blobstore, options); + display(ps, mvcc_table_directory, *blobstore, options); } return 0; @@ -455,6 +483,7 @@ class PageStorageControlV3 return stats_info.toString(); } + // mode 2 DISPLAY_DIRECTORY_INFO static String getDirectoryInfo( typename Trait::PageDirectory::MVCCMapType & mvcc_table_directory, bool show_entries,