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