@@ -778,7 +778,7 @@ void wsrep::wsrep_provider_v26::deinit_services()
778778wsrep::wsrep_provider_v26::wsrep_provider_v26 (
779779 wsrep::server_state& server_state,
780780 const std::string& provider_spec,
781- const std::function<std::string(provider_options &)>& provider_options_cb,
781+ const std::function<int (provider_options&, std::string&)>& provider_options_cb,
782782 const wsrep::provider::services& services)
783783 : provider(server_state)
784784 , wsrep_()
@@ -798,8 +798,6 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
798798 }
799799
800800 init_services (services);
801- provider_options options;
802- config_service_v2_fetch (wsrep_, &options);
803801
804802 struct wsrep_init_args init_args;
805803 memset (&init_args, 0 , sizeof (init_args));
@@ -808,8 +806,6 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
808806 init_args.node_address = server_state_.address ().c_str ();
809807 init_args.node_incoming = server_state_.incoming_address ().c_str ();
810808 init_args.data_dir = server_state_.working_dir ().c_str ();
811- const auto & provider_options = provider_options_cb (options);
812- init_args.options = provider_options.c_str ();
813809 init_args.proto_ver = server_state.max_protocol_version ();
814810 init_args.state_id = &state_id;
815811 init_args.state = 0 ;
@@ -823,6 +819,16 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
823819 init_args.sst_donate_cb = &sst_donate_cb;
824820 init_args.synced_cb = &synced_cb;
825821
822+ provider_options options;
823+ config_service_v2_fetch (wsrep_, &options);
824+
825+ std::string provider_options;
826+ if (provider_options_cb (options, provider_options))
827+ {
828+ throw wsrep::runtime_error (" Failed to initialize wsrep provider options" );
829+ }
830+ init_args.options = provider_options.c_str ();
831+
826832 if (wsrep_->init (wsrep_, &init_args) != WSREP_OK)
827833 {
828834 throw wsrep::runtime_error (" Failed to initialize wsrep provider" );
0 commit comments