mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-31 18:24:25 +03:00
Change provider options callback signature to return error code
The callback now returns an error code and takes a reference to provider options string.
This commit is contained in:
@ -526,12 +526,12 @@ namespace wsrep
|
|||||||
* @param provider_options_cb Callback to get initial provider options
|
* @param provider_options_cb Callback to get initial provider options
|
||||||
* @param thread_service Optional thread service implementation.
|
* @param thread_service Optional thread service implementation.
|
||||||
*/
|
*/
|
||||||
static std::unique_ptr<provider>
|
static std::unique_ptr<provider> make_provider(
|
||||||
make_provider(wsrep::server_state&, const std::string& provider_spec,
|
wsrep::server_state&, const std::string& provider_spec,
|
||||||
const std::function<std::string(const provider_options&)>&
|
const std::function<int(const provider_options&, std::string&)>&
|
||||||
provider_options_cb,
|
provider_options_cb,
|
||||||
const wsrep::provider::services& services
|
const wsrep::provider::services& services
|
||||||
= wsrep::provider::services());
|
= wsrep::provider::services());
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
wsrep::server_state& server_state_;
|
wsrep::server_state& server_state_;
|
||||||
|
@ -296,11 +296,12 @@ namespace wsrep
|
|||||||
*
|
*
|
||||||
* @return Zero on success, non-zero on error.
|
* @return Zero on success, non-zero on error.
|
||||||
*/
|
*/
|
||||||
int load_provider(const std::string& provider,
|
int load_provider(
|
||||||
const std::function<std::string(
|
const std::string& provider,
|
||||||
const provider_options&)>& provider_options_cb,
|
const std::function<int(const provider_options&, std::string&)>&
|
||||||
const wsrep::provider::services& services
|
provider_options_cb,
|
||||||
= wsrep::provider::services());
|
const wsrep::provider::services& services
|
||||||
|
= wsrep::provider::services());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load WSRep provider.
|
* Load WSRep provider.
|
||||||
@ -321,7 +322,11 @@ namespace wsrep
|
|||||||
= wsrep::provider::services())
|
= wsrep::provider::services())
|
||||||
{
|
{
|
||||||
return load_provider(
|
return load_provider(
|
||||||
provider, [options](const provider_options&) { return options; },
|
provider,
|
||||||
|
[options](const provider_options&, std::string& option_string) {
|
||||||
|
option_string.append(options);
|
||||||
|
return 0;
|
||||||
|
},
|
||||||
services);
|
services);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
std::unique_ptr<wsrep::provider> wsrep::provider::make_provider(
|
std::unique_ptr<wsrep::provider> wsrep::provider::make_provider(
|
||||||
wsrep::server_state& server_state, const std::string& provider_spec,
|
wsrep::server_state& server_state, const std::string& provider_spec,
|
||||||
const std::function<std::string(const provider_options&)>&
|
const std::function<int(const provider_options&, std::string&)>&
|
||||||
provider_options_cb,
|
provider_options_cb,
|
||||||
const wsrep::provider::services& services)
|
const wsrep::provider::services& services)
|
||||||
{
|
{
|
||||||
@ -41,19 +41,23 @@ std::unique_ptr<wsrep::provider> wsrep::provider::make_provider(
|
|||||||
}
|
}
|
||||||
catch (const wsrep::runtime_error& e)
|
catch (const wsrep::runtime_error& e)
|
||||||
{
|
{
|
||||||
provider_options opts;
|
provider_options options;
|
||||||
|
std::string options_string;
|
||||||
wsrep::log_error() << "Failed to create a new provider '"
|
wsrep::log_error() << "Failed to create a new provider '"
|
||||||
<< provider_spec << "'"
|
<< provider_spec << "'"
|
||||||
<< " with options '" << provider_options_cb(opts)
|
<< " with options '"
|
||||||
|
<< provider_options_cb(options, options_string)
|
||||||
<< "': " << e.what();
|
<< "': " << e.what();
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
provider_options opts;
|
provider_options options;
|
||||||
|
std::string options_string;
|
||||||
wsrep::log_error() << "Caught unknown exception when trying to "
|
wsrep::log_error() << "Caught unknown exception when trying to "
|
||||||
<< "create a new provider '"
|
<< "create a new provider '"
|
||||||
<< provider_spec << "'"
|
<< provider_spec << "'"
|
||||||
<< " with options '" << provider_options_cb(opts);
|
<< " with options '"
|
||||||
|
<< provider_options_cb(options, options_string);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -500,7 +500,7 @@ static int apply_toi(wsrep::provider& provider,
|
|||||||
|
|
||||||
int wsrep::server_state::load_provider(
|
int wsrep::server_state::load_provider(
|
||||||
const std::string& provider_spec,
|
const std::string& provider_spec,
|
||||||
const std::function<std::string(const provider_options&)>&
|
const std::function<int(const provider_options&, std::string&)>&
|
||||||
provider_options_cb,
|
provider_options_cb,
|
||||||
const wsrep::provider::services& services)
|
const wsrep::provider::services& services)
|
||||||
{
|
{
|
||||||
|
@ -778,7 +778,7 @@ void wsrep::wsrep_provider_v26::deinit_services()
|
|||||||
wsrep::wsrep_provider_v26::wsrep_provider_v26(
|
wsrep::wsrep_provider_v26::wsrep_provider_v26(
|
||||||
wsrep::server_state& server_state,
|
wsrep::server_state& server_state,
|
||||||
const std::string& provider_spec,
|
const std::string& provider_spec,
|
||||||
const std::function<std::string(provider_options&)>& provider_options_cb,
|
const std::function<int(provider_options&, std::string&)>& provider_options_cb,
|
||||||
const wsrep::provider::services& services)
|
const wsrep::provider::services& services)
|
||||||
: provider(server_state)
|
: provider(server_state)
|
||||||
, wsrep_()
|
, wsrep_()
|
||||||
@ -798,8 +798,6 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
|
|||||||
}
|
}
|
||||||
|
|
||||||
init_services(services);
|
init_services(services);
|
||||||
provider_options options;
|
|
||||||
config_service_v2_fetch(wsrep_, &options);
|
|
||||||
|
|
||||||
struct wsrep_init_args init_args;
|
struct wsrep_init_args init_args;
|
||||||
memset(&init_args, 0, sizeof(init_args));
|
memset(&init_args, 0, sizeof(init_args));
|
||||||
@ -808,8 +806,6 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
|
|||||||
init_args.node_address = server_state_.address().c_str();
|
init_args.node_address = server_state_.address().c_str();
|
||||||
init_args.node_incoming = server_state_.incoming_address().c_str();
|
init_args.node_incoming = server_state_.incoming_address().c_str();
|
||||||
init_args.data_dir = server_state_.working_dir().c_str();
|
init_args.data_dir = server_state_.working_dir().c_str();
|
||||||
const auto& provider_options = provider_options_cb(options);
|
|
||||||
init_args.options = provider_options.c_str();
|
|
||||||
init_args.proto_ver = server_state.max_protocol_version();
|
init_args.proto_ver = server_state.max_protocol_version();
|
||||||
init_args.state_id = &state_id;
|
init_args.state_id = &state_id;
|
||||||
init_args.state = 0;
|
init_args.state = 0;
|
||||||
@ -823,6 +819,16 @@ wsrep::wsrep_provider_v26::wsrep_provider_v26(
|
|||||||
init_args.sst_donate_cb = &sst_donate_cb;
|
init_args.sst_donate_cb = &sst_donate_cb;
|
||||||
init_args.synced_cb = &synced_cb;
|
init_args.synced_cb = &synced_cb;
|
||||||
|
|
||||||
|
provider_options options;
|
||||||
|
config_service_v2_fetch(wsrep_, &options);
|
||||||
|
|
||||||
|
std::string provider_options;
|
||||||
|
if (provider_options_cb(options, provider_options))
|
||||||
|
{
|
||||||
|
throw wsrep::runtime_error("Failed to initialize wsrep provider options");
|
||||||
|
}
|
||||||
|
init_args.options = provider_options.c_str();
|
||||||
|
|
||||||
if (wsrep_->init(wsrep_, &init_args) != WSREP_OK)
|
if (wsrep_->init(wsrep_, &init_args) != WSREP_OK)
|
||||||
{
|
{
|
||||||
throw wsrep::runtime_error("Failed to initialize wsrep provider");
|
throw wsrep::runtime_error("Failed to initialize wsrep provider");
|
||||||
|
@ -33,9 +33,10 @@ namespace wsrep
|
|||||||
public:
|
public:
|
||||||
void init_services(const wsrep::provider::services& services);
|
void init_services(const wsrep::provider::services& services);
|
||||||
void deinit_services();
|
void deinit_services();
|
||||||
wsrep_provider_v26(wsrep::server_state&, const std::string&,
|
wsrep_provider_v26(
|
||||||
const std::function<std::string(provider_options&)>&,
|
wsrep::server_state&, const std::string&,
|
||||||
const wsrep::provider::services& services);
|
const std::function<int(provider_options&, std::string&)>&,
|
||||||
|
const wsrep::provider::services& services);
|
||||||
~wsrep_provider_v26() WSREP_OVERRIDE;
|
~wsrep_provider_v26() WSREP_OVERRIDE;
|
||||||
enum wsrep::provider::status
|
enum wsrep::provider::status
|
||||||
connect(const std::string&, const std::string&, const std::string&,
|
connect(const std::string&, const std::string&, const std::string&,
|
||||||
|
@ -263,7 +263,8 @@ namespace wsrep
|
|||||||
{
|
{
|
||||||
set_provider_factory(
|
set_provider_factory(
|
||||||
[&](wsrep::server_state&, const std::string&,
|
[&](wsrep::server_state&, const std::string&,
|
||||||
const std::function<std::string(const wsrep::provider_options&)>&,
|
const std::function<int(const wsrep::provider_options&,
|
||||||
|
std::string&)>&,
|
||||||
const wsrep::provider::services&)
|
const wsrep::provider::services&)
|
||||||
{
|
{
|
||||||
// The provider object is destroyed upon server state
|
// The provider object is destroyed upon server state
|
||||||
|
Reference in New Issue
Block a user