1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-07-31 18:24:25 +03:00

Pass initial position when loading the provider

Having initial position as a part of server_state does not allow
restarting the provider from different startup position without
either reconstructing server_state or adding setter method for
initial position. As the only use for initial_position in server state
was to pass it to provider during provider load, it makes more sense
to have the initial position to be passed as an argument to
server_state load_provider() method.
This commit is contained in:
Teemu Ollakka
2018-12-24 18:37:10 +02:00
parent cc67313515
commit 460d3e03c7
9 changed files with 21 additions and 22 deletions

View File

@ -45,7 +45,6 @@ namespace db
"", "",
address, address,
working_dir, working_dir,
wsrep::gtid::undefined(),
1, 1,
wsrep::server_state::rm_async) wsrep::server_state::rm_async)
, mutex_() , mutex_()

View File

@ -137,7 +137,8 @@ void db::simulator::start()
std::string server_options(params_.wsrep_provider_options); std::string server_options(params_.wsrep_provider_options);
if (server.server_state().load_provider( if (server.server_state().load_provider(
params_.wsrep_provider, server_options)) params_.wsrep_provider, server_options,
wsrep::gtid::undefined()))
{ {
throw wsrep::runtime_error("Failed to load provider"); throw wsrep::runtime_error("Failed to load provider");
} }

View File

@ -362,7 +362,8 @@ namespace wsrep
static provider* make_provider( static provider* make_provider(
wsrep::server_state&, wsrep::server_state&,
const std::string& provider_spec, const std::string& provider_spec,
const std::string& provider_options); const std::string& provider_options,
const wsrep::gtid& initial_position);
protected: protected:
wsrep::server_state& server_state_; wsrep::server_state& server_state_;
}; };

View File

@ -212,11 +212,6 @@ namespace wsrep
*/ */
const std::string& working_dir() const { return working_dir_; } const std::string& working_dir() const { return working_dir_; }
/**
* Return initial position for server.
*/
const wsrep::gtid& initial_position() const
{ return initial_position_; }
/** /**
* Return maximum protocol version. * Return maximum protocol version.
*/ */
@ -261,7 +256,8 @@ 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::string& provider,
const std::string& provider_options); const std::string& provider_options,
const wsrep::gtid& intial_position);
void unload_provider(); void unload_provider();
@ -557,7 +553,7 @@ namespace wsrep
const std::string& incoming_address, const std::string& incoming_address,
const std::string& address, const std::string& address,
const std::string& working_dir, const std::string& working_dir,
const wsrep::gtid& initial_position, // const wsrep::gtid& initial_position,
int max_protocol_version, int max_protocol_version,
enum rollback_mode rollback_mode) enum rollback_mode rollback_mode)
: mutex_(mutex) : mutex_(mutex)
@ -567,7 +563,7 @@ namespace wsrep
, state_hist_() , state_hist_()
, state_waiters_(n_states_) , state_waiters_(n_states_)
, bootstrap_() , bootstrap_()
, initial_position_(initial_position) // , initial_position_(initial_position)
, init_initialized_() , init_initialized_()
, init_synced_() , init_synced_()
, sst_gtid_() , sst_gtid_()
@ -628,7 +624,7 @@ namespace wsrep
std::vector<enum state> state_hist_; std::vector<enum state> state_hist_;
mutable std::vector<int> state_waiters_; mutable std::vector<int> state_waiters_;
bool bootstrap_; bool bootstrap_;
const wsrep::gtid initial_position_; // const wsrep::gtid initial_position_;
bool init_initialized_; bool init_initialized_;
bool init_synced_; bool init_synced_;
wsrep::gtid sst_gtid_; wsrep::gtid sst_gtid_;

View File

@ -25,12 +25,13 @@
wsrep::provider* wsrep::provider::make_provider( wsrep::provider* wsrep::provider::make_provider(
wsrep::server_state& server_state, wsrep::server_state& server_state,
const std::string& provider_spec, const std::string& provider_spec,
const std::string& provider_options) const std::string& provider_options,
const wsrep::gtid& initial_position)
{ {
try try
{ {
return new wsrep::wsrep_provider_v26( return new wsrep::wsrep_provider_v26(
server_state, provider_options, provider_spec); server_state, provider_options, provider_spec, initial_position);
} }
catch (const wsrep::runtime_error& e) catch (const wsrep::runtime_error& e)
{ {

View File

@ -332,14 +332,15 @@ static int apply_toi(wsrep::provider& provider,
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
int wsrep::server_state::load_provider(const std::string& provider_spec, int wsrep::server_state::load_provider(const std::string& provider_spec,
const std::string& provider_options) const std::string& provider_options,
const wsrep::gtid& initial_position)
{ {
wsrep::log_info() << "Loading provider " wsrep::log_info() << "Loading provider "
<< provider_spec << provider_spec
<< "initial position: " << "initial position: "
<< initial_position_; << initial_position;
provider_ = wsrep::provider::make_provider( provider_ = wsrep::provider::make_provider(
*this, provider_spec, provider_options); *this, provider_spec, provider_options, initial_position);
return (provider_ ? 0 : 1); return (provider_ ? 0 : 1);
} }

View File

@ -546,15 +546,16 @@ namespace
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_options, const std::string& provider_options,
const std::string& provider_spec) const std::string& provider_spec,
const wsrep::gtid& initial_position)
: provider(server_state) : provider(server_state)
, wsrep_() , wsrep_()
{ {
wsrep_gtid_t state_id; wsrep_gtid_t state_id;
std::memcpy(state_id.uuid.data, std::memcpy(state_id.uuid.data,
server_state.initial_position().id().data(), initial_position.id().data(),
sizeof(state_id.uuid.data)); sizeof(state_id.uuid.data));
state_id.seqno = server_state.initial_position().seqno().get(); state_id.seqno = initial_position.seqno().get();
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));
init_args.app_ctx = &server_state; init_args.app_ctx = &server_state;

View File

@ -31,7 +31,7 @@ namespace wsrep
public: public:
wsrep_provider_v26(wsrep::server_state&, const std::string&, wsrep_provider_v26(wsrep::server_state&, const std::string&,
const std::string&); const std::string&, const wsrep::gtid&);
~wsrep_provider_v26(); ~wsrep_provider_v26();
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&,

View File

@ -214,7 +214,6 @@ namespace wsrep
wsrep::server_service& server_service) wsrep::server_service& server_service)
: wsrep::server_state(mutex_, cond_, server_service, : wsrep::server_state(mutex_, cond_, server_service,
name, "", "", "./", name, "", "", "./",
wsrep::gtid::undefined(),
1, 1,
rollback_mode) rollback_mode)
, mutex_() , mutex_()