MySQL 9.3.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 will be is set while the metadata is being updated
104
105MetadataSchemaVersion ROUTER_CLUSTER_EXPORT
107
110 const mysqlrouter::MetadataSchemaVersion &available);
111
114
115// throws std::logic_error, MySQLSession::Error
117
118// throws MySQLSession::Error, std::logic_error, std::out_of_range
120
122
123std::string ROUTER_CLUSTER_EXPORT
125
126template <size_t N>
128 const mysqlrouter::MetadataSchemaVersion (&required)[N],
129 const mysqlrouter::MetadataSchemaVersion &available) {
130 for (size_t i = 0; i < N; ++i) {
131 if (metadata_schema_version_is_compatible(required[i], available))
132 return true;
133 }
134
135 return false;
136}
137
139 MySQLSession *mysql, const std::uint32_t router_id);
140
141template <size_t N>
143 std::string result;
144 for (size_t i = 0; i < N; ++i) {
145 result += to_string(version[i]);
146 if (i != N - 1) {
147 result += ", ";
148 }
149 }
150
151 return result;
152}
153
154enum class ClusterType {
155 GR_V2, /* based on Group Replication (metadata 2.x) */
156 GR_CS, /* based on Group Replication, part of ClusterSet (metadata 2.1+) */
157 RS_V2 /* ReplicaSet (metadata 2.x) */
158};
159
161get_cluster_type(const MetadataSchemaVersion &schema_version,
162 MySQLSession *mysql, unsigned int router_id = 0);
163
164std::string ROUTER_CLUSTER_EXPORT to_string(const ClusterType cluster_type);
165
166class MetadataUpgradeInProgressException : public std::exception {};
167
170
172
174 public:
177
179 const std::string &value = "")
182 }
183
184 std::string to_string() const { return target_value_; }
185 const char *c_str() const { return target_value_.c_str(); }
186
190 }
191
193 void target_value(const std::string &value) { target_value_ = value; }
197 }
198
199 private:
201 std::string target_value_;
204};
205
206constexpr const std::string_view kNodeTagHidden{"_hidden"};
207constexpr const std::string_view kNodeTagDisconnectWhenHidden{
208 "_disconnect_existing_sessions_when_hidden"};
209
210constexpr const bool kNodeTagHiddenDefault{false};
211constexpr const bool kNodeTagDisconnectWhenHiddenDefault{true};
212
214
215std::optional<InstanceType> ROUTER_CLUSTER_EXPORT
216str_to_instance_type(const std::string &);
217
219std::string ROUTER_CLUSTER_EXPORT
221
223constexpr const std::chrono::milliseconds
225 std::chrono::milliseconds(60 * 1000);
227 5000}; // default TTL for ClusterSet is 5 seconds regardless if GR
228 // Notifications are used or not
231
234
236 std::vector<std::string> metadata_servers;
237 std::string cluster_id;
238 // GR name for GR cluster
240 // name of the cluster (or clusterset in case of the clusterset)
241 std::string name;
242 // whether this cluster is a primary cluster in case it is a member of a
243 // ClusterSet
244 bool is_primary{false};
245
246 std::string get_cluster_type_specific_id() const {
247 return cluster_type_specific_id.empty() ? cluster_id
249 }
250};
251
252using OptionsMap = std::map<std::string, std::string>;
253
254class metadata_missing : public std::runtime_error {
255 public:
256 explicit metadata_missing(const std::string &msg) : std::runtime_error(msg) {}
257};
258
260 public:
265 : mysql_(mysql),
266 socket_operations_(sockops),
267 schema_version_(schema_version) {}
268
269 virtual ~ClusterMetadata() = default;
270
272
273 /** @brief Checks if Router with given id is already registered in metadata
274 * database, and belongs to our machine
275 *
276 * @param router_id Router id
277 * @param hostname_override If non-empty, this hostname will be used instead
278 * of getting queried from OS
279 *
280 * @throws LocalHostnameResolutionError(std::runtime_error) on hostname query
281 * failure
282 * @throws std::runtime_error if router_id doesn't exist, or is associated
283 * with a different host
284 * @throws MySQLSession::Error(std::runtime_error) on database error
285 */
287 const uint32_t router_id, const std::string &hostname_override = "") = 0;
288
289 /** @brief Registers Router in metadata database
290 *
291 * @param router_name Router name
292 * @param overwrite if Router name is already registered, allow this
293 * registration to be "hijacked" instead of throwing
294 * @param hostname_override If non-empty, this hostname will be used instead
295 * of getting queried from OS
296 *
297 * @returns newly-assigned router_id
298 *
299 * @throws LocalHostnameResolutionError(std::runtime_error) on hostname query
300 * failure, std::runtime_error on other failure
301 */
302 virtual uint32_t register_router(
303 const std::string &router_name, const bool overwrite,
304 const std::string &hostname_override = "") = 0;
305
306 virtual void update_router_info(
307 const uint32_t router_id, const std::string &cluster_id,
308 const std::string &target_cluster, const std::string &rw_endpoint,
309 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
310 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
311 const std::string &username, const std::string &local_cluster) = 0;
312
313 virtual std::vector<std::string> get_routing_mode_queries() = 0;
314
315 /** @brief Verify that host is a valid metadata server
316 *
317 *
318 * @throws MySQLSession::Error TODO
319 * @throws std::runtime_error TODO
320 * @throws std::out_of_range TODO
321 * @throws std::logic_error TODO
322 *
323 * checks that the server
324 *
325 * - has the metadata in the correct version
326 * - contains metadata for the group it's in (in case of GR cluster)
327 * (metadata server group must be same as managed group currently)
328 */
329 virtual void require_metadata_is_ok();
330
331 /** @brief Verify that host is a valid cluster member (either Group
332 * Replication or ReplicaSet cluster)
333 *
334 * @throws MySQLSession::Error TODO
335 * @throws std::runtime_error TODO
336 * @throws std::out_of_range TODO
337 * @throws std::logic_error TODO
338 */
339 virtual void require_cluster_is_ok() = 0;
340
341 virtual std::string get_cluster_type_specific_id() = 0;
342
344
346
347 virtual std::vector<std::string> get_grant_statements(
348 const std::string &new_accounts) const = 0;
349
350 virtual std::vector<std::tuple<std::string, unsigned long>>
352
353 /**
354 * Get name of the cluster that was used for bootstrap.
355 */
356 virtual std::string get_local_cluster();
357
359
360 virtual uint64_t get_view_id(
361 const std::string & /*cluster_type_specific_id*/) {
362 return 0;
363 }
364
365 protected:
366 // throws MySQLSession::Error, std::out_of_range, std::logic_error
367 virtual uint64_t query_cluster_count() = 0;
368
372};
373
375 public:
380 : ClusterMetadata(schema_version, mysql, sockops) {}
381
382 ~ClusterMetadataGR() override = default;
383
384 // For GR cluster Group Replication ID
385 std::string get_cluster_type_specific_id() override;
386
387 void require_cluster_is_ok() override;
388
389 std::vector<std::tuple<std::string, unsigned long>> fetch_cluster_hosts()
390 override;
391};
392
394 public:
399 : ClusterMetadataGR(schema_version, mysql, sockops) {}
400
401 ~ClusterMetadataGRV2() override = default;
402
405 }
406
408
409 std::vector<std::string> get_routing_mode_queries() override;
410
412
414 uint32_t router_id, const std::string &hostname_override = "") override;
415
417 const uint32_t router_id, const std::string &cluster_id,
418 const std::string &target_cluster, const std::string &rw_endpoint,
419 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
420 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
421 const std::string &username, const std::string &local_cluster) override;
422
423 uint32_t register_router(const std::string &router_name, const bool overwrite,
424 const std::string &hostname_override = "") override;
425
426 std::vector<std::string> get_grant_statements(
427 const std::string &new_accounts) const override;
428
429 protected:
430 uint64_t query_cluster_count() override;
431};
432
434 public:
436 const MetadataSchemaVersion &schema_version, MySQLSession *mysql,
437 const OptionsMap & /*options*/,
440
441 ~ClusterMetadataGRInClusterSet() override = default;
442
445 }
446
447 // nothing specific to check for ClusterSet
448 void require_metadata_is_ok() override {}
449
451
452 std::vector<std::tuple<std::string, unsigned long>> fetch_cluster_hosts()
453 override;
454
455 enum class TargetClusterType {
456 // target should be the cluster on which we bootstrap
458 // target should be the Priamry Cluster
460 // target should be the Cluster with the given name
462 };
463
464 std::string get_cluster_type_specific_id() override;
465 uint64_t get_view_id(const std::string &cluster_type_specific_id) override;
466
468 const uint32_t router_id, const std::string &cluster_id,
469 const std::string &target_cluster, const std::string &rw_endpoint,
470 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
471 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
472 const std::string &username, const std::string &local_cluster) override;
473
474 std::string get_local_cluster() override;
475
476 protected:
479};
480
482 public:
487 : ClusterMetadata(schema_version, mysql, sockops) {}
488
489 ~ClusterMetadataAR() override = default;
490
493 }
494
495 void require_cluster_is_ok() override {
496 // Nothing specific to check for ReplicaSet cluster
497 }
498
500
503 }
504
505 std::string get_cluster_type_specific_id() override;
506
507 uint64_t get_view_id(
508 const std::string & /*cluster_type_specific_id*/) override;
509
510 std::vector<std::string> get_routing_mode_queries() override;
511
513 uint32_t router_id, const std::string &hostname_override = "") override;
514
516 const uint32_t router_id, const std::string &cluster_id,
517 const std::string &target_cluster, const std::string &rw_endpoint,
518 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
519 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
520 const std::string &username, const std::string &local_cluster) override;
521
522 uint32_t register_router(const std::string &router_name, const bool overwrite,
523 const std::string &hostname_override = "") override;
524
525 std::vector<std::string> get_grant_statements(
526 const std::string &new_accounts) const override;
527
528 std::vector<std::tuple<std::string, unsigned long>> fetch_cluster_hosts()
529 override;
530
531 protected:
532 uint64_t query_cluster_count() override;
533};
534
535std::unique_ptr<ClusterMetadata> ROUTER_CLUSTER_EXPORT
536create_metadata(const MetadataSchemaVersion &schema_version,
537 MySQLSession *mysql, const OptionsMap &options = {},
540
541} // namespace mysqlrouter
542#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:481
void require_cluster_is_ok() override
Verify that host is a valid cluster member (either Group Replication or ReplicaSet cluster)
Definition: cluster_metadata.h:495
InstanceType fetch_current_instance_type() override
Definition: cluster_metadata.h:501
std::vector< std::tuple< std::string, unsigned long > > fetch_cluster_hosts() override
Definition: cluster_metadata.cc:1123
std::vector< std::string > get_grant_statements(const std::string &new_accounts) const override
Definition: cluster_metadata.cc:1338
std::vector< std::string > get_routing_mode_queries() override
Definition: cluster_metadata.cc:1112
mysqlrouter::ClusterType get_type() override
Definition: cluster_metadata.h:491
uint64_t get_view_id(const std::string &) override
Definition: cluster_metadata.cc:1286
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:483
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:433
void require_metadata_is_ok() override
Verify that host is a valid metadata server.
Definition: cluster_metadata.h:448
std::string target_cluster_name_
Definition: cluster_metadata.h:478
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:477
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:443
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:455
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:393
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_grant_statements(const std::string &new_accounts) const override
Definition: cluster_metadata.cc:1333
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:395
mysqlrouter::ClusterType get_type() override
Definition: cluster_metadata.h:403
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
Definition: cluster_metadata.h:374
ClusterMetadataGR(const MetadataSchemaVersion &schema_version, MySQLSession *mysql, mysql_harness::SocketOperationsBase *sockops=mysql_harness::SocketOperations::instance())
Definition: cluster_metadata.h:376
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:259
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
virtual std::vector< std::string > get_grant_statements(const std::string &new_accounts) const =0
MySQLSession & get_session()
Definition: cluster_metadata.h:358
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:360
mysqlrouter::MetadataSchemaVersion schema_version_
Definition: cluster_metadata.h:371
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:261
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:370
MySQLSession * mysql_
Definition: cluster_metadata.h:369
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.
Definition: cluster_metadata.h:166
Definition: mysql_session.h:157
Definition: cluster_metadata.h:173
void invalidated_cluster_routing_policy(const InvalidatedClusterRoutingPolicy value)
Definition: cluster_metadata.h:194
InvalidatedClusterRoutingPolicy invalidated_cluster_routing_policy() const
Definition: cluster_metadata.h:188
void target_value(const std::string &value)
Definition: cluster_metadata.h:193
TargetCluster(const TargetType type=TargetType::ByPrimaryRole, const std::string &value="")
Definition: cluster_metadata.h:178
TargetType
Definition: cluster_metadata.h:175
InvalidatedClusterRoutingPolicy
Definition: cluster_metadata.h:176
void target_type(const TargetType value)
Definition: cluster_metadata.h:192
std::string target_value_
Definition: cluster_metadata.h:201
TargetType target_type_
Definition: cluster_metadata.h:200
InvalidatedClusterRoutingPolicy invalidated_cluster_routing_policy_
Definition: cluster_metadata.h:202
std::string to_string() const
Definition: cluster_metadata.h:184
const char * c_str() const
Definition: cluster_metadata.h:185
TargetType target_type() const
Definition: cluster_metadata.h:187
Definition: cluster_metadata.h:254
metadata_missing(const std::string &msg)
Definition: cluster_metadata.h:256
Definition: expected.h:286
std::atomic< Type > N
Definition: ut0counter.h:225
std::chrono::milliseconds milliseconds
Definition: authorize_manager.cc:68
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:1422
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:154
InstanceType
Definition: cluster_metadata.h:213
constexpr MetadataSchemaVersion kUpgradeInProgressMetadataVersion
Definition: cluster_metadata.h:103
std::map< std::string, std::string > OptionsMap
Definition: cluster_metadata.h:252
constexpr MetadataSchemaVersion kRequiredRoutingMetadataSchemaVersion[]
Definition: cluster_metadata.h:90
constexpr const std::string_view kNodeTagDisconnectWhenHidden
Definition: cluster_metadata.h:207
constexpr MetadataSchemaVersion kRoutingGuidelinesMetadataVersion
Definition: cluster_metadata.h:100
constexpr const std::string_view kNodeTagHidden
Definition: cluster_metadata.h:206
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:1348
bool ROUTER_CLUSTER_EXPORT is_server_version_compatible(MySQLSession *mysql)
Definition: cluster_metadata.cc:1418
const bool kDefaultCloseConnectionAfterRefreshClusterSet
Definition: cluster_metadata.h:233
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:232
constexpr const std::chrono::milliseconds kDefaultMetadataTTLClusterGRNotificationsON
Definition: cluster_metadata.h:224
ClusterType ROUTER_CLUSTER_EXPORT get_cluster_type(const MetadataSchemaVersion &schema_version, MySQLSession *mysql, unsigned int router_id=0)
Definition: cluster_metadata.cc:1216
constexpr const std::chrono::milliseconds kDefaultMetadataTTLClusterSet
Definition: cluster_metadata.h:226
const bool kDefaultUseGRNotificationsClusterSet
Definition: cluster_metadata.h:230
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:222
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:1256
constexpr const bool kNodeTagDisconnectWhenHiddenDefault
Definition: cluster_metadata.h:211
constexpr const bool kNodeTagHiddenDefault
Definition: cluster_metadata.h:210
std::optional< InstanceType > ROUTER_CLUSTER_EXPORT str_to_instance_type(const std::string &)
Definition: cluster_metadata.cc:1376
std::string ROUTER_CLUSTER_EXPORT to_string(const MetadataSchemaVersion &version)
Definition: cluster_metadata.cc:488
const bool kDefaultUseGRNotificationsCluster
Definition: cluster_metadata.h:229
Definition: options.cc:57
Definition: gcs_xcom_synode.h:64
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:235
bool is_primary
Definition: cluster_metadata.h:244
std::string get_cluster_type_specific_id() const
Definition: cluster_metadata.h:246
std::string cluster_type_specific_id
Definition: cluster_metadata.h:239
std::string cluster_id
Definition: cluster_metadata.h:237
std::vector< std::string > metadata_servers
Definition: cluster_metadata.h:236
std::string name
Definition: cluster_metadata.h:241
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