MySQL 9.3.0
Source Code Documentation
routing_guidelines_adapter.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2024, 2025, Oracle and/or its affiliates.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2.0,
6 as published by the Free Software Foundation.
7
8 This program is designed to work with certain software (including
9 but not limited to OpenSSL) that is licensed under separate terms,
10 as designated in a particular file or component or in included license
11 documentation. The authors of MySQL hereby grant you an additional
12 permission to link the program and your derivative works with the
13 separately licensed software that they have either included with
14 the program or referenced in the documentation.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24*/
25
26#ifndef ROUTING_GUIDELINES_ADAPTER_INCLUDED
27#define ROUTING_GUIDELINES_ADAPTER_INCLUDED
28
29#include <optional>
30#include <string>
31#include <string_view>
32#include <system_error>
33
34#ifdef RAPIDJSON_NO_SIZETYPEDEFINE
35#include "my_rapidjson_size_t.h"
36#endif
37#include <rapidjson/document.h>
38#include <rapidjson/error/en.h>
39#include <rapidjson/prettywriter.h>
40#include <rapidjson/stringbuffer.h>
41
46#include "mysqlrouter/uri.h"
47#include "protocol/protocol.h"
48
49/**
50 * Create a routing guideline from Router configuration.
51 *
52 * @param sections Router configuration sections
53 * @param io_ctx IO context
54 */
58 net::io_context &io_ctx);
59
60/**
61 * Helper class used to create routing guideline from Router configuration.
62 */
64 public:
65 /**
66 * Guidelines configuration adapter constructor.
67 *
68 * @param sections Router configuration sections
69 * @param io_ctx IO context
70 */
73 net::io_context &io_ctx);
74
75 /**
76 * Generate routing guideline based on the internal state of
77 * Guidelines_from_conf_adapter.
78 *
79 * In case when there are only static routing plugins running the
80 * guidelines document will be empty.
81 */
83
84 private:
85 const std::string kDefaultName{
86 "Routing guidelines generated from a config file"};
87
88 using JsonValue =
89 rapidjson::GenericValue<rapidjson::UTF8<>, rapidjson::CrtAllocator>;
91 rapidjson::GenericDocument<rapidjson::UTF8<>, rapidjson::CrtAllocator>;
93 rapidjson::GenericStringBuffer<rapidjson::UTF8<>,
94 rapidjson::CrtAllocator>;
95
96 /** Information about one routing section.*/
97 struct Role_info {
98 enum class Strategy {
102 };
103
105
106 std::string role_str() const;
107 std::string strategy_str() const;
108 static Strategy strategy_from_string(std::string_view strategy_str);
109 void set_strategy(const mysql_harness::ConfigSection *section);
110 void set_protocol(const mysql_harness::ConfigSection *section);
111
114 std::string host_;
116 };
117
118 /** Fill the internal routing guidelines doc.*/
120
121 /** Add routing guidelines name section.*/
122 void add_guidelines_name();
123
124 /** Add routing guidelines version section.*/
126
127 /** Add routing guidelines destinations section.*/
128 void add_destinations(
129 const std::string &section_name,
131
132 /** Add routing guidelines routes section.*/
134 const std::string &section_name,
135 const mysql_harness::ConfigSection *section,
137
138 /** Get detail info from one section. */
139 std::optional<Role_info> get_role_info(
140 const mysql_harness::ConfigSection *section) const;
141
142 /** Create route match section. */
144 const mysql_harness::ConfigSection *section) const;
145
146 /** If round-robin-with-fallback strategy is used get destination class that
147 * could be used as a fallback. */
148 std::optional<std::string> get_fallback_destination(
149 const Protocol::Type protocol, std::string_view host) const;
150
151 bool has_routes_{false};
152 std::optional<std::string> fallback_src_;
156 rapidjson::CrtAllocator allocator_;
157 JsonValue destinations_{rapidjson::kArrayType};
158 JsonValue routes_{rapidjson::kArrayType};
159};
160
161#endif // ROUTING_GUIDELINES_ADAPTER_INCLUDED
Type
supported protocols
Definition: base_protocol.h:32
Helper class used to create routing guideline from Router configuration.
Definition: routing_guidelines_adapter.h:63
std::optional< std::string > get_fallback_destination(const Protocol::Type protocol, std::string_view host) const
If round-robin-with-fallback strategy is used get destination class that could be used as a fallback.
Definition: routing_guidelines_adapter.cc:255
net::io_context & io_ctx_
Definition: routing_guidelines_adapter.h:154
rapidjson::GenericDocument< rapidjson::UTF8<>, rapidjson::CrtAllocator > JsonDocument
Definition: routing_guidelines_adapter.h:91
std::optional< std::string > fallback_src_
Definition: routing_guidelines_adapter.h:152
const mysql_harness::Config::ConstSectionList & sections_
Definition: routing_guidelines_adapter.h:153
JsonValue destinations_
Definition: routing_guidelines_adapter.h:157
void add_guidelines_version()
Add routing guidelines version section.
Definition: routing_guidelines_adapter.cc:101
Guidelines_from_conf_adapter(const mysql_harness::Config::ConstSectionList &sections, net::io_context &io_ctx)
Guidelines configuration adapter constructor.
Definition: routing_guidelines_adapter.cc:45
rapidjson::GenericValue< rapidjson::UTF8<>, rapidjson::CrtAllocator > JsonValue
Definition: routing_guidelines_adapter.h:89
bool has_routes_
Definition: routing_guidelines_adapter.h:151
stdx::expected< std::string, std::error_code > get_route_match(const mysql_harness::ConfigSection *section) const
Create route match section.
Definition: routing_guidelines_adapter.cc:202
void add_guidelines_name()
Add routing guidelines name section.
Definition: routing_guidelines_adapter.cc:94
stdx::expected< void, std::error_code > fill_guidelines_doc()
Fill the internal routing guidelines doc.
Definition: routing_guidelines_adapter.cc:51
JsonDocument json_guidelines_doc_
Definition: routing_guidelines_adapter.h:155
rapidjson::GenericStringBuffer< rapidjson::UTF8<>, rapidjson::CrtAllocator > JsonStringBuffer
Definition: routing_guidelines_adapter.h:94
stdx::expected< std::string, std::error_code > generate_guidelines_string()
Generate routing guideline based on the internal state of Guidelines_from_conf_adapter.
Definition: routing_guidelines_adapter.cc:81
JsonValue routes_
Definition: routing_guidelines_adapter.h:158
const std::string kDefaultName
Definition: routing_guidelines_adapter.h:85
stdx::expected< void, std::error_code > add_routes(const std::string &section_name, const mysql_harness::ConfigSection *section, const Guidelines_from_conf_adapter::Role_info &role_info)
Add routing guidelines routes section.
Definition: routing_guidelines_adapter.cc:304
std::optional< Role_info > get_role_info(const mysql_harness::ConfigSection *section) const
Get detail info from one section.
Definition: routing_guidelines_adapter.cc:172
void add_destinations(const std::string &section_name, const Guidelines_from_conf_adapter::Role_info &role_info)
Add routing guidelines destinations section.
Definition: routing_guidelines_adapter.cc:274
rapidjson::CrtAllocator allocator_
Definition: routing_guidelines_adapter.h:156
Configuration section.
Definition: config_parser.h:141
std::list< const ConfigSection * > ConstSectionList
Definition: config_parser.h:258
Definition: io_context.h:61
Definition: expected.h:286
Define rapidjson::SizeType to be std::uint64_t.
const char * host
Definition: mysqladmin.cc:66
#define ROUTING_EXPORT
Definition: routing_export.h:15
stdx::expected< std::string, std::error_code > ROUTING_EXPORT create_routing_guidelines_document(const mysql_harness::Config::ConstSectionList &sections, net::io_context &io_ctx)
Create a routing guideline from Router configuration.
Definition: routing_guidelines_adapter.cc:38
Information about one routing section.
Definition: routing_guidelines_adapter.h:97
Protocol::Type protocol_
Definition: routing_guidelines_adapter.h:115
std::string role_str() const
Definition: routing_guidelines_adapter.cc:109
std::string strategy_str() const
Definition: routing_guidelines_adapter.cc:120
Strategy
Definition: routing_guidelines_adapter.h:98
void set_protocol(const mysql_harness::ConfigSection *section)
Definition: routing_guidelines_adapter.cc:162
std::string host_
Definition: routing_guidelines_adapter.h:114
Role
Definition: routing_guidelines_adapter.h:104
Strategy strategy_
Definition: routing_guidelines_adapter.h:113
static Strategy strategy_from_string(std::string_view strategy_str)
Definition: routing_guidelines_adapter.cc:132
Role role_
Definition: routing_guidelines_adapter.h:112
void set_strategy(const mysql_harness::ConfigSection *section)
Definition: routing_guidelines_adapter.cc:143