Divide ClusterOperation to two types

The main class was getting unwieldly and too general. Dividing the fields
helps adding support for other operation types.

This commit leaves most data duplicated, later commits clean up the affected code.
This commit is contained in:
Esa Korhonen
2018-10-18 16:43:58 +03:00
parent 09c5e295d0
commit 90e6ff078a
5 changed files with 113 additions and 36 deletions

View File

@ -155,7 +155,7 @@ bool SlaveStatus::should_be_copied(string* ignore_reason_out) const
return accepted;
}
ClusterOperation::ClusterOperation(OperationType type,
ClusterOperation::ClusterOperation(OperationType type, ServerOperation* dem_op, ServerOperation* prom_op,
MariaDBServer* promotion_target, MariaDBServer* demotion_target,
const SlaveStatusArray& promo_target_conns,
const SlaveStatusArray& demo_target_conns,
@ -164,6 +164,9 @@ ClusterOperation::ClusterOperation(OperationType type,
string& replication_user, string& replication_password,
json_t** error, maxbase::Duration time_remaining)
: type(type)
, demotion(dem_op)
, promotion(prom_op)
, general(type, replication_user, replication_password, error, time_remaining)
, promotion_target(promotion_target)
, demotion_target(demotion_target)
, demotion_target_is_master(demo_target_is_master)
@ -179,6 +182,33 @@ ClusterOperation::ClusterOperation(OperationType type,
{
}
ClusterOperation::~ClusterOperation()
{
delete demotion;
delete promotion;
}
ServerOperation::ServerOperation(MariaDBServer* target, bool was_is_master,
bool handle_events, const std::string& sql_file,
const SlaveStatusArray& conns_to_copy)
: target(target)
, was_is_master(was_is_master)
, handle_events(handle_events)
, sql_file(sql_file)
, conns_to_copy(conns_to_copy)
{
}
GeneralOpData::GeneralOpData(OperationType type, const string& replication_user, const string& replication_password,
json_t** error, maxbase::Duration time_remaining)
: type(type)
, replication_user(replication_user)
, replication_password(replication_password)
, error_out(error)
, time_remaining(time_remaining)
{
}
GtidList GtidList::from_string(const string& gtid_string)
{
mxb_assert(gtid_string.size());