Files
scylladb/node_ops/task_manager_module.hh
Aleksandra Martyniuk 9b5d69ae96 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.
2024-10-30 12:24:38 +01:00

71 lines
2.2 KiB
C++

/*
* Copyright (C) 2024-present ScyllaDB
*/
/*
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#pragma once
#include "streaming/stream_reason.hh"
#include "tasks/task_manager.hh"
namespace service {
class storage_service;
enum class topology_request: uint16_t;
}
namespace node_ops {
class node_ops_virtual_task : public tasks::task_manager::virtual_task::impl {
private:
service::storage_service& _ss;
public:
node_ops_virtual_task(tasks::task_manager::module_ptr module,
service::storage_service& ss)
: tasks::task_manager::virtual_task::impl(std::move(module))
, _ss(ss)
{}
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;
virtual future<std::optional<tasks::task_status>> wait(tasks::task_id id) override;
virtual future<> abort(tasks::task_id id) noexcept override;
virtual future<std::vector<tasks::task_stats>> get_stats() override;
private:
future<std::optional<tasks::task_status>> get_status_helper(tasks::task_id id) const;
};
class streaming_task_impl : public tasks::task_manager::task::impl {
private:
streaming::stream_reason _reason;
std::optional<shared_future<>>& _result;
std::function<future<>()> _action;
public:
streaming_task_impl(tasks::task_manager::module_ptr module,
tasks::task_id parent_id,
streaming::stream_reason reason,
std::optional<shared_future<>>& result,
std::function<future<>()> action) noexcept;
virtual std::string type() const override;
virtual tasks::is_internal is_internal() const noexcept override;
protected:
virtual future<> run() override;
};
class task_manager_module : public tasks::task_manager::module {
private:
service::storage_service& _ss;
public:
task_manager_module(tasks::task_manager& tm, service::storage_service& ss) noexcept;
virtual std::set<gms::inet_address> get_nodes() const noexcept override;
};
}