614#ifndef MYSQL_HARNESS_LOADER_INCLUDED
615#define MYSQL_HARNESS_LOADER_INCLUDED
621#include "mysql/harness/plugin.h"
623#include "harness_export.h"
686 bool running =
false);
695 void set_running()
noexcept;
699 uint32_t milliseconds)
const noexcept;
703 bool exit_ok()
const noexcept;
704 MY_ATTRIBUTE((format(printf, 3, 0)))
706 std::tuple<std::string, std::exception_ptr> pop_error()
noexcept;
713 ErrorType error_type_ = kNoError;
715 mutable std::condition_variable
cond_;
721 void push_back(std::thread &&thr);
725 void try_stopped(std::exception_ptr &first_exc);
728 plugin_stopped_events_.push(std::move(eptr));
733 void wait_all_stopped(std::exception_ptr &first_exc);
758 : config_(config), program_(program) {}
778 std::list<Config::SectionKey> available()
const;
800 enum class Status { UNVISITED, ONGOING, VISITED };
829 const std::string &library_name);
858 std::exception_ptr init_all();
867 std::exception_ptr stop_and_wait_all();
869 std::exception_ptr stop_all();
875 size_t external_plugins_to_load_count();
884 bool visit(
const std::string &
name, std::map<std::string, Status> *seen,
885 std::list<std::string> *order);
894 PluginInfo(
const std::string &folder,
const std::string &libname);
897 void load_plugin_descriptor(
const std::string &
name);
931 std::map<const ConfigSection *, std::shared_ptr<PluginFuncEnv>>
952 void spawn_signal_handler_thread();
956 bool signal_thread_ready_{
false};
966 void check_config_options_supported();
975 void check_default_config_options_supported();
978 friend class ::TestLoader;
1126void register_ctrl_c_handler();
A helper class for handling file paths.
Definition: path.h:37
Configuration section.
Definition: config_parser.h:140
A DynamicLibrary.
Definition: dynamic_loader.h:72
Configuration file handler for the loader.
Definition: loader_config.h:45
Holds plugin's API call information.
Definition: loader.h:892
const Plugin * plugin() const
Definition: loader.h:899
DynamicLibrary module_
Definition: loader.h:904
const DynamicLibrary & library() const
Definition: loader.h:901
PluginInfo(const Plugin *const plugin)
Definition: loader.h:895
std::list< std::string > order_
Initialization order.
Definition: loader.h:942
Stage
Flags progress of Loader.
Definition: loader.h:806
std::string logging_folder_
Definition: loader.h:944
Loader(const std::string &program, LoaderConfig &config)
Constructor for Loader.
Definition: loader.h:757
std::string data_folder_
Definition: loader.h:948
std::thread signal_thread_
Definition: loader.h:957
LoaderConfig & config_
Configuration sections for all plugins.
Definition: loader.h:915
LoaderConfig & get_config()
Get reference to configuration object.
Definition: loader.h:797
std::mutex signal_thread_ready_m_
Definition: loader.h:954
Loader & operator=(const Loader &)=delete
std::string config_folder_
Definition: loader.h:947
std::condition_variable signal_thread_ready_cond_
Definition: loader.h:955
Loader(const Loader &)=delete
std::map< std::string, PluginInfo > PluginMap
Definition: loader.h:908
std::string program_
Definition: loader.h:949
std::string plugin_folder_
Definition: loader.h:945
AppInfo appinfo_
Definition: loader.h:950
Status
Definition: loader.h:800
PluginThreads plugin_threads_
active plugin threads.
Definition: loader.h:937
std::map< const ConfigSection *, std::shared_ptr< PluginFuncEnv > > plugin_start_env_
Map of all {plugin instance -> plugin start() PluginFuncEnv} objects.
Definition: loader.h:932
PluginMap plugins_
Map of all successfully-loaded plugins (without key name).
Definition: loader.h:920
std::string runtime_folder_
Definition: loader.h:946
bool is_completed() const
Definition: loader.h:1043
std::string dst_
Definition: loader.h:1065
~LogReopenThread()
destruct the thread.
Definition: loader.cc:1483
std::string errmsg_
Definition: loader.h:1062
LogReopenState
Definition: loader.h:1040
@ REOPEN_ACTIVE
Definition: loader.h:1040
@ REOPEN_REQUESTED
Definition: loader.h:1040
@ REOPEN_NONE
Definition: loader.h:1040
std::thread reopen_thr_
Definition: loader.h:1056
static void log_reopen_thread_function(LogReopenThread *t)
thread function
Definition: loader.cc:1508
bool is_active() const
Definition: loader.h:1049
std::string get_last_error() const
Definition: loader.h:1052
void join()
join the log_reopen thread.
Definition: loader.cc:1478
void stop()
stop the log_reopen_thread_function.
Definition: loader.cc:1473
LogReopenState state_
Definition: loader.h:1059
bool is_requested() const
Definition: loader.h:1046
LogReopenThread()
Definition: loader.h:988
void request_reopen(const std::string &dst="")
request reopen
Definition: loader.cc:1554
PluginFuncEnv object.
Definition: loader.h:674
std::mutex mutex_
Definition: loader.h:716
const AppInfo * app_info_
Definition: loader.h:709
bool running_
Definition: loader.h:711
const ConfigSection * config_section_
Definition: loader.h:710
std::string error_message_
Definition: loader.h:712
std::condition_variable cond_
Definition: loader.h:715
size_t running() const
Definition: loader.h:731
WaitingMPSCQueue< std::exception_ptr > plugin_stopped_events_
queue of events after plugin's start() function exited.
Definition: loader.h:746
void push_exit_status(std::exception_ptr &&eptr)
Definition: loader.h:727
std::vector< std::thread > threads_
Definition: loader.h:738
provide waiting pop and push operator to thread-safe queues.
Definition: waiting_queue_adaptor.h:38
error_type
Definition: error.h:35
Fido Client Authentication Plugin
Definition: fido_client_plugin.cc:220
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:168
static void run(mysql_harness::PluginFuncEnv *)
Definition: io_plugin.cc:188
HARNESS_EXPORT bool log_reopen_completed()
check reopen completed
Definition: loader.cc:190
HARNESS_EXPORT void default_log_reopen_complete_cb(const std::string errmsg)
The default implementation for log reopen thread completion callback function.
Definition: loader.cc:276
ShutdownReason
Definition: loader.h:1091
@ SHUTDOWN_FATAL_ERROR
Definition: loader.h:1091
@ SHUTDOWN_NONE
Definition: loader.h:1091
@ SHUTDOWN_REQUESTED
Definition: loader.h:1091
HARNESS_EXPORT std::string log_reopen_get_error()
get last log reopen error
Definition: loader.cc:200
HARNESS_EXPORT void request_log_reopen(const std::string &dst="")
notify a "log_reopen" is requested with optional filename for old logfile.
Definition: loader.cc:181
HARNESS_EXPORT void set_log_reopen_complete_callback(log_reopen_callback cb)
Setter for the log reopen thread completion callback function.
Definition: loader.cc:266
HARNESS_EXPORT void request_application_shutdown(const ShutdownReason reason=SHUTDOWN_REQUESTED)
request application shutdown.
Definition: loader.cc:163
void(* log_reopen_callback)(const std::string)
Definition: loader.h:642
Header for compiler-dependent features.
bool load(THD *, const dd::String_type &fname, dd::String_type *buf)
Read an sdi file from disk and store in a buffer.
Definition: sdi_file.cc:307
const ConfigSection * get_config_section(const PluginFuncEnv *env) noexcept
Definition: loader.cc:396
const AppInfo * get_app_info(const PluginFuncEnv *env) noexcept
Definition: loader.cc:392
void set_error(PluginFuncEnv *env, ErrorType error_type, const char *fmt,...) noexcept
Definition: loader.cc:412
std::string join(Container cont, const std::string &delim)
join elements of an container into a string separated by a delimiter.
Definition: string.h:150
bool is_running(const PluginFuncEnv *env) noexcept
Definition: loader.cc:402
bool wait_for_stop(const PluginFuncEnv *env, uint32_t milliseconds) noexcept
Definition: loader.cc:404
void clear_running(PluginFuncEnv *env) noexcept
Definition: loader.cc:408
Definition: loader.cc:1583
HARNESS_EXPORT void set_shutdown_pending(bool shutdown_pending)
Definition: loader.cc:1585
required string key
Definition: replication_asynchronous_connection_failover.proto:59
LEX_CSTRING * plugin_name(st_plugin_int **ref)
Definition: sql_plugin_ref.h:94
case opt name
Definition: sslopt-case.h:32