MySQL 9.5.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
161 const MetadataSchemaVersion &schema_version, MySQLSession *mysql);
162
164get_cluster_type(const MetadataSchemaVersion &schema_version,
165 MySQLSession *mysql, unsigned int router_id);
166
167std::string ROUTER_CLUSTER_EXPORT to_string(const ClusterType cluster_type);
168
169class MetadataUpgradeInProgressException : public std::exception {};
170
173
175
177 public:
180
182 const std::string &value = "")
185 }
186
187 std::string to_string() const { return target_value_; }
188 const char *c_str() const { return target_value_.c_str(); }
189
193 }
194
196 void target_value(const std::string &value) { target_value_ = value; }
200 }
201
202 private:
204 std::string target_value_;
207};
208
209constexpr const std::string_view kNodeTagHidden{"_hidden"};
210constexpr const std::string_view kNodeTagDisconnectWhenHidden{
211 "_disconnect_existing_sessions_when_hidden"};
212
213constexpr const bool kNodeTagHiddenDefault{false};
214constexpr const bool kNodeTagDisconnectWhenHiddenDefault{true};
215
217
218std::optional<InstanceType> ROUTER_CLUSTER_EXPORT
219str_to_instance_type(const std::string &);
220
222std::string ROUTER_CLUSTER_EXPORT
224
226constexpr const std::chrono::milliseconds
228 std::chrono::milliseconds(60 * 1000);
230 5000}; // default TTL for ClusterSet is 5 seconds regardless if GR
231 // Notifications are used or not
234
237
239 std::vector<std::string> metadata_servers;
240 std::string cluster_id;
241 // GR name for GR cluster
243 // name of the cluster (or clusterset in case of the clusterset)
244 std::string name;
245 // whether this cluster is a primary cluster in case it is a member of a
246 // ClusterSet
247 bool is_primary{false};
248
249 std::string get_cluster_type_specific_id() const {
250 return cluster_type_specific_id.empty() ? cluster_id
252 }
253};
254
255using OptionsMap = std::map<std::string, std::string>;
256
257class metadata_missing : public std::runtime_error {
258 public:
259 explicit metadata_missing(const std::string &msg) : std::runtime_error(msg) {}
260};
261
263 public:
268 : mysql_(mysql),
269 socket_operations_(sockops),
270 schema_version_(schema_version) {}
271
272 virtual ~ClusterMetadata() = default;
273
275
276 /** @brief Checks if Router with given id is already registered in metadata
277 * database, and belongs to our machine
278 *
279 * @param router_id Router id
280 * @param hostname_override If non-empty, this hostname will be used instead
281 * of getting queried from OS
282 *
283 * @throws LocalHostnameResolutionError(std::runtime_error) on hostname query
284 * failure
285 * @throws std::runtime_error if router_id doesn't exist, or is associated
286 * with a different host
287 * @throws MySQLSession::Error(std::runtime_error) on database error
288 */
290 const uint32_t router_id, const std::string &hostname_override = "") = 0;
291
292 /** @brief Registers Router in metadata database
293 *
294 * @param router_name Router name
295 * @param overwrite if Router name is already registered, allow this
296 * registration to be "hijacked" instead of throwing
297 * @param hostname_override If non-empty, this hostname will be used instead
298 * of getting queried from OS
299 *
300 * @returns newly-assigned router_id
301 *
302 * @throws LocalHostnameResolutionError(std::runtime_error) on hostname query
303 * failure, std::runtime_error on other failure
304 */
305 virtual uint32_t register_router(
306 const std::string &router_name, const bool overwrite,
307 const std::string &hostname_override = "") = 0;
308
309 virtual void update_router_info(
310 const uint32_t router_id, const std::string &cluster_id,
311 const std::string &target_cluster, const std::string &rw_endpoint,
312 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
313 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
314 const std::string &username, const std::string &local_cluster) = 0;
315
316 virtual std::vector<std::string> get_routing_mode_queries() = 0;
317
318 /** @brief Verify that host is a valid metadata server
319 *
320 *
321 * @throws MySQLSession::Error TODO
322 * @throws std::runtime_error TODO
323 * @throws std::out_of_range TODO
324 * @throws std::logic_error TODO
325 *
326 * checks that the server
327 *
328 * - has the metadata in the correct version
329 * - contains metadata for the group it's in (in case of GR cluster)
330 * (metadata server group must be same as managed group currently)
331 */
332 virtual void require_metadata_is_ok();
333
334 /** @brief Verify that host is a valid cluster member (either Group
335 * Replication or ReplicaSet cluster)
336 *
337 * @throws MySQLSession::Error TODO
338 * @throws std::runtime_error TODO
339 * @throws std::out_of_range TODO
340 * @throws std::logic_error TODO
341 */
342 virtual void require_cluster_is_ok() = 0;
343
344 virtual std::string get_cluster_type_specific_id() = 0;
345
347
349
350 virtual std::vector<std::string> get_grant_statements(
351 const std::string &new_accounts) const = 0;
352
353 virtual std::vector<std::tuple<std::string, unsigned long>>
355
356 /**
357 * Get name of the cluster that was used for bootstrap.
358 */
359 virtual std::string get_local_cluster();
360
362
363 virtual uint64_t get_view_id(
364 const std::string & /*cluster_type_specific_id*/) {
365 return 0;
366 }
367
368 protected:
369 // throws MySQLSession::Error, std::out_of_range, std::logic_error
370 virtual uint64_t query_cluster_count() = 0;
371
375};
376
378 public:
383 : ClusterMetadata(schema_version, mysql, sockops) {}
384
385 ~ClusterMetadataGR() override = default;
386
387 // For GR cluster Group Replication ID
388 std::string get_cluster_type_specific_id() override;
389
390 void require_cluster_is_ok() override;
391
392 std::vector<std::tuple<std::string, unsigned long>> fetch_cluster_hosts()
393 override;
394};
395
397 public:
402 : ClusterMetadataGR(schema_version, mysql, sockops) {}
403
404 ~ClusterMetadataGRV2() override = default;
405
408 }
409
411
412 std::vector<std::string> get_routing_mode_queries() override;
413
415
417 uint32_t router_id, const std::string &hostname_override = "") override;
418
420 const uint32_t router_id, const std::string &cluster_id,
421 const std::string &target_cluster, const std::string &rw_endpoint,
422 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
423 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
424 const std::string &username, const std::string &local_cluster) override;
425
426 uint32_t register_router(const std::string &router_name, const bool overwrite,
427 const std::string &hostname_override = "") override;
428
429 std::vector<std::string> get_grant_statements(
430 const std::string &new_accounts) const override;
431
432 protected:
433 uint64_t query_cluster_count() override;
434};
435
437 public:
439 const MetadataSchemaVersion &schema_version, MySQLSession *mysql,
440 const OptionsMap & /*options*/,
443
444 ~ClusterMetadataGRInClusterSet() override = default;
445
448 }
449
450 // nothing specific to check for ClusterSet
451 void require_metadata_is_ok() override {}
452
454
455 std::vector<std::tuple<std::string, unsigned long>> fetch_cluster_hosts()
456 override;
457
458 enum class TargetClusterType {
459 // target should be the cluster on which we bootstrap
461 // target should be the Priamry Cluster
463 // target should be the Cluster with the given name
465 };
466
467 std::string get_cluster_type_specific_id() override;
468 uint64_t get_view_id(const std::string &cluster_type_specific_id) override;
469
471 const uint32_t router_id, const std::string &cluster_id,
472 const std::string &target_cluster, const std::string &rw_endpoint,
473 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
474 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
475 const std::string &username, const std::string &local_cluster) override;
476
477 std::string get_local_cluster() override;
478
479 protected:
482};
483
485 public:
490 : ClusterMetadata(schema_version, mysql, sockops) {}
491
492 ~ClusterMetadataAR() override = default;
493
496 }
497
498 void require_cluster_is_ok() override {
499 // Nothing specific to check for ReplicaSet cluster
500 }
501
503
506 }
507
508 std::string get_cluster_type_specific_id() override;
509
510 uint64_t get_view_id(
511 const std::string & /*cluster_type_specific_id*/) override;
512
513 std::vector<std::string> get_routing_mode_queries() override;
514
516 uint32_t router_id, const std::string &hostname_override = "") override;
517
519 const uint32_t router_id, const std::string &cluster_id,
520 const std::string &target_cluster, const std::string &rw_endpoint,
521 const std::string &ro_endpoint, const std::string &rw_split_endpoint,
522 const std::string &rw_x_endpoint, const std::string &ro_x_endpoint,
523 const std::string &username, const std::string &local_cluster) override;
524
525 uint32_t register_router(const std::string &router_name, const bool overwrite,
526 const std::string &hostname_override = "") override;
527
528 std::vector<std::string> get_grant_statements(
529 const std::string &new_accounts) const override;
530
531 std::vector<std::tuple<std::string, unsigned long>> fetch_cluster_hosts()
532 override;
533
534 protected:
535 uint64_t query_cluster_count() override;
536};
537
538std::unique_ptr<ClusterMetadata> ROUTER_CLUSTER_EXPORT
539create_metadata(const MetadataSchemaVersion &schema_version,
540 MySQLSession *mysql, const OptionsMap &options = {},
543
544} // namespace mysqlrouter
545#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:484
void require_cluster_is_ok() override
Verify that host is a valid cluster member (either Group Replication or ReplicaSet cluster)
Definition: cluster_metadata.h:498
InstanceType fetch_current_instance_type() override
Definition: cluster_metadata.h:504
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:1348
std::vector< std::string > get_routing_mode_queries() override
Definition: cluster_metadata.cc:1112
mysqlrouter::ClusterType get_type() override
Definition: cluster_metadata.h:494
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:486
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:436
void require_metadata_is_ok() override
Verify that host is a valid metadata server.
Definition: cluster_metadata.h:451
std::string target_cluster_name_
Definition: cluster_metadata.h:481
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:480
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:446
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:458
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:396
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:1343
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:398
mysqlrouter::ClusterType get_type() override
Definition: cluster_metadata.h:406
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:377
ClusterMetadataGR(const MetadataSchemaVersion &schema_version, MySQLSession *mysql, mysql_harness::SocketOperationsBase *sockops=mysql_harness::SocketOperations::instance())
Definition: cluster_metadata.h:379
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:262
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:361
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:363
mysqlrouter::MetadataSchemaVersion schema_version_
Definition: cluster_metadata.h:374
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:264
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:373
MySQLSession * mysql_
Definition: cluster_metadata.h:372
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:169
Definition: mysql_session.h:157
Definition: cluster_metadata.h:176
void invalidated_cluster_routing_policy(const InvalidatedClusterRoutingPolicy value)
Definition: cluster_metadata.h:197
InvalidatedClusterRoutingPolicy invalidated_cluster_routing_policy() const
Definition: cluster_metadata.h:191
void target_value(const std::string &value)
Definition: cluster_metadata.h:196
TargetCluster(const TargetType type=TargetType::ByPrimaryRole, const std::string &value="")
Definition: cluster_metadata.h:181
TargetType
Definition: cluster_metadata.h:178
InvalidatedClusterRoutingPolicy
Definition: cluster_metadata.h:179
void target_type(const TargetType value)
Definition: cluster_metadata.h:195
std::string target_value_
Definition: cluster_metadata.h:204
TargetType target_type_
Definition: cluster_metadata.h:203
InvalidatedClusterRoutingPolicy invalidated_cluster_routing_policy_
Definition: cluster_metadata.h:205
std::string to_string() const
Definition: cluster_metadata.h:187
const char * c_str() const
Definition: cluster_metadata.h:188
TargetType target_type() const
Definition: cluster_metadata.h:190
Definition: cluster_metadata.h:257
metadata_missing(const std::string &msg)
Definition: cluster_metadata.h:259
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:1432
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:216
constexpr MetadataSchemaVersion kUpgradeInProgressMetadataVersion
Definition: cluster_metadata.h:103
std::map< std::string, std::string > OptionsMap
Definition: cluster_metadata.h:255
constexpr MetadataSchemaVersion kRequiredRoutingMetadataSchemaVersion[]
Definition: cluster_metadata.h:90
constexpr const std::string_view kNodeTagDisconnectWhenHidden
Definition: cluster_metadata.h:210
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:209
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:1358
bool ROUTER_CLUSTER_EXPORT is_server_version_compatible(MySQLSession *mysql)
Definition: cluster_metadata.cc:1428
const bool kDefaultCloseConnectionAfterRefreshClusterSet
Definition: cluster_metadata.h:236
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:235
constexpr const std::chrono::milliseconds kDefaultMetadataTTLClusterGRNotificationsON
Definition: cluster_metadata.h:227
constexpr const std::chrono::milliseconds kDefaultMetadataTTLClusterSet
Definition: cluster_metadata.h:229
const bool kDefaultUseGRNotificationsClusterSet
Definition: cluster_metadata.h:233
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:225
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:214
constexpr const bool kNodeTagHiddenDefault
Definition: cluster_metadata.h:213
std::optional< InstanceType > ROUTER_CLUSTER_EXPORT str_to_instance_type(const std::string &)
Definition: cluster_metadata.cc:1386
std::string ROUTER_CLUSTER_EXPORT to_string(const MetadataSchemaVersion &version)
Definition: cluster_metadata.cc:488
const bool kDefaultUseGRNotificationsCluster
Definition: cluster_metadata.h:232
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:238
bool is_primary
Definition: cluster_metadata.h:247
std::string get_cluster_type_specific_id() const
Definition: cluster_metadata.h:249
std::string cluster_type_specific_id
Definition: cluster_metadata.h:242
std::string cluster_id
Definition: cluster_metadata.h:240
std::vector< std::string > metadata_servers
Definition: cluster_metadata.h:239
std::string name
Definition: cluster_metadata.h:244
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