24#ifndef ROUTER_SRC_ROUTING_GUIDELINES_INCLUDE_ROUTING_GUIDELINES_ROUTING_GUIDELINES_H_
25#define ROUTER_SRC_ROUTING_GUIDELINES_INCLUDE_ROUTING_GUIDELINES_ROUTING_GUIDELINES_H_
27#include <forward_list>
34#include <unordered_map>
37#ifdef RAPIDJSON_NO_SIZETYPEDEFINE
41#include <rapidjson/document.h>
60 using tags_t = std::map<std::string, std::string, std::less<>>;
65 uint16_t port_rw_split{0};
87 std::map<std::string, std::string, std::less<>>
96 bool cluster_is_invalidated{
false};
106 std::map<std::string, std::string, std::less<>>
111 double random_value{0};
118 bool is_update{
false};
120 std::map<std::string, std::string, std::less<>>
123 std::map<std::string, std::string, std::less<>>
139 : public
std::runtime_error {
143 const std::vector<std::string> &get_errors()
const;
155 : address(
std::move(address_)), ip_version{ip_version_} {}
183 static std::string get_schema();
186 using ResolveCache = std::unordered_map<std::string, net::ip::address>;
196 const std::string &routing_guidelines_document);
284 std::string routing_strategy_,
const uint64_t priority_)
285 : destination_classes(
std::move(destination_classes_)),
286 routing_strategy(
std::move(routing_strategy_)),
300 Route(std::string name, std::unique_ptr<rpn::Expression> match,
301 std::vector<DestinationGroup> destination_groups,
302 const std::optional<bool> connection_sharing_allowed = std::nullopt,
310 std::unique_ptr<rpn::Expression>
match;
352 bool is_provided_by_user =
true);
355 const std::string &
name()
const;
360 const Sql_info *sql =
nullptr)
const;
370 const std::vector<std::string> &destination_classes()
const;
373 const std::vector<Route> &get_routes()
const;
377 std::vector<Resolve_host> hostnames_to_resolve()
const;
393 static void validate_one_route(
const std::string &route);
400 static void validate_one_destination(
const std::string &destination);
407 static void validate_guideline_document(
const std::string &doc);
410 const rapidjson::Document &get_routing_guidelines_document()
const;
414 bool extended_session_info_in_use()
const;
418 bool session_rand_used()
const;
422 bool routing_guidelines_updated()
const;
438 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:139
std::vector< std::string > errors_
Definition: routing_guidelines.h:146
Definition: routing_guidelines.cc:78
Routing guidelines engine.
Definition: routing_guidelines.h:170
~Routing_guidelines_engine()
std::unordered_map< std::string, net::ip::address > ResolveCache
Map with preprocessed resolved hostnames.
Definition: routing_guidelines.h:186
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:448
std::unique_ptr< Rpd > rpd_
Definition: routing_guidelines.h:445
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:437
rapidjson::Document routing_guidelines_document_
Definition: routing_guidelines.h:447
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:30
constexpr char kUndefinedRole[]
Keyword meaning that the member/cluster role is undefined.
Definition: routing_guidelines.h:54
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:151
IP_version
Definition: routing_guidelines.h:152
Resolve_host(std::string address_, IP_version ip_version_)
Definition: routing_guidelines.h:154
std::string address
Definition: routing_guidelines.h:159
auto operator<=>(const Resolve_host &) const =default
IP_version ip_version
Definition: routing_guidelines.h:160
Information about this Router instance.
Definition: routing_guidelines.h:57
std::string hostname
hostname where router is running
Definition: routing_guidelines.h:68
std::string bind_address
address on which router is listening
Definition: routing_guidelines.h:69
std::string route_name
name of the plugin which handles the connection
Definition: routing_guidelines.h:72
std::map< std::string, std::string, std::less<> > tags_t
Definition: routing_guidelines.h:60
std::string local_cluster
name of the local cluster
Definition: routing_guidelines.h:67
tags_t tags
an object containing user defined tags stored in the cluster metadata for that Router instance
Definition: routing_guidelines.h:70
std::string name
name of the Router instance
Definition: routing_guidelines.h:74
Result of destination classification.
Definition: routing_guidelines.h:340
std::vector< std::string > class_names
Definition: routing_guidelines.h:341
std::forward_list< std::string > errors
Definition: routing_guidelines.h:342
Type for names of Routes changed during routing guidelines document update.
Definition: routing_guidelines.h:322
std::string guideline_name
Definition: routing_guidelines.h:323
std::vector< std::string > affected_routes
Definition: routing_guidelines.h:324
Definition: routing_guidelines.h:281
std::string routing_strategy
Routing strategy used to select specific destinations within this group.
Definition: routing_guidelines.h:295
DestinationGroup()=default
std::vector< std::string > destination_classes
References to destinations classified at specific classes.
Definition: routing_guidelines.h:292
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:283
Result of route classification.
Definition: routing_guidelines.h:330
std::forward_list< std::string > errors
Definition: routing_guidelines.h:334
std::vector< Route::DestinationGroup > destination_groups
Definition: routing_guidelines.h:332
std::optional< bool > connection_sharing_allowed
Definition: routing_guidelines.h:333
std::string route_name
Definition: routing_guidelines.h:331
Class representing routing guidelines route section entry.
Definition: routing_guidelines.h:280
std::vector< DestinationGroup > destination_groups
Destination groups used by the route.
Definition: routing_guidelines.h:312
std::string name
Name of the route.
Definition: routing_guidelines.h:308
std::unique_ptr< rpn::Expression > match
Matching criterion for the given route.
Definition: routing_guidelines.h:310
auto operator<=>(const Route &) const =default
std::optional< bool > connection_sharing_allowed
Connection sharing enabled flag.
Definition: routing_guidelines.h:314
Information about one server destination.
Definition: routing_guidelines.h:78
std::string uuid
@server_uuid of the server
Definition: routing_guidelines.h:83
std::string cluster_set_name
name of the ClusterSet the server belongs to
Definition: routing_guidelines.h:92
std::string label
hostname:port as in the metadata
Definition: routing_guidelines.h:79
std::string address
address of the server
Definition: routing_guidelines.h:80
std::string cluster_name
name of the cluster the server belongs to
Definition: routing_guidelines.h:90
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:93
std::string member_role
PRIMARY, SECONDARY or READ_REPLICA, as reported by GR, empty string if not defined.
Definition: routing_guidelines.h:85
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:88
Information about incoming session.
Definition: routing_guidelines.h:101
std::string schema
default schema specified at connect time
Definition: routing_guidelines.h:108
std::map< std::string, std::string, std::less<> > connect_attrs
session connect attributes by name
Definition: routing_guidelines.h:107
std::string source_ip
IP address the session is connecting from.
Definition: routing_guidelines.h:104
std::string user
username the session is authenticated with
Definition: routing_guidelines.h:105
std::string target_ip
address of the Router the session is connected to
Definition: routing_guidelines.h:102
Information about query details.
Definition: routing_guidelines.h:115
std::string default_schema
schema currently active for the session
Definition: routing_guidelines.h:116
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:121
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:124