node_ops: make node_ops tasks type more human-friendly

Currently, node ops tasks type is retrieved from topology_request
without any change. Use respective node operation name instead.

Closes scylladb/scylladb#20671
This commit is contained in:
Aleksandra Martyniuk
2024-09-17 15:14:00 +02:00
committed by Botond Dénes
parent 69b4769418
commit 3195ebd04e
2 changed files with 22 additions and 9 deletions

View File

@@ -20,6 +20,21 @@ using namespace std::chrono_literals;
namespace node_ops {
static sstring request_type_to_task_type(const std::optional<service::topology_request>& request_type) {
return request_type.transform([] (auto type) -> sstring {
switch (type) {
case service::topology_request::join:
return "bootstrap";
case service::topology_request::remove:
return "remove node";
case service::topology_request::leave:
return "decommission";
default:
return fmt::to_string(type);
}
}).value_or("");
}
static tasks::task_manager::task_state get_state(const db::system_keyspace::topology_requests_entry& entry) {
if (!entry.id) {
return tasks::task_manager::task_state::created;
@@ -59,10 +74,9 @@ future<std::optional<tasks::task_status>> node_ops_virtual_task::get_status_help
if (!started && !get_pending_ids(topology).contains(id)) {
co_return std::nullopt;
}
auto type = entry.request_type ? fmt::format("{}", entry.request_type.value()) : "";
co_return tasks::task_status{
.task_id = id,
.type = std::move(type),
.type = request_type_to_task_type(entry.request_type),
.kind = tasks::task_kind::cluster,
.scope = "cluster",
.state = get_state(entry),
@@ -121,10 +135,9 @@ future<std::vector<tasks::task_stats>> node_ops_virtual_task::get_stats() {
| boost::adaptors::transformed([] (const auto& e) {
auto id = e.first;
auto& entry = e.second;
auto type = entry.request_type ? fmt::format("{}", entry.request_type.value()) : "";
return tasks::task_stats {
.task_id = tasks::task_id{id},
.type = std::move(type),
.type = node_ops::request_type_to_task_type(entry.request_type),
.kind = tasks::task_kind::cluster,
.scope = "cluster",
.state = get_state(entry),

View File

@@ -80,12 +80,12 @@ async def check_bootstrap_tasks_tree(tm: TaskManagerClient, module_name: str, se
for virtual_task in virtual_tasks:
if virtual_task.id in bootstrap_with_streaming:
check_virtual_task_status(virtual_task, "done", "join", 1)
check_virtual_task_status(virtual_task, "done", "bootstrap", 1)
child = await tm.get_task_status(virtual_task.children_ids[0]["node"], virtual_task.children_ids[0]["task_id"])
check_regular_task_status(child, "done", "bootstrap: streaming", "node", virtual_task.id, 0)
else:
check_virtual_task_status(virtual_task, "done", "join", 0)
check_virtual_task_status(virtual_task, "done", "bootstrap", 0)
return (servers, [vt.id for vt in virtual_tasks])
@@ -148,7 +148,7 @@ async def check_remove_node_tasks_tree(manager: ManagerClient, tm: TaskManagerCl
virtual_tasks = await get_new_virtual_tasks_statuses(tm, module_name, servers, previous_vts, 1)
virtual_task = virtual_tasks[0]
check_virtual_task_status(virtual_task, "done", "remove", len(servers))
check_virtual_task_status(virtual_task, "done", "remove node", len(servers))
child = await tm.get_task_status(virtual_task.children_ids[0]["node"], virtual_task.children_ids[0]["task_id"])
check_regular_task_status(child, "done", "removenode: streaming", "node", virtual_task.id, 0)
@@ -180,7 +180,7 @@ async def check_decommission_tasks_tree(manager: ManagerClient, tm: TaskManagerC
virtual_tasks = await get_new_virtual_tasks_statuses(tm, module_name, servers, previous_vts, 1)
virtual_task = virtual_tasks[0]
check_virtual_task_status(virtual_task, "running", "leave", 1)
check_virtual_task_status(virtual_task, "running", "decommission", 1)
child = await tm.get_task_status(virtual_task.children_ids[0]["node"], virtual_task.children_ids[0]["task_id"])
check_regular_task_status(child, "running", "decommission: streaming", "node", virtual_task.id, 0)
@@ -233,7 +233,7 @@ async def test_node_ops_task_wait(manager: ManagerClient):
await manager.decommission_node(server.server_id)
async def _wait_for_task(tm: TaskManagerClient, module_name: str, server: ServerInfo, handler: InjectionHandler):
task = await poll_for_task(tm, module_name, servers[1], "cluster", "leave")
task = await poll_for_task(tm, module_name, servers[1], "cluster", "decommission")
assert task.state == "running"
await handler.message()