/* * Copyright (C) 2019 pengjian.uestc @ gmail.com */ /* * This file is part of Scylla. * * Scylla is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Scylla is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Scylla. If not, see . */ #pragma once #include "seastar/core/future.hh" #include "seastar/core/shared_ptr.hh" #include "seastar/core/sharded.hh" #include "protocol_server.hh" namespace db { class config; }; namespace redis { class query_processor; } namespace redis_transport { class redis_server; } namespace auth { class service; } namespace service { class storage_proxy; class migration_manager; } namespace gms { class gossiper; } namespace replica { class database; } namespace redis { // As defined in: https://redis.io/topics/protocol // "The RESP protocol was introduced in Redis 1.2, but it became the standard way // for talking with the Redis server in Redis 2.0. This is the protocol you // should implement in your Redis client." // The protocol itself doesn't seem to have a version, but it was stabilized in // Redis 2.0 according to the above quite so that is the version we are going to use. constexpr const char* version = "2.0"; class controller : public protocol_server { seastar::sharded _query_processor; seastar::shared_ptr> _server; seastar::sharded& _proxy; seastar::sharded& _auth_service; seastar::sharded& _mm; db::config& _cfg; seastar::sharded& _gossiper; std::vector _listen_addresses; private: seastar::future<> listen(seastar::sharded& auth_service, db::config& cfg); public: controller(seastar::sharded& proxy, seastar::sharded& auth_service, seastar::sharded& mm, db::config& cfg, seastar::sharded& gossiper); ~controller(); 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; }; }