2929#include " wsrep/tls_service.hpp"
3030#include " wsrep/allowlist_service.hpp"
3131#include " wsrep/connection_monitor_service.hpp"
32+ #include " wsrep/provider_options.hpp"
3233
3334#include " service_helpers.hpp"
3435#include " thread_service_v1.hpp"
3536#include " tls_service_v1.hpp"
3637#include " allowlist_service_v1.hpp"
3738#include " event_service_v1.hpp"
39+ #include " config_service_v1.hpp"
3840#include " v26/wsrep_api.h"
3941#include " v26/wsrep_node_isolation.h"
4042#include " connection_monitor_service_v1.hpp"
@@ -776,7 +778,7 @@ void wsrep::wsrep_provider_v26::deinit_services()
776778wsrep::wsrep_provider_v26::wsrep_provider_v26 (
777779 wsrep::server_state& server_state,
778780 const std::string& provider_spec,
779- const std::function<std::string()>& provider_options_cb,
781+ const std::function<std::string(provider_options& )>& provider_options_cb,
780782 const wsrep::provider::services& services)
781783 : provider(server_state)
782784 , wsrep_()
@@ -789,14 +791,24 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
789791 server_state.initial_position ().id ().data (),
790792 sizeof (state_id.uuid .data ));
791793 state_id.seqno = server_state.initial_position ().seqno ().get ();
794+
795+ if (wsrep_load (provider_spec.c_str (), &wsrep_, logger_cb))
796+ {
797+ throw wsrep::runtime_error (" Failed to load wsrep library" );
798+ }
799+
800+ init_services (services);
801+ provider_options options;
802+ config_service_v1_fetch (wsrep_, &options);
803+
792804 struct wsrep_init_args init_args;
793805 memset (&init_args, 0 , sizeof (init_args));
794806 init_args.app_ctx = &server_state;
795807 init_args.node_name = server_state_.name ().c_str ();
796808 init_args.node_address = server_state_.address ().c_str ();
797809 init_args.node_incoming = server_state_.incoming_address ().c_str ();
798810 init_args.data_dir = server_state_.working_dir ().c_str ();
799- const auto & provider_options = provider_options_cb ();
811+ const auto & provider_options = provider_options_cb (options );
800812 init_args.options = provider_options.c_str ();
801813 init_args.proto_ver = server_state.max_protocol_version ();
802814 init_args.state_id = &state_id;
@@ -811,13 +823,6 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
811823 init_args.sst_donate_cb = &sst_donate_cb;
812824 init_args.synced_cb = &synced_cb;
813825
814- if (wsrep_load (provider_spec.c_str (), &wsrep_, logger_cb))
815- {
816- throw wsrep::runtime_error (" Failed to load wsrep library" );
817- }
818-
819- init_services (services);
820-
821826 if (wsrep_->init (wsrep_, &init_args) != WSREP_OK)
822827 {
823828 throw wsrep::runtime_error (" Failed to initialize wsrep provider" );
0 commit comments