Add JSON output for ls-osd

This commit is contained in:
Vitaliy Filippov
2024-07-07 02:24:36 +03:00
parent abbba6ade4
commit 918e1f83b0
3 changed files with 143 additions and 3 deletions
+54
View File
@@ -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 <name> (-s <pg_size>|--ec <N>+<K>) -n <pg_count> [OPTIONS]`
+54
View File
@@ -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 <id|name>] <image>@<snapshot>
С опцией `--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 <name> (-s <pg_size>|--ec <N>+<K>) -n <pg_count> [OPTIONS]`
+35 -3
View File
@@ -178,7 +178,7 @@ resume_1:
return tree;
}
std::string format_tree()
void format_tree()
{
std::vector<std::string> node_seq = { "" };
std::vector<int> 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;
}
};