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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user