Files
scylladb/idl/join_node.idl.hh
Gleb Natapov 39cec4ae45 topology: let banned node know that it is banned
Currently if a banned node tries to connect to a cluster it fails to
create connections, but has no idea why, so from inside the node it
looks like it has communication problems. This patch adds new rpc
NOTIFY_BANNED which is sent back to the node when its connection is
dropped. On receiving the rpc the node isolates itself and print an
informative message about why it did so.

Closes scylladb/scylladb#26943
2025-11-24 17:12:13 +01:00

72 lines
1.8 KiB
C++

/*
* Copyright 2023-present ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
*/
namespace service {
struct join_node_query_params {};
struct join_node_query_result {
enum class topology_mode : uint8_t {
legacy = 0,
raft = 1,
};
service::join_node_query_result::topology_mode topo_mode;
};
struct join_node_request_params {
raft::server_id host_id;
std::optional<raft::server_id> replaced_id;
std::vector<sstring> ignore_nodes;
sstring cluster_name;
sstring snitch_name;
sstring datacenter;
sstring rack;
sstring release_version;
uint32_t num_tokens;
sstring tokens_string;
uint32_t shard_count;
uint32_t ignore_msb;
std::vector<sstring> supported_features;
utils::UUID request_id;
};
struct join_node_request_result {
struct ok {};
struct rejected {
sstring reason;
};
std::variant<
service::join_node_request_result::ok,
service::join_node_request_result::rejected
> result;
};
struct join_node_response_params {
struct accepted {};
struct rejected {
sstring reason;
};
std::variant<
service::join_node_response_params::accepted,
service::join_node_response_params::rejected
> response;
};
struct join_node_response_result {};
verb [[ip]] join_node_query (raft::server_id dst_id, service::join_node_query_params) -> service::join_node_query_result;
verb [[ip]] join_node_request (raft::server_id dst_id, service::join_node_request_params) -> service::join_node_request_result;
verb join_node_response (raft::server_id dst_id, service::join_node_response_params) -> service::join_node_response_result;
verb [[with_client_info, one_way, ip]] notify_banned (raft::server_id dst_id);
}