MySQL 9.6.0
Source Code Documentation
cluster_metadata.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2018, 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 MYSQLROUTER_CLUSTER_METADATA_INCLUDED
27#define MYSQLROUTER_CLUSTER_METADATA_INCLUDED
28
30
31#include <chrono>
32#include <map>
33#include <optional>
34#include <stdexcept>
35#include <string>
36
39#include "socket_operations.h"
40
41namespace mysqlrouter {
42
43class MySQLSession;
44
46 unsigned int major;
47 unsigned int minor;
48 unsigned int patch;
49
50 bool operator<(const MetadataSchemaVersion &o) const {
51 if (major == o.major) {
52 if (minor == o.minor) {
53 return patch < o.patch;
54 } else {
55 return minor < o.minor;
56 }
57 } else {
58 return major < o.major;
59 }
60 }
61
62 bool operator<=(const MetadataSchemaVersion &o) const {
63 return operator<(o) || operator==(o);
64 }
65
66 bool operator>(const MetadataSchemaVersion &o) const {
67 return operator!=(o) && !operator<(o);
68 }
69
70 bool operator>=(const MetadataSchemaVersion &o) const {
71 return operator>(o) || operator==(o);
72 }
73
74 bool operator==(const MetadataSchemaVersion &o) const {
75 return major == o.major && minor == o.minor && patch == o.patch;
76 }
77
78 bool operator!=(const MetadataSchemaVersion &o) const {
79 return !operator==(o);
80 }
81};
82
83std::string ROUTER_CLUSTER_EXPORT
84to_string(const MetadataSchemaVersion &version);
85
86// Semantic version numbers that this Router version supports for bootstrap mode
88
89// Semantic version number that this Router version supports for routing mode
91 {2, 0, 0}};
92
93// Version that introduced views and support for ReplicaSet cluster type
95
96// Version that introduced support for ClusterSets
98
99// Version that introduced support for Routing guidelines
101
102// Version that introduced router_stats table
104
105// Version that will be is set while the metadata is being updated
107
108MetadataSchemaVersion ROUTER_CLUSTER_EXPORT
110
113 const mysqlrouter::MetadataSchemaVersion &available);
114
117
118// throws std::logic_error, MySQLSession::Error
120
121// throws MySQLSession::Error, std::logic_error, std::out_of_range
123
125
126std::string ROUTER_CLUSTER_EXPORT
128
129template <size_t N>
131 const mysqlrouter::MetadataSchemaVersion (&required)[N],
132 const mysqlrouter::MetadataSchemaVersion &available) {
133 for (size_t i = 0; i < N; ++i) {
134 if (metadata_schema_version_is_compatible(required[i], available))
135 return true;
136 }
137
138 return false;
139}
140
142 MySQLSession *mysql, const std::uint32_t router_id);
143
144template <size_t N>
146 std::string result;
147 for (size_t i = 0; i < N; ++i) {
148 result += to_string(version[i]);
149 if (i != N - 1) {
150 result += ", ";
151 }
152 }
153
154 return result;
155}
156
157enum class ClusterType {
158 GR_V2, /* based on Group Replication (metadata 2.x) */
159 GR_CS, /* based on Group Replication, part of ClusterSet (metadata 2.1+) */
160 RS_V2 /* ReplicaSet (metadata 2.x) */
161};
162
164 const MetadataSchemaVersion &schema_version, MySQLSession *mysql);
165
167get_cluster_type(const MetadataSchemaVersion &schema_version,
168 MySQLSession *mysql, unsigned int router_id);
169
170std::string ROUTER_CLUSTER_EXPORT to_string(const ClusterType cluster_type);
171
172class MetadataUpgradeInProgressException : public std::exception {};
173
176
178
180 public:
183
185 const std::string &value = "")
188 }
189
190 std::string to_string() const { return target_value_; }
191 const char *c_str() const { return target_value_.c_str(); }
192
196 }
197
199 void target_value(const std::string &value) { target_value_ = value; }
203 }
204
205 private:
207 std::string target_value_;
210};
211
212constexpr const std::string_view kNodeTagHidden{"_hidden"};
213constexpr const std::string_view kNodeTagDisconnectWhenHidden{
214 "_disconnect_existing_sessions_when_hidden"};
215
216constexpr const bool kNodeTagHiddenDefault{false};
217constexpr const bool kNodeTagDisconnectWhenHiddenDefault{true};
218
220
221std::optional<InstanceType> ROUTER_CLUSTER_EXPORT
222str_to_instance_type(const std::string &);
223
225std::string ROUTER_CLUSTER_EXPORT
227
229constexpr const std::chrono::milliseconds
231 std::chrono::milliseconds(60 * 1000);
233 5000}; // default TTL for ClusterSet is 5 seconds regardless if GR
234 // Notifications are used or not
237
240
242 std::vector<std::string> metadata_servers;
243 std::string cluster_id;
244 // GR name for GR cluster
246 // name of the cluster (or clusterset in case of the clusterset)
247 std::string name;
248 // whether this cluster is a primary cluster in case it is a member of a
249 // ClusterSet
250 bool is_primary{false};
251
252 std::string get_cluster_type_specific_id() const {
253 return cluster_type_specific_id.empty() ? cluster_id
255 }
256};
257
258using OptionsMap = std::map<std::string, std::string>;
259
260class metadata_missing : public std::runtime_error {
261 public:
262 explicit metadata_missing(const std::string &msg) : std::runtime_error(msg) {}
263};
264
266 public:
271 : mysql_(mysql),
272 socket_operations_(sockops),
273 schema_version_(schema_version) {}
274
275 virtual ~ClusterMetadata() = default;
276
278
279 /** @brief Checks if Router with given id is already registered in metadata
280 * database, and belongs to our machine
281 *
282 * @param router_id Router id
283 * @param hostname_override If non-empty, this hostname will be used instead
284 * of getting queried from OS
285 *
286 * @throws LocalHostnameResolutionError(std::runtime_error) on hostname query
287 * failure
288 * @throws std::runtime_error if router_id doesn't exist, or is associated
289 * with a different host
290 * @throws MySQLSession::Error(std::runtime_error) on database error
291 */
293 const uint32_t router_id, const std::string &hostname_override = "") = 0;
294
295 /** @brief Registers Router in metadata database
296 *
297 * @param router_name Router name
298 * @param overwrite if Router name is already registered, allow this
299 * registration to be "hijacked" instead of throwing
300 * @param hostname_override If non-empty, this hostname will be used instead
301 * of getting queried from OS
302 *
303 * @returns newly-assigned router_id
304 *
305 * @throws LocalHostnameResolutionError(std::runtime_error) on hostname query
306 * failure, std::runtime_error on other failure
307 */
308 virtual uint32_t register_router(
309 const std::string &router_name, const bool overwrite,
310 const std::string &hostname_override = "") = 0;
311
312 virtual void update_router_info(
313 const uint32_t router_id, const std::string &cluster_id,
314 const std::string &target_cluster, const std::string &rw_endpoint,
315 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
316 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
317 const std::string &username, const std::string &local_cluster) = 0;
318
319 virtual std::vector<std::string> get_routing_mode_queries() = 0;
320
321 /** @brief Verify that host is a valid metadata server
322 *
323 *
324 * @throws MySQLSession::Error TODO
325 * @throws std::runtime_error TODO
326 * @throws std::out_of_range TODO
327 * @throws std::logic_error TODO
328 *
329 * checks that the server
330 *
331 * - has the metadata in the correct version
332 * - contains metadata for the group it's in (in case of GR cluster)
333 * (metadata server group must be same as managed group currently)
334 */
335 virtual void require_metadata_is_ok();
336
337 /** @brief Verify that host is a valid cluster member (either Group
338 * Replication or ReplicaSet cluster)
339 *
340 * @throws MySQLSession::Error TODO
341 * @throws std::runtime_error TODO
342 * @throws std::out_of_range TODO
343 * @throws std::logic_error TODO
344 */
345 virtual void require_cluster_is_ok() = 0;
346
347 virtual std::string get_cluster_type_specific_id() = 0;
348
350
352
353 virtual std::vector<std::string> get_grant_statements(
354 const mysqlrouter::MetadataSchemaVersion &schema_version,
355 const std::string &new_accounts) const = 0;
356
357 virtual std::vector<std::tuple<std::string, unsigned long>>
359
360 /**
361 * Get name of the cluster that was used for bootstrap.
362 */
363 virtual std::string get_local_cluster();
364
366
367 virtual uint64_t get_view_id(
368 const std::string & /*cluster_type_specific_id*/) {
369 return 0;
370 }
371
372 protected:
373 // throws MySQLSession::Error, std::out_of_range, std::logic_error
374 virtual uint64_t query_cluster_count() = 0;
375
379};
380
382 public:
387 : ClusterMetadata(schema_version, mysql, sockops) {}
388
389 ~ClusterMetadataGR() override = default;
390
391 // For GR cluster Group Replication ID
392 std::string get_cluster_type_specific_id() override;
393
394 void require_cluster_is_ok() override;
395
396 std::vector<std::tuple<std::string, unsigned long>> fetch_cluster_hosts()
397 override;
398};
399
401 public:
406 : ClusterMetadataGR(schema_version, mysql, sockops) {}
407
408 ~ClusterMetadataGRV2() override = default;
409
412 }
413
415
416 std::vector<std::string> get_routing_mode_queries() override;
417
419
421 uint32_t router_id, const std::string &hostname_override = "") override;
422
424 const uint32_t router_id, const std::string &cluster_id,
425 const std::string &target_cluster, const std::string &rw_endpoint,
426 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
427 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
428 const std::string &username, const std::string &local_cluster) override;
429
430 uint32_t register_router(const std::string &router_name, const bool overwrite,
431 const std::string &hostname_override = "") override;
432
433 std::vector<std::string> get_grant_statements(
434 const mysqlrouter::MetadataSchemaVersion &schema_version,
435 const std::string &new_accounts) const override;
436
437 protected:
438 uint64_t query_cluster_count() override;
439};
440
442 public:
444 const MetadataSchemaVersion &schema_version, MySQLSession *mysql,
445 const OptionsMap & /*options*/,
448
449 ~ClusterMetadataGRInClusterSet() override = default;
450
453 }
454
455 // nothing specific to check for ClusterSet
456 void require_metadata_is_ok() override {}
457
459
460 std::vector<std::tuple<std::string, unsigned long>> fetch_cluster_hosts()
461 override;
462
463 enum class TargetClusterType {
464 // target should be the cluster on which we bootstrap
466 // target should be the Priamry Cluster
468 // target should be the Cluster with the given name
470 };
471
472 std::string get_cluster_type_specific_id() override;
473 uint64_t get_view_id(const std::string &cluster_type_specific_id) override;
474
476 const uint32_t router_id, const std::string &cluster_id,
477 const std::string &target_cluster, const std::string &rw_endpoint,
478 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
479 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
480 const std::string &username, const std::string &local_cluster) override;
481
482 std::string get_local_cluster() override;
483
484 protected:
487};
488
490 public:
495 : ClusterMetadata(schema_version, mysql, sockops) {}
496
497 ~ClusterMetadataAR() override = default;
498
501 }
502
503 void require_cluster_is_ok() override {
504 // Nothing specific to check for ReplicaSet cluster
505 }
506
508
511 }
512
513 std::string get_cluster_type_specific_id() override;
514
515 uint64_t get_view_id(
516 const std::string & /*cluster_type_specific_id*/) override;
517
518 std::vector<std::string> get_routing_mode_queries() override;
519
521 uint32_t router_id, const std::string &hostname_override = "") override;
522
524 const uint32_t router_id, const std::string &cluster_id,
525 const std::string &target_cluster, const std::string &rw_endpoint,
526 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
527 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
528 const std::string &username, const std::string &local_cluster) override;
529
530 uint32_t register_router(const std::string &router_name, const bool overwrite,
531 const std::string &hostname_override = "") override;
532
533 std::vector<std::string> get_grant_statements(
534 const mysqlrouter::MetadataSchemaVersion &schema_version,
535 const std::string &new_accounts) const override;
536
537 std::vector<std::tuple<std::string, unsigned long>> fetch_cluster_hosts()
538 override;
539
540 protected:
541 uint64_t query_cluster_count() override;
542};
543
544std::unique_ptr<ClusterMetadata> ROUTER_CLUSTER_EXPORT
545create_metadata(const MetadataSchemaVersion &schema_version,
546 MySQLSession *mysql, const OptionsMap &options = {},
549
550} // namespace mysqlrouter
551#endif
Base class to allow multiple SocketOperations implementations (at least one "real" and one mock for t...
Definition: socket_operations.h:45
static SocketOperations * instance()
Definition: socket_operations.cc:42
Definition: cluster_metadata.h:489
void require_cluster_is_ok() override
Verify that host is a valid cluster member (either Group Replication or ReplicaSet cluster)
Definition: cluster_metadata.h:503
InstanceType fetch_current_instance_type() override
Definition: cluster_metadata.h:509
std::vector< std::string > get_grant_statements(const mysqlrouter::MetadataSchemaVersion &schema_version, const std::string &new_accounts) const override
Definition: cluster_metadata.cc:1359
std::vector< std::tuple< std::string, unsigned long > > fetch_cluster_hosts() override
Definition: cluster_metadata.cc:1123
std::vector< std::string > get_routing_mode_queries() override
Definition: cluster_metadata.cc:1112
mysqlrouter::ClusterType get_type() override
Definition: cluster_metadata.h:499
uint64_t get_view_id(const std::string &) override
Definition: cluster_metadata.cc:1296
uint32_t register_router(const std::string &router_name, const bool overwrite, const std::string &hostname_override="") override
Registers Router in metadata database.
Definition: cluster_metadata.cc:430
void verify_router_id_is_ours(uint32_t router_id, const std::string &hostname_override="") override
Checks if Router with given id is already registered in metadata database, and belongs to our machine...
Definition: cluster_metadata.cc:126
std::string get_cluster_type_specific_id() override
Definition: cluster_metadata.cc:1094
void update_router_info(const uint32_t router_id, const std::string &cluster_id, const std::string &target_cluster, const std::string &rw_endpoint, const std::string &ro_endpoint, const std::string &rw_split_endpoint, const std::string &rw_x_endpoint, const std::string &ro_x_endpoint, const std::string &username, const std::string &local_cluster) override
Definition: cluster_metadata.cc:357
ClusterMetadataAR(const MetadataSchemaVersion &schema_version, MySQLSession *mysql, mysql_harness::SocketOperationsBase *sockops=mysql_harness::SocketOperations::instance())
Definition: cluster_metadata.h:491
ClusterInfo fetch_metadata_servers() override
Definition: cluster_metadata.cc:1090
~ClusterMetadataAR() override=default
uint64_t query_cluster_count() override
Definition: cluster_metadata.cc:1069
Definition: cluster_metadata.h:441
void require_metadata_is_ok() override
Verify that host is a valid metadata server.
Definition: cluster_metadata.h:456
std::string target_cluster_name_
Definition: cluster_metadata.h:486
std::vector< std::tuple< std::string, unsigned long > > fetch_cluster_hosts() override
Definition: cluster_metadata.cc:941
TargetClusterType target_cluster_type_
Definition: cluster_metadata.h:485
void update_router_info(const uint32_t router_id, const std::string &cluster_id, const std::string &target_cluster, const std::string &rw_endpoint, const std::string &ro_endpoint, const std::string &rw_split_endpoint, const std::string &rw_x_endpoint, const std::string &ro_x_endpoint, const std::string &username, const std::string &local_cluster) override
Definition: cluster_metadata.cc:369
mysqlrouter::ClusterType get_type() override
Definition: cluster_metadata.h:451
ClusterInfo fetch_metadata_servers() override
Definition: cluster_metadata.cc:839
std::string get_cluster_type_specific_id() override
Definition: cluster_metadata.cc:972
uint64_t get_view_id(const std::string &cluster_type_specific_id) override
Definition: cluster_metadata.cc:995
std::string get_local_cluster() override
Get name of the cluster that was used for bootstrap.
Definition: cluster_metadata.cc:953
TargetClusterType
Definition: cluster_metadata.h:463
ClusterMetadataGRInClusterSet(const MetadataSchemaVersion &schema_version, MySQLSession *mysql, const OptionsMap &, mysql_harness::SocketOperationsBase *sockops=mysql_harness::SocketOperations::instance())
Definition: cluster_metadata.cc:817
Definition: cluster_metadata.h:400
void verify_router_id_is_ours(uint32_t router_id, const std::string &hostname_override="") override
Checks if Router with given id is already registered in metadata database, and belongs to our machine...
Definition: cluster_metadata.cc:120
std::vector< std::string > get_routing_mode_queries() override
Definition: cluster_metadata.cc:1065
void update_router_info(const uint32_t router_id, const std::string &cluster_id, const std::string &target_cluster, const std::string &rw_endpoint, const std::string &ro_endpoint, const std::string &rw_split_endpoint, const std::string &rw_x_endpoint, const std::string &ro_x_endpoint, const std::string &username, const std::string &local_cluster) override
Definition: cluster_metadata.cc:345
uint64_t query_cluster_count() override
Definition: cluster_metadata.cc:723
ClusterInfo fetch_metadata_servers() override
Definition: cluster_metadata.cc:795
~ClusterMetadataGRV2() override=default
ClusterMetadataGRV2(const MetadataSchemaVersion &schema_version, MySQLSession *mysql, mysql_harness::SocketOperationsBase *sockops=mysql_harness::SocketOperations::instance())
Definition: cluster_metadata.h:402
mysqlrouter::ClusterType get_type() override
Definition: cluster_metadata.h:410
uint32_t register_router(const std::string &router_name, const bool overwrite, const std::string &hostname_override="") override
Registers Router in metadata database.
Definition: cluster_metadata.cc:423
InstanceType fetch_current_instance_type() override
Definition: cluster_metadata.cc:799
std::vector< std::string > get_grant_statements(const mysqlrouter::MetadataSchemaVersion &schema_version, const std::string &new_accounts) const override
Definition: cluster_metadata.cc:1353
Definition: cluster_metadata.h:381
ClusterMetadataGR(const MetadataSchemaVersion &schema_version, MySQLSession *mysql, mysql_harness::SocketOperationsBase *sockops=mysql_harness::SocketOperations::instance())
Definition: cluster_metadata.h:383
void require_cluster_is_ok() override
Verify that host is a valid cluster member (either Group Replication or ReplicaSet cluster)
Definition: cluster_metadata.cc:612
std::vector< std::tuple< std::string, unsigned long > > fetch_cluster_hosts() override
Definition: cluster_metadata.cc:646
~ClusterMetadataGR() override=default
std::string get_cluster_type_specific_id() override
Definition: cluster_metadata.cc:684
Definition: cluster_metadata.h:265
virtual void require_cluster_is_ok()=0
Verify that host is a valid cluster member (either Group Replication or ReplicaSet cluster)
virtual std::string get_cluster_type_specific_id()=0
MySQLSession & get_session()
Definition: cluster_metadata.h:365
virtual mysqlrouter::ClusterType get_type()=0
virtual std::string get_local_cluster()
Get name of the cluster that was used for bootstrap.
Definition: cluster_metadata.cc:608
virtual uint64_t get_view_id(const std::string &)
Definition: cluster_metadata.h:367
mysqlrouter::MetadataSchemaVersion schema_version_
Definition: cluster_metadata.h:378
virtual uint64_t query_cluster_count()=0
virtual std::vector< std::string > get_routing_mode_queries()=0
ClusterMetadata(const MetadataSchemaVersion &schema_version, MySQLSession *mysql, mysql_harness::SocketOperationsBase *sockops=mysql_harness::SocketOperations::instance())
Definition: cluster_metadata.h:267
virtual ~ClusterMetadata()=default
virtual void verify_router_id_is_ours(const uint32_t router_id, const std::string &hostname_override="")=0
Checks if Router with given id is already registered in metadata database, and belongs to our machine...
virtual ClusterInfo fetch_metadata_servers()=0
virtual void update_router_info(const uint32_t router_id, const std::string &cluster_id, const std::string &target_cluster, const std::string &rw_endpoint, const std::string &ro_endpoint, const std::string &rw_split_endpoint, const std::string &rw_x_endpoint, const std::string &ro_x_endpoint, const std::string &username, const std::string &local_cluster)=0
mysql_harness::SocketOperationsBase * socket_operations_
Definition: cluster_metadata.h:377
MySQLSession * mysql_
Definition: cluster_metadata.h:376
virtual InstanceType fetch_current_instance_type()=0
virtual std::vector< std::tuple< std::string, unsigned long > > fetch_cluster_hosts()=0
virtual void require_metadata_is_ok()
Verify that host is a valid metadata server.
Definition: cluster_metadata.cc:588
virtual uint32_t register_router(const std::string &router_name, const bool overwrite, const std::string &hostname_override="")=0
Registers Router in metadata database.
virtual std::vector< std::string > get_grant_statements(const mysqlrouter::MetadataSchemaVersion &schema_version, const std::string &new_accounts) const =0
Definition: cluster_metadata.h:172
Definition: mysql_session.h:157
Definition: cluster_metadata.h:179
void invalidated_cluster_routing_policy(const InvalidatedClusterRoutingPolicy value)
Definition: cluster_metadata.h:200
InvalidatedClusterRoutingPolicy invalidated_cluster_routing_policy() const
Definition: cluster_metadata.h:194
void target_value(const std::string &value)
Definition: cluster_metadata.h:199
TargetCluster(const TargetType type=TargetType::ByPrimaryRole, const std::string &value="")
Definition: cluster_metadata.h:184
TargetType
Definition: cluster_metadata.h:181
InvalidatedClusterRoutingPolicy
Definition: cluster_metadata.h:182
void target_type(const TargetType value)
Definition: cluster_metadata.h:198
std::string target_value_
Definition: cluster_metadata.h:207
TargetType target_type_
Definition: cluster_metadata.h:206
InvalidatedClusterRoutingPolicy invalidated_cluster_routing_policy_
Definition: cluster_metadata.h:208
std::string to_string() const
Definition: cluster_metadata.h:190
const char * c_str() const
Definition: cluster_metadata.h:191
TargetType target_type() const
Definition: cluster_metadata.h:193
Definition: cluster_metadata.h:260
metadata_missing(const std::string &msg)
Definition: cluster_metadata.h:262
Definition: expected.h:286
std::atomic< Type > N
Definition: ut0counter.h:225
std::chrono::milliseconds milliseconds
Definition: authorize_manager.cc:67
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
Definition: instrumented_condition_variable.h:32
Definition: base64.h:43
void ROUTER_CLUSTER_EXPORT verify_routing_guidelines_version(MySQLSession *mysql, const std::uint32_t router_id)
Definition: cluster_metadata.cc:460
std::string ROUTER_CLUSTER_EXPORT get_incompatible_server_version_msg(MySQLSession *mysql)
Definition: cluster_metadata.cc:1444
constexpr MetadataSchemaVersion kClusterSetsMetadataVersion
Definition: cluster_metadata.h:97
constexpr MetadataSchemaVersion kNewMetadataVersion
Definition: cluster_metadata.h:94
bool ROUTER_CLUSTER_EXPORT is_part_of_cluster_set(MySQLSession *mysql)
Definition: cluster_metadata.cc:1175
ClusterType
Definition: cluster_metadata.h:157
InstanceType
Definition: cluster_metadata.h:219
constexpr MetadataSchemaVersion kUpgradeInProgressMetadataVersion
Definition: cluster_metadata.h:106
std::map< std::string, std::string > OptionsMap
Definition: cluster_metadata.h:258
constexpr MetadataSchemaVersion kRequiredRoutingMetadataSchemaVersion[]
Definition: cluster_metadata.h:90
constexpr const std::string_view kNodeTagDisconnectWhenHidden
Definition: cluster_metadata.h:213
ClusterType ROUTER_CLUSTER_EXPORT get_cluster_type(const MetadataSchemaVersion &schema_version, MySQLSession *mysql)
Definition: cluster_metadata.cc:1218
constexpr MetadataSchemaVersion kRoutingGuidelinesMetadataVersion
Definition: cluster_metadata.h:100
constexpr const std::string_view kNodeTagHidden
Definition: cluster_metadata.h:212
MetadataSchemaVersion ROUTER_CLUSTER_EXPORT get_metadata_schema_version(MySQLSession *mysql)
Definition: cluster_metadata.cc:493
std::string ROUTER_CLUSTER_EXPORT get_metadata_schema_uncompatible_msg(const mysqlrouter::MetadataSchemaVersion &version)
Definition: cluster_metadata.cc:451
stdx::expected< void, std::string > ROUTER_CLUSTER_EXPORT setup_metadata_session(MySQLSession &session)
Definition: cluster_metadata.cc:1370
bool ROUTER_CLUSTER_EXPORT is_server_version_compatible(MySQLSession *mysql)
Definition: cluster_metadata.cc:1440
const bool kDefaultCloseConnectionAfterRefreshClusterSet
Definition: cluster_metadata.h:239
bool ROUTER_CLUSTER_EXPORT check_group_has_quorum(MySQLSession *mysql)
Definition: cluster_metadata.cc:560
constexpr MetadataSchemaVersion kRequiredBootstrapSchemaVersion[]
Definition: cluster_metadata.h:87
const bool kDefaultCloseConnectionAfterRefreshCluster
Definition: cluster_metadata.h:238
constexpr const std::chrono::milliseconds kDefaultMetadataTTLClusterGRNotificationsON
Definition: cluster_metadata.h:230
constexpr const std::chrono::milliseconds kDefaultMetadataTTLClusterSet
Definition: cluster_metadata.h:232
constexpr MetadataSchemaVersion kRouterStatsMetadataVersion
Definition: cluster_metadata.h:103
const bool kDefaultUseGRNotificationsClusterSet
Definition: cluster_metadata.h:236
bool ROUTER_CLUSTER_EXPORT check_group_replication_online(MySQLSession *mysql)
Definition: cluster_metadata.cc:544
bool ROUTER_CLUSTER_EXPORT metadata_schema_version_is_compatible(const mysqlrouter::MetadataSchemaVersion &required, const mysqlrouter::MetadataSchemaVersion &available)
Definition: cluster_metadata.cc:437
constexpr const std::chrono::milliseconds kDefaultMetadataTTLCluster
Definition: cluster_metadata.h:228
std::unique_ptr< ClusterMetadata > ROUTER_CLUSTER_EXPORT create_metadata(const MetadataSchemaVersion &schema_version, MySQLSession *mysql, const OptionsMap &options={}, mysql_harness::SocketOperationsBase *sockops=mysql_harness::SocketOperations::instance())
Definition: cluster_metadata.cc:1266
constexpr const bool kNodeTagDisconnectWhenHiddenDefault
Definition: cluster_metadata.h:217
constexpr const bool kNodeTagHiddenDefault
Definition: cluster_metadata.h:216
std::optional< InstanceType > ROUTER_CLUSTER_EXPORT str_to_instance_type(const std::string &)
Definition: cluster_metadata.cc:1398
std::string ROUTER_CLUSTER_EXPORT to_string(const MetadataSchemaVersion &version)
Definition: cluster_metadata.cc:488
const bool kDefaultUseGRNotificationsCluster
Definition: cluster_metadata.h:235
Definition: options.cc:57
Define std::hash<Gtid>.
Definition: gtid.h:355
struct result result
Definition: result.h:34
required uint64 version
Definition: replication_group_member_actions.proto:41
required string type
Definition: replication_group_member_actions.proto:34
#define ROUTER_CLUSTER_EXPORT
Definition: router_cluster_export.h:15
Definition: cluster_metadata.h:241
bool is_primary
Definition: cluster_metadata.h:250
std::string get_cluster_type_specific_id() const
Definition: cluster_metadata.h:252
std::string cluster_type_specific_id
Definition: cluster_metadata.h:245
std::string cluster_id
Definition: cluster_metadata.h:243
std::vector< std::string > metadata_servers
Definition: cluster_metadata.h:242
std::string name
Definition: cluster_metadata.h:247
Definition: cluster_metadata.h:45
bool operator<(const MetadataSchemaVersion &o) const
Definition: cluster_metadata.h:50
bool operator>(const MetadataSchemaVersion &o) const
Definition: cluster_metadata.h:66
bool operator==(const MetadataSchemaVersion &o) const
Definition: cluster_metadata.h:74
bool operator>=(const MetadataSchemaVersion &o) const
Definition: cluster_metadata.h:70
unsigned int minor
Definition: cluster_metadata.h:47
unsigned int major
Definition: cluster_metadata.h:46
unsigned int patch
Definition: cluster_metadata.h:48
bool operator!=(const MetadataSchemaVersion &o) const
Definition: cluster_metadata.h:78
bool operator<=(const MetadataSchemaVersion &o) const
Definition: cluster_metadata.h:62
Definition: result.h:30