29
29
#include " wsrep/tls_service.hpp"
30
30
#include " wsrep/allowlist_service.hpp"
31
31
#include " wsrep/connection_monitor_service.hpp"
32
+ #include " wsrep/provider_options.hpp"
32
33
33
34
#include " service_helpers.hpp"
34
35
#include " thread_service_v1.hpp"
35
36
#include " tls_service_v1.hpp"
36
37
#include " allowlist_service_v1.hpp"
37
38
#include " event_service_v1.hpp"
39
+ #include " config_service_v1.hpp"
38
40
#include " v26/wsrep_api.h"
39
41
#include " v26/wsrep_node_isolation.h"
40
42
#include " connection_monitor_service_v1.hpp"
@@ -772,7 +774,7 @@ void wsrep::wsrep_provider_v26::deinit_services()
772
774
wsrep::wsrep_provider_v26::wsrep_provider_v26 (
773
775
wsrep::server_state& server_state,
774
776
const std::string& provider_spec,
775
- const std::function<std::string()>& provider_options_cb,
777
+ const std::function<std::string(provider_options& )>& provider_options_cb,
776
778
const wsrep::provider::services& services)
777
779
: provider(server_state)
778
780
, wsrep_()
@@ -785,14 +787,24 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
785
787
server_state.initial_position ().id ().data (),
786
788
sizeof (state_id.uuid .data ));
787
789
state_id.seqno = server_state.initial_position ().seqno ().get ();
790
+
791
+ if (wsrep_load (provider_spec.c_str (), &wsrep_, logger_cb))
792
+ {
793
+ throw wsrep::runtime_error (" Failed to load wsrep library" );
794
+ }
795
+
796
+ init_services (services);
797
+ provider_options options;
798
+ config_service_v1_fetch (wsrep_, &options);
799
+
788
800
struct wsrep_init_args init_args;
789
801
memset (&init_args, 0 , sizeof (init_args));
790
802
init_args.app_ctx = &server_state;
791
803
init_args.node_name = server_state_.name ().c_str ();
792
804
init_args.node_address = server_state_.address ().c_str ();
793
805
init_args.node_incoming = server_state_.incoming_address ().c_str ();
794
806
init_args.data_dir = server_state_.working_dir ().c_str ();
795
- const auto & provider_options = provider_options_cb ();
807
+ const auto & provider_options = provider_options_cb (options );
796
808
init_args.options = provider_options.c_str ();
797
809
init_args.proto_ver = server_state.max_protocol_version ();
798
810
init_args.state_id = &state_id;
@@ -807,13 +819,6 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
807
819
init_args.sst_donate_cb = &sst_donate_cb;
808
820
init_args.synced_cb = &synced_cb;
809
821
810
- if (wsrep_load (provider_spec.c_str (), &wsrep_, logger_cb))
811
- {
812
- throw wsrep::runtime_error (" Failed to load wsrep library" );
813
- }
814
-
815
- init_services (services);
816
-
817
822
if (wsrep_->init (wsrep_, &init_args) != WSREP_OK)
818
823
{
819
824
throw wsrep::runtime_error (" Failed to initialize wsrep provider" );
0 commit comments