From 918e1f83b020cb88331fd2bf6ce16402b2fb0637 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 7 Jul 2024 02:24:36 +0300 Subject: [PATCH] Add JSON output for ls-osd --- docs/usage/cli.en.md | 54 ++++++++++++++++++++++++++++++++++++++++ docs/usage/cli.ru.md | 54 ++++++++++++++++++++++++++++++++++++++++ src/cmd/cli_osd_tree.cpp | 38 +++++++++++++++++++++++++--- 3 files changed, 143 insertions(+), 3 deletions(-) diff --git a/docs/usage/cli.en.md b/docs/usage/cli.en.md index a08899bc..c397fdb7 100644 --- a/docs/usage/cli.en.md +++ b/docs/usage/cli.en.md @@ -24,6 +24,8 @@ It supports the following commands: - [fix](#fix) - [alloc-osd](#alloc-osd) - [rm-osd](#rm-osd) +- [osd-tree](#osd-tree) +- [ls-osd](#ls-osd) - [create-pool](#create-pool) - [modify-pool](#modify-pool) - [ls-pools](#ls-pools) @@ -246,6 +248,58 @@ Refuses to remove OSDs with data without `--force` and `--allow-data-loss`. With `--dry-run` only checks if deletion is possible without data loss and redundancy degradation. +## osd-tree + +`vitastor-cli osd-tree` + +Show current OSD tree. + +Example output: + +``` +TYPE NAME UP SIZE USED% TAGS WEIGHT BLOCK BITMAP IMM +host kaveri + disk nvme0n1p1 + osd 3 down 100G 0 % abc,kaveri 1 128k 4k none + osd 4 down 100G 0 % 1 128k 4k none + disk nvme1n1p1 + osd 5 down 100G 0 % abc,kaveri 1 128k 4k none + osd 6 down 100G 0 % 1 128k 4k none +host stump + osd 1 up 100G 37.29 % osdone 1 128k 4k all + osd 2 up 100G 26.8 % abc 1 128k 4k all + osd 7 up 100G 21.84 % 1 128k 4k all + osd 8 up 100G 21.63 % 1 128k 4k all + osd 9 up 100G 20.69 % 1 128k 4k all + osd 10 up 100G 21.61 % 1 128k 4k all + osd 11 up 100G 21.53 % 1 128k 4k all + osd 12 up 100G 22.4 % 1 128k 4k all +``` + +## ls-osd + +`vitastor-cli osds|ls-osd|osd-ls` + +Show current OSDs as list. + +Example output: + +``` +OSD PARENT UP SIZE USED% TAGS WEIGHT BLOCK BITMAP IMM +3 kaveri/nvme0n1p1 down 100G 0 % globl,kaveri 1 128k 4k none +4 kaveri/nvme0n1p1 down 100G 0 % 1 128k 4k none +5 kaveri/nvme1n1p1 down 100G 0 % globl,kaveri 1 128k 4k none +6 kaveri/nvme1n1p1 down 100G 0 % 1 128k 4k none +1 stump up 100G 37.29 % osdone 1 128k 4k all +2 stump up 100G 26.8 % globl 1 128k 4k all +7 stump up 100G 21.84 % 1 128k 4k all +8 stump up 100G 21.63 % 1 128k 4k all +9 stump up 100G 20.69 % 1 128k 4k all +10 stump up 100G 21.61 % 1 128k 4k all +11 stump up 100G 21.53 % 1 128k 4k all +12 stump up 100G 22.4 % 1 128k 4k all +``` + ## create-pool `vitastor-cli create-pool|pool-create (-s |--ec +) -n [OPTIONS]` diff --git a/docs/usage/cli.ru.md b/docs/usage/cli.ru.md index 55b758ff..3b444a17 100644 --- a/docs/usage/cli.ru.md +++ b/docs/usage/cli.ru.md @@ -23,6 +23,8 @@ vitastor-cli - интерфейс командной строки для адм - [merge-data](#merge-data) - [alloc-osd](#alloc-osd) - [rm-osd](#rm-osd) +- [osd-tree](#osd-tree) +- [ls-osd](#ls-osd) - [create-pool](#create-pool) - [modify-pool](#modify-pool) - [ls-pools](#ls-pools) @@ -263,6 +265,58 @@ vitastor-cli snap-create [-p|--pool ] @ С опцией `--dry-run` только проверяет, возможно ли удаление без потери данных и деградации избыточности. +## osd-tree + +`vitastor-cli osd-tree` + +Показать дерево OSD. + +Пример вывода: + +``` +TYPE NAME UP SIZE USED% TAGS WEIGHT BLOCK BITMAP IMM +host kaveri + disk nvme0n1p1 + osd 3 down 100G 0 % globl,kaveri 1 128k 4k none + osd 4 down 100G 0 % 1 128k 4k none + disk nvme1n1p1 + osd 5 down 100G 0 % globl,kaveri 1 128k 4k none + osd 6 down 100G 0 % 1 128k 4k none +host stump + osd 1 up 100G 37.29 % osdone 1 128k 4k all + osd 2 up 100G 26.8 % globl 1 128k 4k all + osd 7 up 100G 21.84 % 1 128k 4k all + osd 8 up 100G 21.63 % 1 128k 4k all + osd 9 up 100G 20.69 % 1 128k 4k all + osd 10 up 100G 21.61 % 1 128k 4k all + osd 11 up 100G 21.53 % 1 128k 4k all + osd 12 up 100G 22.4 % 1 128k 4k all +``` + +## ls-osd + +`vitastor-cli osds|ls-osd|osd-ls` + +Показать список OSD. + +Пример вывода: + +``` +OSD PARENT UP SIZE USED% TAGS WEIGHT BLOCK BITMAP IMM +3 kaveri/nvme0n1p1 down 100G 0 % globl,kaveri 1 128k 4k none +4 kaveri/nvme0n1p1 down 100G 0 % 1 128k 4k none +5 kaveri/nvme1n1p1 down 100G 0 % globl,kaveri 1 128k 4k none +6 kaveri/nvme1n1p1 down 100G 0 % 1 128k 4k none +1 stump up 100G 37.29 % osdone 1 128k 4k all +2 stump up 100G 26.8 % globl 1 128k 4k all +7 stump up 100G 21.84 % 1 128k 4k all +8 stump up 100G 21.63 % 1 128k 4k all +9 stump up 100G 20.69 % 1 128k 4k all +10 stump up 100G 21.61 % 1 128k 4k all +11 stump up 100G 21.53 % 1 128k 4k all +12 stump up 100G 22.4 % 1 128k 4k all +``` + ## create-pool `vitastor-cli create-pool|pool-create (-s |--ec +) -n [OPTIONS]` diff --git a/src/cmd/cli_osd_tree.cpp b/src/cmd/cli_osd_tree.cpp index db380f9f..ede2e372 100644 --- a/src/cmd/cli_osd_tree.cpp +++ b/src/cmd/cli_osd_tree.cpp @@ -178,7 +178,7 @@ resume_1: return tree; } - std::string format_tree() + void format_tree() { std::vector node_seq = { "" }; std::vector indents = { -1 }; @@ -198,6 +198,38 @@ resume_1: } } json11::Json::array fmt_items; + if (parent->json_output) + { + for (int i = 1; i < node_seq.size(); i++) + { + auto & node = placement_tree->nodes.at(node_seq[i]); + fmt_items.push_back(json11::Json::object{ + { "type", node.level }, + { "name", node.name }, + { "parent", node.parent }, + }); + for (uint64_t osd_num: node.child_osds) + { + auto & osd = placement_tree->osds.at(osd_num); + fmt_items.push_back(json11::Json::object{ + { "type", "osd" }, + { "name", osd.num }, + { "parent", node.name }, + { "up", osd.up ? "up" : "down" }, + { "size", osd.size }, + { "free", osd.free }, + { "reweight", osd.reweight }, + { "tags", osd.tags }, + { "block", (uint64_t)osd.block_size }, + { "bitmap", (uint64_t)osd.bitmap_granularity }, + { "commit", osd.immediate_commit == IMMEDIATE_NONE ? "none" : (osd.immediate_commit == IMMEDIATE_ALL ? "all" : "small") }, + { "op_stats", osd_stats[osd_num]["op_stats"] }, + }); + } + } + result.data = fmt_items; + return; + } for (int i = 1; i < node_seq.size(); i++) { auto & node = placement_tree->nodes.at(node_seq[i]); @@ -340,7 +372,7 @@ resume_1: { "title", "LAT" }, }); } - return print_table(fmt_items, cols, parent->color); + result.text = print_table(fmt_items, cols, parent->color); } void loop() @@ -351,7 +383,7 @@ resume_1: load_osd_tree(); if (parent->waiting > 0) return; - result.text = format_tree(); + format_tree(); state = 100; } };