mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-28 20:02:00 +03:00
Introduce set_provider_factory() method for server_state
This allows injecting an application allocated provider into server_state. After this virtual provider getter is unnecessary. Made the getter normal method and fixed unit tests accordingly.
This commit is contained in:
@ -25,7 +25,7 @@
|
||||
#include <dlfcn.h>
|
||||
#include <memory>
|
||||
|
||||
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,
|
||||
const std::string& provider_options,
|
||||
@ -33,8 +33,8 @@ wsrep::provider* wsrep::provider::make_provider(
|
||||
{
|
||||
try
|
||||
{
|
||||
return new wsrep::wsrep_provider_v26(
|
||||
server_state, provider_options, provider_spec, services);
|
||||
return std::unique_ptr<wsrep::provider>(new wsrep::wsrep_provider_v26(
|
||||
server_state, provider_options, provider_spec, services));
|
||||
}
|
||||
catch (const wsrep::runtime_error& e)
|
||||
{
|
||||
|
@ -497,17 +497,23 @@ int wsrep::server_state::load_provider(
|
||||
wsrep::log_info() << "Loading provider " << provider_spec
|
||||
<< " initial position: " << initial_position_;
|
||||
|
||||
provider_ = wsrep::provider::make_provider(*this,
|
||||
provider_spec,
|
||||
provider_options,
|
||||
services);
|
||||
provider_ = provider_factory_(*this,
|
||||
provider_spec,
|
||||
provider_options,
|
||||
services);
|
||||
return (provider_ ? 0 : 1);
|
||||
}
|
||||
|
||||
void wsrep::server_state::set_provider_factory(
|
||||
const provider_factory_func& provider_factory)
|
||||
{
|
||||
assert(provider_factory);
|
||||
provider_factory_ = provider_factory;
|
||||
}
|
||||
|
||||
void wsrep::server_state::unload_provider()
|
||||
{
|
||||
delete provider_;
|
||||
provider_ = 0;
|
||||
provider_.reset();
|
||||
}
|
||||
|
||||
int wsrep::server_state::connect(const std::string& cluster_name,
|
||||
@ -540,11 +546,6 @@ int wsrep::server_state::disconnect()
|
||||
return provider().disconnect();
|
||||
}
|
||||
|
||||
wsrep::server_state::~server_state()
|
||||
{
|
||||
delete provider_;
|
||||
}
|
||||
|
||||
std::vector<wsrep::provider::status_variable>
|
||||
wsrep::server_state::status() const
|
||||
{
|
||||
|
Reference in New Issue
Block a user