MySQL 9.2.0
Source Code Documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
routing_guidelines_adapter.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2024, 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 also distributed 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 included with MySQL.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23*/
24
25#ifndef ROUTING_GUIDELINES_ADAPTER_INCLUDED
26#define ROUTING_GUIDELINES_ADAPTER_INCLUDED
27
28#include <optional>
29#include <string>
30#include <string_view>
31#include <system_error>
32
33#ifdef RAPIDJSON_NO_SIZETYPEDEFINE
34#include "my_rapidjson_size_t.h"
35#endif
36#include <rapidjson/document.h>
37#include <rapidjson/error/en.h>
38#include <rapidjson/prettywriter.h>
39#include <rapidjson/stringbuffer.h>
40
45#include "mysqlrouter/uri.h"
46#include "protocol/protocol.h"
47
48/**
49 * Create a routing guideline from Router configuration.
50 *
51 * @param sections Router configuration sections
52 * @param io_ctx IO context
53 */
57 net::io_context &io_ctx);
58
59/**
60 * Helper class used to create routing guideline from Router configuration.
61 */
63 public:
64 /**
65 * Guidelines configuration adapter constructor.
66 *
67 * @param sections Router configuration sections
68 * @param io_ctx IO context
69 */
72 net::io_context &io_ctx);
73
74 /**
75 * Generate routing guideline based on the internal state of
76 * Guidelines_from_conf_adapter.
77 *
78 * In case when there are only static routing plugins running the
79 * guidelines document will be empty.
80 */
82
83 private:
84 const std::string kDefaultName{
85 "Routing guidelines generated from a config file"};
86
87 using JsonValue =
88 rapidjson::GenericValue<rapidjson::UTF8<>, rapidjson::CrtAllocator>;
90 rapidjson::GenericDocument<rapidjson::UTF8<>, rapidjson::CrtAllocator>;
92 rapidjson::GenericStringBuffer<rapidjson::UTF8<>,
93 rapidjson::CrtAllocator>;
94
95 /** Information about one routing section.*/
96 struct Role_info {
97 enum class Strategy {
101 };
102
104
105 std::string role_str() const;
106 std::string strategy_str() const;
107 static Strategy strategy_from_string(std::string_view strategy_str);
108 void set_strategy(const mysql_harness::ConfigSection *section);
109 void set_protocol(const mysql_harness::ConfigSection *section);
110
113 std::string host_;
115 };
116
117 /** Fill the internal routing guidelines doc.*/
119
120 /** Add routing guidelines name section.*/
121 void add_guidelines_name();
122
123 /** Add routing guidelines version section.*/
125
126 /** Add routing guidelines destinations section.*/
127 void add_destinations(
128 const std::string &section_name,
130
131 /** Add routing guidelines routes section.*/
133 const std::string &section_name,
134 const mysql_harness::ConfigSection *section,
136
137 /** Get detail info from one section. */
138 std::optional<Role_info> get_role_info(
139 const mysql_harness::ConfigSection *section) const;
140
141 /** Create route match section. */
143 const mysql_harness::ConfigSection *section) const;
144
145 /** If round-robin-with-fallback strategy is used get destination class that
146 * could be used as a fallback. */
147 std::optional<std::string> get_fallback_destination(
148 const Protocol::Type protocol, std::string_view host) const;
149
150 bool has_routes_{false};
151 std::optional<std::string> fallback_src_;
155 rapidjson::CrtAllocator allocator_;
156 JsonValue destinations_{rapidjson::kArrayType};
157 JsonValue routes_{rapidjson::kArrayType};
158};
159
160#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:62
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:254
net::io_context & io_ctx_
Definition: routing_guidelines_adapter.h:153
rapidjson::GenericDocument< rapidjson::UTF8<>, rapidjson::CrtAllocator > JsonDocument
Definition: routing_guidelines_adapter.h:90
std::optional< std::string > fallback_src_
Definition: routing_guidelines_adapter.h:151
const mysql_harness::Config::ConstSectionList & sections_
Definition: routing_guidelines_adapter.h:152
JsonValue destinations_
Definition: routing_guidelines_adapter.h:156
void add_guidelines_version()
Add routing guidelines version section.
Definition: routing_guidelines_adapter.cc:100
Guidelines_from_conf_adapter(const mysql_harness::Config::ConstSectionList &sections, net::io_context &io_ctx)
Guidelines configuration adapter constructor.
Definition: routing_guidelines_adapter.cc:44
rapidjson::GenericValue< rapidjson::UTF8<>, rapidjson::CrtAllocator > JsonValue
Definition: routing_guidelines_adapter.h:88
bool has_routes_
Definition: routing_guidelines_adapter.h:150
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:201
void add_guidelines_name()
Add routing guidelines name section.
Definition: routing_guidelines_adapter.cc:93
stdx::expected< void, std::error_code > fill_guidelines_doc()
Fill the internal routing guidelines doc.
Definition: routing_guidelines_adapter.cc:50
JsonDocument json_guidelines_doc_
Definition: routing_guidelines_adapter.h:154
rapidjson::GenericStringBuffer< rapidjson::UTF8<>, rapidjson::CrtAllocator > JsonStringBuffer
Definition: routing_guidelines_adapter.h:93
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:80
JsonValue routes_
Definition: routing_guidelines_adapter.h:157
const std::string kDefaultName
Definition: routing_guidelines_adapter.h:84
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:303
std::optional< Role_info > get_role_info(const mysql_harness::ConfigSection *section) const
Get detail info from one section.
Definition: routing_guidelines_adapter.cc:171
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:273
rapidjson::CrtAllocator allocator_
Definition: routing_guidelines_adapter.h:155
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:37
Information about one routing section.
Definition: routing_guidelines_adapter.h:96
Protocol::Type protocol_
Definition: routing_guidelines_adapter.h:114
std::string role_str() const
Definition: routing_guidelines_adapter.cc:108
std::string strategy_str() const
Definition: routing_guidelines_adapter.cc:119
Strategy
Definition: routing_guidelines_adapter.h:97
void set_protocol(const mysql_harness::ConfigSection *section)
Definition: routing_guidelines_adapter.cc:161
std::string host_
Definition: routing_guidelines_adapter.h:113
Role
Definition: routing_guidelines_adapter.h:103
Strategy strategy_
Definition: routing_guidelines_adapter.h:112
static Strategy strategy_from_string(std::string_view strategy_str)
Definition: routing_guidelines_adapter.cc:131
Role role_
Definition: routing_guidelines_adapter.h:111
void set_strategy(const mysql_harness::ConfigSection *section)
Definition: routing_guidelines_adapter.cc:142