26#ifndef MYSQLROUTER_UNREACHABLE_DESTINATIONS_QUARANTINE_INCLUDED
27#define MYSQLROUTER_UNREACHABLE_DESTINATIONS_QUARANTINE_INCLUDED
69 uint32_t qurantine_threshold);
133 const bool nodes_changed_on_md_refresh,
207 std::vector<std::string> referencing_instances,
209 std::function<
void()> on_delete, std::function<
void()> on_connect_ok)
274 std::vector<std::shared_ptr<Unreachable_destination_candidate>>
static IoComponent & get_instance()
Definition: io_component.cc:146
net::io_context & io_context()
get ref to the io_context.
Definition: io_component.cc:58
Information about unreachable destination candidates that is shared between plugin instances.
Definition: unreachable_destinations_quarantine.h:51
std::map< mysql_harness::Destination, uint32_t > destination_errors_
Definition: unreachable_destinations_quarantine.h:276
bool is_quarantined(const mysql_harness::Destination &dest)
Query the quarantined destination candidates set and check if the given destination candidate is quar...
Definition: unreachable_destinations_quarantine.cc:148
void quarantine_handler(const std::error_code &ec, const mysql_harness::Destination &dest)
Async handler responsible of periodic checks for destination candidate availability.
Definition: unreachable_destinations_quarantine.cc:192
void refresh_quarantine(const std::string &instance_name, const bool nodes_changed_on_md_refresh, const AllowedNodes &available_destinations)
Refresh the quarantined destination candidates list on metadata refresh.
Definition: unreachable_destinations_quarantine.cc:158
QuarantineRoutingCallbacks routing_callbacks_
Definition: unreachable_destinations_quarantine.h:288
std::atomic< bool > stopped_
Definition: unreachable_destinations_quarantine.h:281
void register_route(const std::string &route_name)
Definition: unreachable_destinations_quarantine.cc:45
void drop_stray_destinations(const std::string &instance_name, const AllowedNodes &routing_new_destinations)
If destination list of a routing instance has changed it is possible that some destinations are no lo...
Definition: unreachable_destinations_quarantine.cc:314
std::chrono::seconds quarantine_interval_
Definition: unreachable_destinations_quarantine.h:270
uint32_t quarantine_threshold_
Definition: unreachable_destinations_quarantine.h:271
void init(std::chrono::seconds quarantine_interval, uint32_t qurantine_threshold)
Initialize the unreachable destination candidate mechanism.
Definition: unreachable_destinations_quarantine.cc:51
net::io_context & io_ctx_
Definition: unreachable_destinations_quarantine.h:272
std::atomic< size_t > quarantined_dest_counter_
number of quarantined destinations
Definition: unreachable_destinations_quarantine.h:284
std::condition_variable quarantine_empty_cond_
Definition: unreachable_destinations_quarantine.h:285
std::vector< std::shared_ptr< Unreachable_destination_candidate > > quarantined_destination_candidates_
Definition: unreachable_destinations_quarantine.h:275
std::mutex destination_errors_mutex_
Definition: unreachable_destinations_quarantine.h:277
void stop_quarantine()
Stop all async operations and clear the quarantine list.
Definition: unreachable_destinations_quarantine.cc:168
std::mutex quarantine_mutex_
Definition: unreachable_destinations_quarantine.h:273
void add_destination_candidate_to_quarantine(const mysql_harness::Destination &dest)
Definition: unreachable_destinations_quarantine.cc:77
void stop_socket_acceptors_on_all_nodes_quarantined()
Go through all routing instances and check if there are routing plugins which have all destination ca...
Definition: unreachable_destinations_quarantine.cc:267
std::vector< std::string > routing_instances_
Definition: unreachable_destinations_quarantine.h:280
void unregister_routing_callbacks()
Definition: unreachable_destinations_quarantine.cc:40
void update_destinations_state(const AllowedNodes &destination_list)
On metadata refresh we got a destination candidates list that is reported to be available (from the m...
Definition: unreachable_destinations_quarantine.cc:298
void remove_destination_candidate_from_quarantine(const mysql_harness::Destination &dest)
Remove unreachable destination candidate from quarantine.
Definition: unreachable_destinations_quarantine.cc:120
bool report_connection_result(const mysql_harness::Destination &dest, bool success)
Register the connection error or success to a given destination.
Definition: unreachable_destinations_quarantine.cc:57
std::mutex unreachable_destinations_init_mutex_
Definition: unreachable_destinations_quarantine.h:278
std::mutex quarantine_empty_cond_m_
Definition: unreachable_destinations_quarantine.h:286
std::mutex routing_instances_mutex_
Definition: unreachable_destinations_quarantine.h:279
void register_routing_callbacks(QuarantineRoutingCallbacks &&routing_callbacks)
Definition: unreachable_destinations_quarantine.cc:34
std::vector< std::string > get_referencing_routing_instances(const mysql_harness::Destination &destination)
For a given destination get names of all routing instances that references it.
Definition: unreachable_destinations_quarantine.cc:282
std::chrono::milliseconds kQuarantinedConnectTimeout
Definition: unreachable_destinations_quarantine.h:269
Definition: destination_endpoint.h:38
Definition: destination_socket.h:40
Definition: destination.h:95
Definition: socket.h:1090
Definition: io_context.h:61
Definition: expected.h:286
std::vector< AvailableDestination > AllowedNodes
Definition: destination_status_types.h:62
std::error_code make_error_code(DynamicLoaderErrc ec)
make error_code from a DynamicLoaderErrc.
Definition: dynamic_loader.cc:79
Definition: gcs_xcom_synode.h:64
Definition: destination_status_types.h:35
Class representing a single entry (destination) in quarantined destination set.
Definition: unreachable_destinations_quarantine.h:204
mysql_harness::DestinationEndpoint server_endpoint_
Definition: unreachable_destinations_quarantine.h:250
bool connect_timed_out_
Definition: unreachable_destinations_quarantine.h:252
std::vector< std::string > referencing_routing_instances_
Definition: unreachable_destinations_quarantine.h:242
bool connected_
Definition: unreachable_destinations_quarantine.h:253
net::io_context * io_ctx_
Definition: unreachable_destinations_quarantine.h:240
Function
Definition: unreachable_destinations_quarantine.h:255
stdx::expected< void, std::error_code > connected()
Definition: unreachable_destinations_quarantine.cc:513
net::steady_timer timer_
Definition: unreachable_destinations_quarantine.h:244
std::function< void()> on_delete_
Definition: unreachable_destinations_quarantine.h:265
Unreachable_destination_candidate & operator=(const Unreachable_destination_candidate &)=delete
std::error_code last_ec_
Definition: unreachable_destinations_quarantine.h:262
mysql_harness::DestinationSocket server_sock_
Definition: unreachable_destinations_quarantine.h:248
std::vector< mysql_harness::DestinationEndpoint > endpoints_
Definition: unreachable_destinations_quarantine.h:246
Unreachable_destination_candidate(const Unreachable_destination_candidate &)=delete
Function func_
Definition: unreachable_destinations_quarantine.h:260
stdx::expected< void, std::error_code > connect_finish()
Definition: unreachable_destinations_quarantine.cc:479
stdx::expected< void, std::error_code > resolve()
Definition: unreachable_destinations_quarantine.cc:387
stdx::expected< void, std::error_code > connect()
Definition: unreachable_destinations_quarantine.cc:364
mysql_harness::Destination dest_
Definition: unreachable_destinations_quarantine.h:241
stdx::expected< void, std::error_code > connect_init()
Definition: unreachable_destinations_quarantine.cc:422
stdx::expected< void, std::error_code > try_connect()
Definition: unreachable_destinations_quarantine.cc:432
Unreachable_destination_candidate & operator=(Unreachable_destination_candidate &&)=default
std::chrono::seconds quarantine_interval_
Definition: unreachable_destinations_quarantine.h:243
Unreachable_destination_candidate(Unreachable_destination_candidate &&)=default
decltype(endpoints_) ::iterator endpoints_it_
Definition: unreachable_destinations_quarantine.h:247
std::function< void()> on_connect_ok_
Definition: unreachable_destinations_quarantine.h:266
stdx::expected< void, std::error_code > init_endpoint()
Definition: unreachable_destinations_quarantine.cc:415
stdx::expected< void, std::error_code > next_endpoint()
Definition: unreachable_destinations_quarantine.cc:468
~Unreachable_destination_candidate()
Definition: unreachable_destinations_quarantine.cc:355
Unreachable_destination_candidate(net::io_context *io_ctx, mysql_harness::Destination dest, std::vector< std::string > referencing_instances, std::chrono::seconds quarantine_interval, std::function< void()> on_delete, std::function< void()> on_connect_ok)
Definition: unreachable_destinations_quarantine.h:205
double seconds()
Definition: task.cc:314