/** * 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_CLOG_MOCK_LOG_MEMBERSHIPMGR #define OCEANBASE_UNITTEST_CLOG_MOCK_LOG_MEMBERSHIPMGR #include "clog/ob_log_membership_mgr_V2.h" #include "clog/ob_i_submit_log_cb.h" #include "clog/ob_log_define.h" #include "clog/ob_log_type.h" #include "common/ob_member_list.h" #include "common/ob_partition_key.h" namespace oceanbase { namespace election { class ObIElectionMgr; } namespace clog { class ObILogSWForMS; class ObILogStateMgrForMS; class ObILogCallbackEngine; class ObLogEntry; class ObLogEntryHeader; class MockObLogMembershipMgr : public ObILogMembershipMgr, public ObISubmitLogCb { public: MockObLogMembershipMgr() {} virtual ~MockObLogMembershipMgr() {} public: int init(const common::ObMemberList& member_list, const int64_t membership_timestamp, const uint64_t membership_log_id, const int64_t replica_num, const common::ObAddr& self, const common::ObPartitionKey& partition_key, ObILogSWForMS* sw, ObILogStateMgrForMS* state_mgr, ObILogCallbackEngine* cb_engine, election::ObIElectionMgr* election_mgr) { UNUSED(member_list); UNUSED(membership_timestamp); UNUSED(membership_log_id); UNUSED(replica_num); UNUSED(self); UNUSED(partition_key); UNUSED(sw); UNUSED(state_mgr); UNUSED(cb_engine); UNUSED(election_mgr); return OB_SUCCESS; } bool is_state_changed() { return true; } int switch_state() { return OB_SUCCESS; } int receive_recovery_log( const ObLogEntry& log_entry, const bool is_confirmed, const int64_t accum_checksum, const bool is_batch_committed) { UNUSED(log_entry); UNUSED(is_confirmed); UNUSED(accum_checksum); UNUSED(is_batch_committed); return OB_SUCCESS; } int add_member(const common::ObMember& member, const int64_t quorum, obrpc::ObMCLogInfo& log_info) { UNUSED(member); UNUSED(quorum); UNUSED(log_info); return OB_SUCCESS; } int remove_member(const common::ObMember& member, const int64_t quorum, obrpc::ObMCLogInfo& log_info) { UNUSED(member); UNUSED(quorum); UNUSED(log_info); return OB_SUCCESS; } int64_t get_replica_num() const { return 3; } bool is_single_member_mode() const { return false; } common::ObReplicaType get_replica_type() const { return REPLICA_TYPE_MAX; } common::ObReplicaProperty get_replica_property() const { return ObReplicaProperty(); } const common::ObMemberList& get_curr_member_list() const { return member_list_; } virtual int get_lower_level_replica_list(common::ObChildReplicaList& list) const { UNUSED(list); return 0; } virtual int check_paxos_children() const { return 0; } virtual void reset_children_list() { return; } virtual int set_children_list_to_curr_member_list() { return 0; } virtual int try_add_member_to_children_list( const ObMember& member, const common::ObRegion& region, const common::ObReplicaType replica_type) { UNUSED(member); UNUSED(region); UNUSED(replica_type); return 0; } virtual int try_replace_add_to_children_list(const ObMember& member, const common::ObRegion& region, const common::ObReplicaType replica_type, const int64_t next_ilog_ts) { UNUSED(member); UNUSED(region); UNUSED(replica_type); UNUSED(next_ilog_ts); return 0; } virtual int try_remove_server_from_children_list(const common::ObAddr& server) { UNUSED(server); return 0; } virtual bool is_children_list_full() { return true; } virtual int receive_log( const ObLogEntry& log_entry, const common::ObAddr& server, const int64_t cluster_id, const ReceiveLogType rl_type) { UNUSED(log_entry); UNUSED(server); UNUSED(cluster_id); UNUSED(rl_type); return 0; } virtual int append_disk_log(const ObLogEntry& log_entry, const ObLogCursor& log_cursor, const int64_t accum_checksum, const bool batch_committed) { UNUSED(log_entry); UNUSED(log_cursor); UNUSED(accum_checksum); UNUSED(batch_committed); return 0; } virtual int64_t get_timestamp() const { return 0; } virtual uint64_t get_log_id() const { return 0; } virtual void reset_status() { return; } virtual int write_start_membership(const ObLogType& log_type) { UNUSED(log_type); return 0; } virtual bool is_state_init() const { return true; } virtual void reset_follower_pending_entry() { return; } virtual void submit_success_cb_task(const ObLogType& log_type, const uint64_t log_id, const char* log_buf, const int64_t log_buf_len, const common::ObProposalID& proposal_id) { UNUSED(log_type); UNUSED(log_id); UNUSED(log_buf); UNUSED(log_buf_len); UNUSED(proposal_id); return; } virtual void reconfirm_update_status(const ObLogEntry& log_entry) { UNUSED(log_entry); return; } virtual int force_set_as_single_replica() { return 0; } virtual int force_set_replica_num(const int64_t replica_num) { UNUSED(replica_num); return 0; } virtual int set_replica_type(const enum ObReplicaType replica_type) { UNUSED(replica_type); return 0; } virtual int change_member_list_to_self(const int64_t new_membership_version) { UNUSED(new_membership_version); return OB_SUCCESS; } virtual int on_success(const common::ObPartitionKey& partition_key, const clog::ObLogType log_type, const uint64_t log_id, const int64_t version, const bool batch_committed, const bool batch_last_succeed) { UNUSED(partition_key); UNUSED(log_type); UNUSED(log_id); UNUSED(version); UNUSED(batch_committed); UNUSED(batch_last_succeed); return 0; } virtual int inc_replica_num(const int64_t replica_num) { UNUSED(replica_num); return OB_NOT_SUPPORTED; } virtual int dec_replica_num(const int64_t replica_num) { UNUSED(replica_num); return OB_NOT_SUPPORTED; } virtual int change_quorum(const common::ObMemberList& curr_member_list, const int64_t curr_quorum, const int64_t new_quorum, obrpc::ObMCLogInfo& log_info) { UNUSED(curr_member_list); UNUSED(curr_quorum); UNUSED(new_quorum); UNUSED(log_info); return 0; } virtual common::ObProposalID get_ms_proposal_id() const { return ms_proposal_id_; } virtual int update_ms_proposal_id(const common::ObProposalID& ms_proposal_id) { UNUSED(ms_proposal_id); return OB_SUCCESS; } virtual bool has_elect_mlist() const { return false; } virtual int get_curr_ms_log_body(ObLogEntryHeader& log_entry_header, char* buffer, const int64_t buf_len) const { UNUSED(log_entry_header); UNUSED(buffer); UNUSED(buf_len); return OB_SUCCESS; } virtual int reset_renew_ms_log_task() { return OB_SUCCESS; } virtual bool is_renew_ms_log_majority_success() const { return true; } virtual int check_renew_ms_log_sync_state() const { return OB_SUCCESS; } private: common::ObMemberList member_list_; common::ObProposalID ms_proposal_id_; }; } // namespace clog } // namespace oceanbase #endif // OCEANBASE_UNITTEST_CLOG_MOCK_LOG_MEMBERSHIPMGR