tasks: improve task_manager::lookup_virtual_task

Currently, lookup_virtual_task gets the list of ids of all operations
tracked by a virtual task and checks whether it contains given id.
The list of all ids isn't required and the check whether one particular
operation id is tracked by the virtual task may be quicker than listing
all operations.

Add virtual_task::contains method and use it in lookup_virtual_task.
This commit is contained in:
Aleksandra Martyniuk
2024-09-22 16:46:25 +02:00
parent 73b1f66b70
commit 9b5d69ae96
4 changed files with 25 additions and 1 deletions

View File

@@ -110,6 +110,23 @@ future<std::set<tasks::task_id>> node_ops_virtual_task::get_ids() const {
| std::ranges::to<std::set>();
}
future<bool> node_ops_virtual_task::contains(tasks::task_id task_id) const {
if (!task_id.uuid().is_timestamp()) {
// Task id of node ops operation is always a timestamp.
co_return false;
}
service::topology& topology = _ss._topology_state_machine._topology;
for (auto& request : topology.requests) {
if (topology.find(request.first)->second.request_id == task_id.uuid()) {
co_return true;
}
}
auto entry = co_await _ss._sys_ks.local().get_topology_request_entry(task_id.uuid(), false);
co_return bool(entry.id);
}
future<tasks::is_abortable> node_ops_virtual_task::is_abortable() const {
return make_ready_future<tasks::is_abortable>(tasks::is_abortable::no);
}

View File

@@ -29,6 +29,7 @@ public:
{}
virtual tasks::task_manager::task_group get_group() const noexcept override;
virtual future<std::set<tasks::task_id>> get_ids() const override;
virtual future<bool> contains(tasks::task_id task_id) const override;
virtual future<tasks::is_abortable> is_abortable() const override;
virtual future<std::optional<tasks::task_status>> get_status(tasks::task_id id) override;