26#ifndef METADATA_CACHE_METADATA_CACHE_INCLUDED
27#define METADATA_CACHE_METADATA_CACHE_INCLUDED
75 const unsigned router_id,
const std::string &clusterset_id,
76 const std::vector<mysql_harness::TcpDestination> &metadata_servers,
77 std::shared_ptr<MetaData> cluster_metadata,
83 bool use_cluster_notifications =
false,
84 bool close_connection_after_refresh =
false);
135 bool wait_primary_failover(
const std::string &
server_uuid,
139 void refresh_thread();
142 static void *run_thread(
void *context);
169 void add_acceptor_handler_listener(
178 void remove_acceptor_handler_listener(
186 void add_md_refresh_listener(
195 void remove_md_refresh_listener(
199 return stats_([](
auto const &
stats)
201 return {
stats.refresh_failed,
202 stats.refresh_succeeded,
203 stats.last_refresh_succeeded,
204 stats.last_refresh_failed,
205 stats.last_metadata_server_host,
206 stats.last_metadata_server_port};
210 std::chrono::milliseconds
ttl()
const {
return ttl_config_.ttl; }
215 void enable_fetch_auth_metadata() { auth_metadata_fetch_enabled_ =
true; }
219 void check_auth_metadata_timers()
const;
221 std::pair<bool, MetaData::auth_credentials_t::mapped_type>
222 get_rest_user_auth_data(
const std::string &
user);
228 trigger_acceptor_update_on_next_refresh_ =
true;
231 void add_routing_guidelines_update_callbacks(
235 on_routing_guidelines_change_callback);
237 void clear_routing_guidelines_update_callbacks();
239 void add_router_info_update_callback(
242 void clear_router_info_update_callback();
248 virtual bool refresh(
bool needs_writable_node) = 0;
250 void on_refresh_failed(
bool terminated,
bool md_servers_reachable =
false);
251 void on_refresh_succeeded(
256 void on_instances_changed(
const bool md_servers_reachable,
257 uint64_t view_id = 0);
264 void on_handle_sockets_acceptors();
274 void on_md_refresh(
const bool cluster_nodes_changed,
275 const std::string &routing_guidelines_doc);
278 void on_refresh_requested();
281 void on_refresh_completed();
284 bool update_auth_cache();
287 void update_router_attributes();
290 void update_router_last_check_in();
293 void update_reported_routing_guideline_name(
294 const std::string &guideline_name);
296 void update_routing_guidelines(
const std::string &routing_guidelines_doc);
331 bool auth_metadata_fetch_enabled_{
false};
353 std::atomic<bool> terminated_{
false};
355 bool refresh_requested_{
false};
374 std::set<metadata_cache::AcceptorUpdateHandlerInterface *>
376 std::set<metadata_cache::MetadataRefreshListenerInterface *>
379 update_routing_guidelines_callback_{
nullptr};
383 std::vector<metadata_cache::MetadataCacheAPI::update_router_info_callback_t>
389 uint64_t refresh_failed{0};
390 uint64_t refresh_succeeded{0};
398 bool initial_attributes_update_done_{
false};
399 uint32_t periodic_stats_update_counter_{1};
400 std::chrono::steady_clock::time_point last_periodic_stats_update_timestamp_{
401 std::chrono::steady_clock::now()};
403 bool ready_announced_{
false};
409 std::atomic<bool> trigger_acceptor_update_on_next_refresh_{
false};
413 bool needs_initial_attributes_update();
414 bool needs_last_check_in_update();
Monitor pattern.
Definition: monitor.h:39
MySQLRouterThread provides higher level interface to managing threads.
Definition: mysql_router_thread.h:80
Definition: destination.h:40
Definition: cluster_metadata.h:135
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:180
char * user
Definition: mysqladmin.cc:67
char server_uuid[UUID_LENGTH+1]
Definition: mysqld.cc:1489
static bool timeout(bool(*wait_condition)())
Timeout function.
Definition: log0meb.cc:498
static const size_t kDefaultStackSizeInKiloBytes
Definition: mysql_router_thread.h:44
ClusterType
Definition: cluster_metadata.h:116
ServerMode
Definition: datatypes.h:50
mode
Definition: file_handle.h:61
std::vector< T, ut::allocator< T > > vector
Specialization of vector which uses allocator.
Definition: ut0new.h:2876
SSL connection related options.
Definition: datatypes.h:34
Definition: mysqlslap.cc:242
double seconds()
Definition: task.cc:314