26#ifndef ROUTER_SRC_ROUTING_GUIDELINES_INCLUDE_ROUTING_GUIDELINES_ROUTING_GUIDELINES_H_
27#define ROUTER_SRC_ROUTING_GUIDELINES_INCLUDE_ROUTING_GUIDELINES_ROUTING_GUIDELINES_H_
29#include <forward_list>
36#include <unordered_map>
39#ifdef RAPIDJSON_NO_SIZETYPEDEFINE
43#include <rapidjson/document.h>
62 using tags_t = std::map<std::string, std::string, std::less<>>;
67 uint16_t port_rw_split{0};
89 std::map<std::string, std::string, std::less<>>
98 bool cluster_is_invalidated{
false};
108 std::map<std::string, std::string, std::less<>>
113 double random_value{0};
120 bool is_update{
false};
122 std::map<std::string, std::string, std::less<>>
125 std::map<std::string, std::string, std::less<>>
141 : public
std::runtime_error {
145 const std::vector<std::string> &get_errors()
const;
157 : address(
std::move(address_)), ip_version{ip_version_} {}
185 static std::string get_schema();
188 using ResolveCache = std::unordered_map<std::string, net::ip::address>;
198 const std::string &routing_guidelines_document);
286 std::string routing_strategy_,
const uint64_t priority_)
287 : destination_classes(
std::move(destination_classes_)),
288 routing_strategy(
std::move(routing_strategy_)),
302 Route(std::string name, std::unique_ptr<rpn::Expression> match,
303 std::vector<DestinationGroup> destination_groups,
304 const std::optional<bool> connection_sharing_allowed = std::nullopt,
312 std::unique_ptr<rpn::Expression>
match;
354 bool is_provided_by_user =
true);
357 const std::string &
name()
const;
362 const Sql_info *sql =
nullptr)
const;
372 const std::vector<std::string> &destination_classes()
const;
375 const std::vector<Route> &get_routes()
const;
379 std::vector<Resolve_host> hostnames_to_resolve()
const;
395 static void validate_one_route(
const std::string &route);
402 static void validate_one_destination(
const std::string &destination);
409 static void validate_guideline_document(
const std::string &doc);
412 const rapidjson::Document &get_routing_guidelines_document()
const;
416 bool extended_session_info_in_use()
const;
420 bool session_rand_used()
const;
424 bool routing_guidelines_updated()
const;
440 default_routing_guidelines_doc_ = std::move(routing_guidelines_doc);
static stdx::flags< StmtClassifier > classify(SqlLexer &&lexer, bool forbid_set_trackers)
Definition: classic_query_sender.cc:97
Definition: routing_guidelines.h:141
std::vector< std::string > errors_
Definition: routing_guidelines.h:148
Definition: routing_guidelines.cc:81
Routing guidelines engine.
Definition: routing_guidelines.h:172
~Routing_guidelines_engine()
std::unordered_map< std::string, net::ip::address > ResolveCache
Map with preprocessed resolved hostnames.
Definition: routing_guidelines.h:188
Routing_guidelines_engine(const Routing_guidelines_engine &)=delete
Routing_guidelines_engine(Routing_guidelines_engine &&rp)
Routing_guidelines_engine & operator=(Routing_guidelines_engine &&)
Routing_guidelines_engine & operator=(const Routing_guidelines_engine &)=delete
std::string default_routing_guidelines_doc_
Definition: routing_guidelines.h:450
std::unique_ptr< Rpd > rpd_
Definition: routing_guidelines.h:447
void set_default_routing_guidelines(std::string routing_guidelines_doc)
Set the default guideline (auto-generated based on Router's configuration).
Definition: routing_guidelines.h:439
rapidjson::Document routing_guidelines_document_
Definition: routing_guidelines.h:449
Header for compiler-dependent features.
#define MY_COMPILER_MSVC_DIAGNOSTIC_IGNORE(X)
Definition: my_compiler.h:247
#define MY_COMPILER_DIAGNOSTIC_PUSH()
save the compiler's diagnostic (enabled warnings, errors, ...) state
Definition: my_compiler.h:277
#define MY_COMPILER_DIAGNOSTIC_POP()
restore the compiler's diagnostic (enabled warnings, errors, ...) state
Definition: my_compiler.h:278
Define rapidjson::SizeType to be std::uint64_t.
static mysql_service_status_t create(my_h_string *) noexcept
Definition: mysql_string_all_empty.cc:43
Definition: routing_guidelines_datatypes.h:31
constexpr char kUndefinedRole[]
Keyword meaning that the member/cluster role is undefined.
Definition: routing_guidelines.h:56
Definition: gcs_xcom_synode.h:64
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:33
required uint32 priority
Definition: replication_group_member_actions.proto:35
required uint64 version
Definition: replication_group_member_actions.proto:41
required bool enabled
Definition: replication_group_member_actions.proto:33
#define ROUTING_GUIDELINES_EXPORT
Definition: routing_guidelines_export.h:15
static int compare(size_t a, size_t b)
Function to compare two size_t integers for their relative order.
Definition: rpl_utility.cc:107
case opt name
Definition: sslopt-case.h:29
Information about hostnames that needs to be resolved.
Definition: routing_guidelines.h:153
IP_version
Definition: routing_guidelines.h:154
Resolve_host(std::string address_, IP_version ip_version_)
Definition: routing_guidelines.h:156
std::string address
Definition: routing_guidelines.h:161
auto operator<=>(const Resolve_host &) const =default
IP_version ip_version
Definition: routing_guidelines.h:162
Information about this Router instance.
Definition: routing_guidelines.h:59
std::string hostname
hostname where router is running
Definition: routing_guidelines.h:70
std::string bind_address
address on which router is listening
Definition: routing_guidelines.h:71
std::string route_name
name of the plugin which handles the connection
Definition: routing_guidelines.h:74
std::map< std::string, std::string, std::less<> > tags_t
Definition: routing_guidelines.h:62
std::string local_cluster
name of the local cluster
Definition: routing_guidelines.h:69
tags_t tags
an object containing user defined tags stored in the cluster metadata for that Router instance
Definition: routing_guidelines.h:72
std::string name
name of the Router instance
Definition: routing_guidelines.h:76
Result of destination classification.
Definition: routing_guidelines.h:342
std::vector< std::string > class_names
Definition: routing_guidelines.h:343
std::forward_list< std::string > errors
Definition: routing_guidelines.h:344
Type for names of Routes changed during routing guidelines document update.
Definition: routing_guidelines.h:324
std::string guideline_name
Definition: routing_guidelines.h:325
std::vector< std::string > affected_routes
Definition: routing_guidelines.h:326
Definition: routing_guidelines.h:283
std::string routing_strategy
Routing strategy used to select specific destinations within this group.
Definition: routing_guidelines.h:297
DestinationGroup()=default
std::vector< std::string > destination_classes
References to destinations classified at specific classes.
Definition: routing_guidelines.h:294
auto operator<=>(const DestinationGroup &) const =default
DestinationGroup(std::vector< std::string > destination_classes_, std::string routing_strategy_, const uint64_t priority_)
Definition: routing_guidelines.h:285
Result of route classification.
Definition: routing_guidelines.h:332
std::forward_list< std::string > errors
Definition: routing_guidelines.h:336
std::vector< Route::DestinationGroup > destination_groups
Definition: routing_guidelines.h:334
std::optional< bool > connection_sharing_allowed
Definition: routing_guidelines.h:335
std::string route_name
Definition: routing_guidelines.h:333
Class representing routing guidelines route section entry.
Definition: routing_guidelines.h:282
std::vector< DestinationGroup > destination_groups
Destination groups used by the route.
Definition: routing_guidelines.h:314
std::string name
Name of the route.
Definition: routing_guidelines.h:310
std::unique_ptr< rpn::Expression > match
Matching criterion for the given route.
Definition: routing_guidelines.h:312
auto operator<=>(const Route &) const =default
std::optional< bool > connection_sharing_allowed
Connection sharing enabled flag.
Definition: routing_guidelines.h:316
Information about one server destination.
Definition: routing_guidelines.h:80
std::string uuid
@server_uuid of the server
Definition: routing_guidelines.h:85
std::string cluster_set_name
name of the ClusterSet the server belongs to
Definition: routing_guidelines.h:94
std::string label
hostname:port as in the metadata
Definition: routing_guidelines.h:81
std::string address
address of the server
Definition: routing_guidelines.h:82
std::string cluster_name
name of the cluster the server belongs to
Definition: routing_guidelines.h:92
std::string cluster_role
PRIMARY or REPLICA depending on the role of the cluster in the ClusterSet, empty string if not define...
Definition: routing_guidelines.h:95
std::string member_role
PRIMARY, SECONDARY or READ_REPLICA, as reported by GR, empty string if not defined.
Definition: routing_guidelines.h:87
std::map< std::string, std::string, std::less<> > tags
user defined tags stored in the cluster metadata for that Server instance
Definition: routing_guidelines.h:90
Information about incoming session.
Definition: routing_guidelines.h:103
std::string schema
default schema specified at connect time
Definition: routing_guidelines.h:110
std::map< std::string, std::string, std::less<> > connect_attrs
session connect attributes by name
Definition: routing_guidelines.h:109
std::string source_ip
IP address the session is connecting from.
Definition: routing_guidelines.h:106
std::string user
username the session is authenticated with
Definition: routing_guidelines.h:107
std::string target_ip
address of the Router the session is connected to
Definition: routing_guidelines.h:104
Information about query details.
Definition: routing_guidelines.h:117
std::string default_schema
schema currently active for the session
Definition: routing_guidelines.h:118
std::map< std::string, std::string, std::less<> > query_tags
query specific tags specified as a comment in the SQL statement ( e.g.
Definition: routing_guidelines.h:123
std::map< std::string, std::string, std::less<> > query_hints
query specific hints specified at the protocol level (see WL#12542)
Definition: routing_guidelines.h:126