MySQL 8.0.40
Source Code Documentation
cluster_metadata.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2016, 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 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 METADATA_CACHE_CLUSTER_METADATA_INCLUDED
27#define METADATA_CACHE_CLUSTER_METADATA_INCLUDED
28
30
35#include "tcp_address.h"
36
37#include <chrono>
38#include <cstring>
39#include <map>
40#include <memory>
41#include <optional>
42#include <string>
43#include <vector>
44
46
47namespace mysqlrouter {
48class MySQLSession;
49}
50namespace xcl {
51class XSession;
52}
53
55 std::function<bool(mysqlrouter::MySQLSession &connection,
57
58/** @class ClusterMetadata
59 *
60 * The `ClusterMetadata` class encapsulates a connection to the Metadata server.
61 * It uses the mysqlrouter::MySQLSession to setup, manage and retrieve results.
62 *
63 */
65 public:
66 /** @brief Constructor
67 *
68 * @param session_config Metadata MySQL session configuration
69 * @param ssl_options SSL related options to use for MySQL connections)
70 */
73 const mysqlrouter::SSLOptions &ssl_options);
74
75 // disable copy as it isn't needed right now. Feel free to enable
76 // must be explicitly defined though.
77 explicit ClusterMetadata(const ClusterMetadata &) = delete;
79
80 /** @brief Destructor
81 *
82 * Disconnect and release the connection to the metadata node.
83 */
84 ~ClusterMetadata() override;
85
86 /** @brief Connects with the Metadata server and sets up the session
87 * parameters
88 *
89 *
90 * @param metadata_server the server instance for which the connection
91 * should be attempted.
92 *
93 * @return a boolean to indicate if the connection and session parameters
94 * setup was successful.
95 */
97 &metadata_server) noexcept override;
98
99 /** @brief Disconnects from the Metadata server
100 *
101 * This is a no-op, as MySQLSession object used underneath for
102 * connection handling employs RAII, making this method unnecessary.
103 */
104 void disconnect() noexcept override {}
105
106 /** @brief Gets the object representing the session to the metadata server
107 */
108 std::shared_ptr<mysqlrouter::MySQLSession> get_connection() override {
109 return metadata_connection_;
110 }
111
113 const metadata_cache::metadata_server_t &rw_server,
114 const unsigned router_id,
115 const metadata_cache::RouterAttributes &router_attributes) override;
116
118 const metadata_cache::metadata_server_t &rw_server,
119 const unsigned router_id) override;
120
121 auth_credentials_t fetch_auth_credentials(
122 const mysqlrouter::TargetCluster &target_cluster) override;
123
124 std::optional<metadata_cache::metadata_server_t> find_rw_server(
125 const std::vector<metadata_cache::ManagedInstance> &instances);
126
127 std::optional<metadata_cache::metadata_server_t> find_rw_server(
128 const std::vector<metadata_cache::ManagedCluster> &clusters);
129
130 std::optional<std::chrono::seconds>
132 return {};
133 }
134
135 protected:
136 /** Connects a MYSQL connection to the given instance
137 */
138 bool do_connect(mysqlrouter::MySQLSession &connection,
140
141 // throws metadata_cache::metadata_error and
142 // MetadataUpgradeInProgressException
143 mysqlrouter::MetadataSchemaVersion get_and_check_metadata_schema_version(
145
146 // Metadata node generic information
149
151
152#if 0 // not used so far
153 // The number of times we should try connecting to the metadata server if a
154 // connection attempt fails.
155 int connection_attempts_;
156#endif
157
158 // connection to metadata server (it may also be shared with GR status queries
159 // for optimisation purposes)
160 std::shared_ptr<mysqlrouter::MySQLSession> metadata_connection_;
161};
162
163std::string as_string(const char *input_str);
164
167 const size_t classic_port_column,
168 const size_t x_port_column);
169
171 const std::string &attributes);
172
173bool get_hidden(const std::string &attributes, std::string &out_warning);
174bool get_disconnect_existing_sessions_when_hidden(const std::string &attributes,
175 std::string &out_warning);
176
177#endif // METADATA_CACHE_CLUSTER_METADATA_INCLUDED
The ClusterMetadata class encapsulates a connection to the Metadata server.
Definition: cluster_metadata.h:64
~ClusterMetadata() override
Destructor.
ClusterMetadata(const ClusterMetadata &)=delete
std::optional< std::chrono::seconds > get_periodic_stats_update_frequency() noexcept override
Definition: cluster_metadata.h:131
ClusterMetadata & operator=(const ClusterMetadata &)=delete
mysql_ssl_mode ssl_mode_
Definition: cluster_metadata.h:147
void disconnect() noexcept override
Disconnects from the Metadata server.
Definition: cluster_metadata.h:104
mysqlrouter::SSLOptions ssl_options_
Definition: cluster_metadata.h:148
std::shared_ptr< mysqlrouter::MySQLSession > metadata_connection_
Definition: cluster_metadata.h:160
metadata_cache::MetadataCacheMySQLSessionConfig session_config_
Definition: cluster_metadata.h:150
std::shared_ptr< mysqlrouter::MySQLSession > get_connection() override
Gets the object representing the session to the metadata server.
Definition: cluster_metadata.h:108
The metadata class is used to create a pluggable transport layer from which the metadata is fetched f...
Definition: metadata.h:51
virtual bool update_router_last_check_in(const metadata_cache::metadata_server_t &rw_server, const unsigned router_id)=0
virtual bool connect_and_setup_session(const metadata_cache::metadata_server_t &metadata_server)=0
virtual bool update_router_attributes(const metadata_cache::metadata_server_t &rw_server, const unsigned router_id, const metadata_cache::RouterAttributes &router_attributes)=0
virtual auth_credentials_t fetch_auth_credentials(const mysqlrouter::TargetCluster &target_cluster)=0
Class ManagedInstance represents a server managed by the topology.
Definition: metadata_cache_datatypes.h:105
Defines an IP address with port number
Definition: tcp_address.h:40
Definition: mysql_session.h:153
std::vector< const char * > Row
Definition: mysql_session.h:157
Definition: cluster_metadata.h:161
void set_instance_attributes(metadata_cache::ManagedInstance &instance, const std::string &attributes)
Definition: cluster_metadata.cc:603
std::function< bool(mysqlrouter::MySQLSession &connection, const metadata_cache::ManagedInstance &mi)> ConnectCallback
Definition: cluster_metadata.h:56
std::string as_string(const char *input_str)
Return a string representation of the input character string.
Definition: cluster_metadata.cc:143
bool get_hidden(const std::string &attributes, std::string &out_warning)
Definition: cluster_metadata.cc:591
bool set_instance_ports(metadata_cache::ManagedInstance &instance, const mysqlrouter::MySQLSession::Row &row, const size_t classic_port_column, const size_t x_port_column)
Definition: cluster_metadata.cc:279
bool get_disconnect_existing_sessions_when_hidden(const std::string &attributes, std::string &out_warning)
Definition: cluster_metadata.cc:596
#define METADATA_CACHE_EXPORT
Definition: metadata_cache_export.h:15
mysql_ssl_mode
Definition: mysql.h:271
static void do_connect(struct st_command *command)
Definition: mysqltest.cc:6631
Definition: dim.h:358
Definition: cluster_metadata.h:50
Definition: group_replication_metadata.h:38
Metadata MySQL session configuration.
Definition: metadata_cache_datatypes.h:221
Definition: metadata_cache_datatypes.h:237
Definition: cluster_metadata.h:40
SSL connection related options.
Definition: datatypes.h:39