diff options
author | Daniele Sciascia <daniele.sciascia@galeracluster.com> | 2021-02-09 20:06:59 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2023-02-14 12:01:54 +0100 |
commit | 79d0194eef314271d1694540267180ef91bc9a87 (patch) | |
tree | 3c8442a96587a221f6a62a320394bd3f84b67c6f /sql/wsrep_server_state.h | |
parent | 061ea3f639521b137b0a9d79255d2429ef37b9d2 (diff) | |
download | mariadb-git-79d0194eef314271d1694540267180ef91bc9a87.tar.gz |
MDEV-22570 Implement wsrep_provider_options as plugin
- Provider options are read from the provider during
startup, before plugins are initialized.
- New wsrep_provider plugin for which sysvars are generated
dynamically from options read from the provider.
- The plugin is enabled by option plugin-wsrep-provider=ON.
If enabled, wsrep_provider_options can no longer be used,
(an error is raised on attempts to do so).
- Each option is either string, integer, double or bool
- Options can be dynamic / readonly
- Options can be deprecated
Limitations:
- We do not check that the value of a provider option falls
within a certain range. This type of validation is still
done in Galera side.
Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
Diffstat (limited to 'sql/wsrep_server_state.h')
-rw-r--r-- | sql/wsrep_server_state.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/sql/wsrep_server_state.h b/sql/wsrep_server_state.h index 8759f7a9d84..d169e5b219d 100644 --- a/sql/wsrep_server_state.h +++ b/sql/wsrep_server_state.h @@ -1,4 +1,4 @@ -/* Copyright 2018 Codership Oy <info@codership.com> +/* Copyright 2018-2021 Codership Oy <info@codership.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ /* wsrep-lib */ #include "wsrep/server_state.hpp" #include "wsrep/provider.hpp" +#include "wsrep/provider_options.hpp" /* implementation */ #include "wsrep_server_service.h" @@ -34,6 +35,10 @@ public: const std::string& working_dir, const wsrep::gtid& initial_position, int max_protocol_version); + static int init_provider(const std::string& provider, + const std::string& options); + static int init_options(); + static void deinit_provider(); static void destroy(); static Wsrep_server_state& instance() @@ -51,6 +56,11 @@ public: return instance().provider(); } + static wsrep::provider_options* get_options() + { + return m_options.get(); + } + static bool has_capability(int capability) { return (get_provider().capabilities() & capability); @@ -77,7 +87,11 @@ private: Wsrep_server_service m_service; static wsrep::provider::services m_provider_services; static Wsrep_server_state* m_instance; - + static std::unique_ptr<wsrep::provider_options> m_options; + // Sysvars for provider plugin. We keep these here because + // they are allocated dynamically and must be freed at some + // point during shutdown (after the plugin is deinitialized). + static std::vector<st_mysql_sys_var *> m_sysvars; }; #endif // WSREP_SERVER_STATE_H |