/* * Copyright (C) 2020-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include #include #include #include #include "protocol_server.hh" #include "service/maintenance_mode.hh" using namespace seastar; namespace auth { class service; } namespace service { class migration_notifier; class endpoint_lifecycle_notifier; class memory_limiter; } namespace gms { class gossiper; } namespace cql3 { class query_processor; } namespace qos { class service_level_controller; } namespace db { class config; } struct client_data; namespace cql_transport { class cql_server; struct connection_service_level_params; class controller : public protocol_server { std::vector _listen_addresses; std::unique_ptr> _server; semaphore _ops_sem; /* protects start/stop operations on _server */ named_gate _bg_stops; bool _stopped = false; sharded& _auth_service; sharded& _mnotifier; sharded& _lifecycle_notifier; sharded& _gossiper; sharded& _qp; sharded& _mem_limiter; sharded& _sl_controller; const db::config& _config; scheduling_group_key _cql_opcode_stats_key; future<> set_cql_ready(bool ready); future<> do_start_server(); future<> do_stop_server(); future<> subscribe_server(sharded& server); future<> unsubscribe_server(sharded& server); future<> start_listening_on_tcp_sockets(sharded& cserver); future<> start_listening_on_maintenance_socket(sharded& cserver); maintenance_socket_enabled _used_by_maintenance_socket; public: controller(sharded&, sharded&, sharded&, sharded&, sharded&, sharded&, sharded&, const db::config& cfg, scheduling_group_key cql_opcode_stats_key, maintenance_socket_enabled used_by_maintenance_socket, seastar::scheduling_group sg); virtual sstring name() const override; virtual sstring protocol() const override; virtual sstring protocol_version() const override; virtual std::vector listen_addresses() const override; virtual future<> start_server() override; virtual future<> stop_server() override; virtual future<> request_stop_server() override; virtual future> get_client_data() override; future<> update_connections_scheduling_group(); future> get_connections_service_level_params(); }; } // namespace cql_transport