Files
oceanbase/unittest/logservice/mock_logservice_container/mock_log_config_mgr.h

312 lines
9.7 KiB
C++
Executable File

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#ifndef OCEANBASE_UNITTEST_LOGSERVICE_MOCK_CONTAINER_LOG_CONFIG_MGR_
#define OCEANBASE_UNITTEST_LOGSERVICE_MOCK_CONTAINER_LOG_CONFIG_MGR_
#define private public
#include "logservice/palf/log_config_mgr.h"
#include "logservice/palf/log_sliding_window.h"
#undef private
namespace oceanbase
{
namespace palf
{
namespace election
{
class Election;
}
class MockLogConfigMgr : public LogConfigMgr
{
public:
MockLogConfigMgr() {}
virtual ~MockLogConfigMgr() {}
int init(const int64_t palf_id,
const common::ObAddr &self,
const LogConfigMeta &log_ms_meta,
LogEngine *log_engine,
LogSlidingWindow *sw,
LogStateMgr *state_mgr,
election::Election *election,
LogModeMgr *mode_mgr)
{
int ret = OB_SUCCESS;
UNUSED(palf_id);
UNUSED(self);
log_ms_meta_ = log_ms_meta;
UNUSED(log_engine);
UNUSED(sw);
UNUSED(state_mgr);
UNUSED(election);
UNUSED(mode_mgr);
return ret;
}
void destroy() {}
// require caller holds WLock in PalfHandleImpl
int set_initial_member_list(const common::ObMemberList &member_list,
const int64_t replica_num,
const int64_t proposal_id,
LogConfigVersion &config_version)
{
int ret = OB_SUCCESS;
UNUSED(member_list);
UNUSED(replica_num);
UNUSED(proposal_id);
UNUSED(config_version);
return ret;
}
int set_initial_member_list(const common::ObMemberList &member_list,
const common::ObMember &arb_replica,
const int64_t replica_num,
const int64_t proposal_id,
LogConfigVersion &config_version)
{
UNUSEDx(member_list, arb_replica, replica_num, proposal_id, config_version);
return OB_SUCCESS;
}
// following get ops need caller holds RLock in PalfHandleImpl
int64_t get_accept_proposal_id() const
{
return log_ms_meta_.proposal_id_;
}
int get_global_learner_list(common::GlobalLearnerList &learner_list) const
{
int ret = OB_SUCCESS;
UNUSED(learner_list);
return ret;
}
int get_degraded_learner_list(common::GlobalLearnerList &learner_list) const
{
int ret = OB_SUCCESS;
UNUSED(learner_list);
return ret;
}
int get_curr_member_list(common::ObMemberList &member_list, int64_t &replica_num) const
{
int ret = OB_SUCCESS;
if (OB_FAIL(log_ms_meta_.curr_.config_.get_expected_paxos_memberlist(member_list, replica_num))) {
PALF_LOG(WARN, "get_expected_paxos_memberlist failed", KR(ret), K_(palf_id), K_(self));
}
return ret;
}
int get_log_sync_member_list(common::ObMemberList &member_list, int64_t &replica_num) const
{
int ret = OB_SUCCESS;
if (OB_FAIL(member_list.deep_copy(log_ms_meta_.curr_.config_.log_sync_memberlist_))) {
PALF_LOG(WARN, "deep_copy member_list failed", KR(ret), KPC(this));
} else {
replica_num = log_ms_meta_.curr_.config_.log_sync_replica_num_;
}
return ret;
}
int get_log_sync_member_list_for_generate_committed_lsn(
ObMemberList &prev_member_list,
int64_t &prev_replica_num,
ObMemberList &curr_member_list,
int64_t &curr_replica_num,
bool &is_before_barrier,
LSN &barrier_lsn) const
{
int ret = OB_SUCCESS;
LSN prev_committed_end_lsn;
sw_->get_committed_end_lsn(prev_committed_end_lsn);
is_before_barrier = false;
barrier_lsn = LSN(PALF_INITIAL_LSN_VAL);
if (IS_NOT_INIT) {
ret = OB_NOT_INIT;
PALF_LOG(WARN, "LogConfigMgr not init", KR(ret));
} else if (OB_FAIL(curr_member_list.deep_copy(log_ms_meta_.curr_.config_.log_sync_memberlist_))) {
PALF_LOG(WARN, "deep_copy member_list failed", KR(ret), K_(palf_id), K_(self));
} else if (FALSE_IT(curr_replica_num = log_ms_meta_.curr_.config_.log_sync_replica_num_)) {
} else if (OB_UNLIKELY(prev_committed_end_lsn < reconfig_barrier_.prev_end_lsn_ &&
reconfig_barrier_.prev_end_lsn_.is_valid())) {
is_before_barrier = true;
barrier_lsn = reconfig_barrier_.prev_end_lsn_;
if (OB_FAIL(prev_member_list.deep_copy(log_ms_meta_.prev_.config_.log_sync_memberlist_))) {
PALF_LOG(WARN, "deep_copy member_list failed", KR(ret), K_(palf_id), K_(self));
} else {
prev_replica_num = log_ms_meta_.prev_.config_.log_sync_replica_num_;
}
} else { }
return ret;
}
int get_alive_member_list_with_arb(common::ObMemberList &member_list, int64_t &replica_num) const
{
int ret = OB_SUCCESS;
GlobalLearnerList all_learners;
if (OB_FAIL(log_ms_meta_.curr_.config_.convert_to_complete_config(member_list, replica_num, all_learners))) {
PALF_LOG(WARN, "convert_to_complete_config failed", K(ret), KPC(this));
}
return ret;
}
int get_prev_member_list(common::ObMemberList &member_list) const
{
int ret = OB_SUCCESS;
if (OB_FAIL(member_list.deep_copy(log_ms_meta_.prev_.config_.log_sync_memberlist_))) {
PALF_LOG(WARN, "deep_copy member_list failed", KR(ret), KPC(this));
}
return ret;
}
int get_children_list(LogLearnerList &children) const
{
int ret = OB_SUCCESS;
return ret;
}
int get_config_version(LogConfigVersion &config_version) const
{
int ret = OB_SUCCESS;
config_version = log_ms_meta_.curr_.config_.config_version_;
return ret;
}
int get_replica_num(int64_t &replica_num) const
{
int ret = OB_SUCCESS;
common::ObMemberList member_list;
if (OB_FAIL(log_ms_meta_.curr_.config_.get_expected_paxos_memberlist(member_list, replica_num))) {
PALF_LOG(WARN, "get_expected_paxos_memberlist failed", KR(ret), KPC(this));
}
return ret;
}
int leader_do_loop_work()
{
int ret = OB_SUCCESS;
return ret;
}
// for PalfHandleImpl::one_stage_config_change_
int check_config_change_args(const LogConfigChangeArgs &args, bool &is_already_finished) const
{
int ret = OB_SUCCESS;
UNUSED(args);
UNUSED(is_already_finished);
return ret;
}
// require caller holds WLock in PalfHandleImpl
int apply_config_meta(const int64_t curr_proposal_id,
const int64_t prev_log_proposal_id,
const LSN prev_lsn,
const LogConfigChangeArgs &args,
bool &is_already_finished,
LogConfigVersion &config_version)
{
int ret = OB_SUCCESS;
UNUSED(curr_proposal_id);
UNUSED(prev_log_proposal_id);
UNUSED(prev_lsn);
UNUSED(args);
UNUSED(is_already_finished);
UNUSED(config_version);
return ret;
}
int submit_config_log(const int64_t proposal_id, const LogConfigVersion &config_version)
{
int ret = OB_SUCCESS;
UNUSED(proposal_id);
UNUSED(config_version);
return ret;
}
int check_ms_log_committed(const int64_t proposal_id, const LogConfigVersion &config_version)
{
int ret = OB_SUCCESS;
UNUSED(proposal_id);
UNUSED(config_version);
return ret;
}
// for reconfirm
int submit_start_working_log(const int64_t &log_proposal_id,
const int64_t &prev_log_proposal_id,
const LSN &prev_lsn,
LogConfigVersion &config_version)
{
int ret = OB_SUCCESS;
UNUSED(log_proposal_id);
UNUSED(prev_log_proposal_id);
UNUSED(prev_lsn);
UNUSED(config_version);
return ret;
}
// for PalfHandleImpl::receive_config_log
bool can_receive_config_log(const LogConfigVersion &config_version) const
{
int ret = OB_SUCCESS;
UNUSED(config_version);
return ret;
}
int after_flush_config_log(const LogConfigVersion &config_version)
{
int ret = OB_SUCCESS;
UNUSED(config_version);
return ret;
}
int submit_change_access_mode_log(const int64_t &log_proposal_id,
const int64_t &prev_log_proposal_id,
const LSN &prev_lsn,
const AccessMode &access_mode,
LogConfigVersion &config_version)
{
int ret = OB_SUCCESS;
UNUSED(log_proposal_id);
UNUSED(prev_log_proposal_id);
UNUSED(prev_lsn);
UNUSED(access_mode);
UNUSED(config_version);
return ret;
}
// follower接收到成员变更日志需要进行前向校验
int receive_config_log(const common::ObAddr &leader, const LogConfigMeta &meta)
{
int ret = OB_SUCCESS;
UNUSED(leader);
UNUSED(meta);
return ret;
}
// for PalfHandleImpl::ack_config_log
int ack_config_log(const common::ObAddr &sender,
const int64_t proposal_id,
const LogConfigVersion &config_version)
{
int ret = OB_SUCCESS;
UNUSED(sender);
UNUSED(proposal_id);
UNUSED(config_version);
return ret;
}
int wait_config_log_persistence(const LogConfigVersion &config_version) const
{
int ret = OB_SUCCESS;
UNUSED(config_version);
return ret;
}
// broadcast leader info to global learners, only called in leader active
int submit_broadcast_leader_info(const int64_t proposal_id) const
{
int ret = OB_SUCCESS;
UNUSED(proposal_id);
return ret;
}
void reset_status()
{}
};
} // end of palf
} // end of oceanbase
#endif