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

597 lines
15 KiB
C++

/**
* 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_ENGINE_
#define OCEANBASE_UNITTEST_LOGSERVICE_MOCK_CONTAINER_LOG_ENGINE_
#define private public
#include "logservice/palf/log_engine.h"
#undef private
namespace oceanbase
{
using namespace common;
using namespace palf;
using namespace share;
namespace palf
{
class MockLogEngine : public LogEngine
{
public:
MockLogEngine()
: parent_itself_(),
candidate_list_(),
reg_ret_(RegisterReturn::INVALID_REG_RET)
{}
virtual ~MockLogEngine() {}
int init(const int64_t palf_id,
const char *base_dir,
const LogMeta &log_meta,
const LSN &base_lsn,
const int64_t base_lsn_ts_ns,
common::ObILogAllocator *alloc_mgr,
LogRpc *log_rpc,
LogIOWorker *log_io_worker)
{
int ret = OB_SUCCESS;
UNUSED(palf_id);
UNUSED(base_dir);
UNUSED(log_meta);
UNUSED(base_lsn);
UNUSED(base_lsn_ts_ns);
UNUSED(alloc_mgr);
UNUSED(log_rpc);
UNUSED(log_io_worker);
return ret;
}
void destroy() {}
int load(const int64_t palf_id,
const char *base_dir,
common::ObILogAllocator *alloc_mgr,
LogRpc *log_rpc,
LogIOWorker *log_io_worker,
LogGroupEntryHeader &entry_header)
{
int ret = OB_SUCCESS;
UNUSED(palf_id);
UNUSED(base_dir);
UNUSED(alloc_mgr);
UNUSED(log_rpc);
UNUSED(log_io_worker);
UNUSED(entry_header);
return ret;
}
int submit_flush_log_task(
const FlushLogCbCtx &flush_log_cb_ctx,
const char *buf,
const int64_t buf_len)
{
int ret = OB_SUCCESS;
UNUSED(flush_log_cb_ctx);
UNUSED(buf);
UNUSED(buf_len);
return ret;
}
int submit_flush_log_task(
const FlushLogCbCtx &flush_log_cb_ctx,
const LogWriteBuf &write_buf) override
{
int ret = OB_SUCCESS;
UNUSED(flush_log_cb_ctx);
UNUSED(write_buf);
return ret;
}
int submit_flush_prepare_meta_task(
const FlushMetaCbCtx &flush_meta_cb_ctx,
const LogPrepareMeta &prepare_meta)
{
int ret = OB_SUCCESS;
UNUSED(flush_meta_cb_ctx);
UNUSED(prepare_meta);
return ret;
}
int submit_flush_change_config_meta_task(
const FlushMetaCbCtx &flush_meta_cb_ctx,
const LogConfigMeta &config_meta)
{
int ret = OB_SUCCESS;
UNUSED(flush_meta_cb_ctx);
UNUSED(config_meta);
return ret;
}
int submit_flush_mode_meta_task(
const FlushMetaCbCtx &flush_meta_cb_ctx,
const LogModeMeta &mode_meta)
{
int ret = OB_SUCCESS;
UNUSED(flush_meta_cb_ctx);
UNUSED(mode_meta);
return ret;
}
int update_config_meta_sync(
const LogConfigMeta &config_meta)
{
int ret = OB_SUCCESS;
UNUSED(config_meta);
return ret;
}
int submit_flush_snapshot_meta_task(
const FlushMetaCbCtx &flush_meta_cb_ctx,
const LogSnapshotMeta &log_snapshot_meta)
{
int ret = OB_SUCCESS;
UNUSED(flush_meta_cb_ctx);
UNUSED(log_snapshot_meta);
return ret;
}
int submit_truncate_log_task(
const TruncateLogCbCtx &truncate_log_cb_ctx)
{
int ret = OB_SUCCESS;
UNUSED(truncate_log_cb_ctx);
return ret;
}
int submit_truncate_prefix_blocks_task(
const TruncatePrefixBlocksCbCtx &truncate_prefix_blocks_ctx)
{
int ret = OB_SUCCESS;
UNUSED(truncate_prefix_blocks_ctx);
return ret;
}
int after_flush_log(
LogIOFlushLogTask *log_io_task)
{
int ret = OB_SUCCESS;
UNUSED(log_io_task);
return ret;
}
int after_flush_meta(
LogIOFlushMetaTask *log_io_task)
{
int ret = OB_SUCCESS;
UNUSED(log_io_task);
return ret;
}
int after_truncate_log(
LogIOTruncateLogTask *log_io_task)
{
int ret = OB_SUCCESS;
UNUSED(log_io_task);
return ret;
}
int after_truncate_prefix_blocks(
LogIOTruncatePrefixBlocksTask *log_io_task)
{
int ret = OB_SUCCESS;
UNUSED(log_io_task);
return ret;
}
int append_log(const LSN &lsn,
const LogWriteBuf &write_buf,
const int64_t log_ts)
{
int ret = OB_SUCCESS;
UNUSED(lsn);
UNUSED(write_buf);
UNUSED(log_ts);
return ret;
}
int read_log(const LSN &lsn,
const int64_t in_read_size,
ReadBuf &read_buf,
int64_t &out_read_size)
{
int ret = OB_SUCCESS;
UNUSED(lsn);
UNUSED(in_read_size);
UNUSED(read_buf);
UNUSED(out_read_size);
return ret;
}
int read_group_entry_header(const LSN &lsn,
LogGroupEntryHeader &log_group_entry_header)
{
int ret = OB_SUCCESS;
UNUSED(lsn);
UNUSED(log_group_entry_header);
return ret;
}
int truncate(const LSN &prev_lsn, const LSN &lsn)
{
int ret = OB_SUCCESS;
UNUSED(prev_lsn);
UNUSED(lsn);
return ret;
}
int truncate_prefix_blocks(const LSN &lsn)
{
int ret = OB_SUCCESS;
UNUSED(lsn);
return ret;
}
int delete_block(const block_id_t &block_id)
{
int ret = OB_SUCCESS;
UNUSED(block_id);
return ret;
}
const LSN get_begin_lsn() const
{
LSN lsn(0);
return lsn;
}
int get_block_id_range(block_id_t &min_block_id, block_id_t &max_block_id) const
{
int ret = OB_SUCCESS;
UNUSED(min_block_id);
UNUSED(max_block_id);
return ret;
}
int get_block_min_ts_ns(const block_id_t &block_id, int64_t &ts_ns)
{
int ret = OB_SUCCESS;
UNUSED(block_id);
UNUSED(ts_ns);
return ret;
}
int update_base_lsn_used_for_gc(const LSN &lsn)
{
int ret = OB_SUCCESS;
UNUSED(lsn);
return ret;
}
int append_meta(const char *buf,
const int64_t buf_len)
{
int ret = OB_SUCCESS;
UNUSED(buf);
UNUSED(buf_len);
return ret;
}
int submit_push_log_req(
const common::ObMemberList &member_list,
const PushLogType &push_log_type,
const int64_t &msg_proposal_id,
const int64_t &prev_log_proposal_id,
const LSN &prev_lsn,
const LSN &curr_lsn,
const LogWriteBuf &write_buf)
{
int ret = OB_SUCCESS;
UNUSED(member_list);
UNUSED(push_log_type);
UNUSED(msg_proposal_id);
UNUSED(prev_log_proposal_id);
UNUSED(prev_lsn);
UNUSED(curr_lsn);
UNUSED(write_buf);
return ret;
}
int submit_push_log_req(
const common::ObAddr &addr,
const PushLogType &push_log_type,
const int64_t &msg_proposal_id,
const int64_t &prev_log_proposal_id,
const LSN &prev_lsn,
const LSN &curr_lsn,
const LogWriteBuf &write_buf) override
{
int ret = OB_SUCCESS;
UNUSED(addr);
UNUSED(push_log_type);
UNUSED(msg_proposal_id);
UNUSED(prev_log_proposal_id);
UNUSED(prev_lsn);
UNUSED(curr_lsn);
UNUSED(write_buf);
return ret;
}
int submit_push_log_resp(
const common::ObAddr &server,
const int64_t &msg_proposal_id,
const LSN &lsn,
const bool is_batch) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(msg_proposal_id);
UNUSED(lsn);
UNUSED(is_batch);
return ret;
}
int submit_prepare_meta_req(const ObMemberList &member_list, const int64_t &log_proposal_id) override
{
UNUSEDx(member_list, log_proposal_id);
return OB_SUCCESS;
}
int submit_prepare_meta_resp(
const common::ObAddr &server,
const int64_t &msg_proposal_id,
const bool vote_granted,
const int64_t &log_proposal_id,
const LSN &lsn,
const LSN &committed_end_lsn,
const LogModeMeta &mode_meta) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(msg_proposal_id);
UNUSED(vote_granted);
UNUSED(log_proposal_id);
UNUSED(lsn);
UNUSED(committed_end_lsn);
UNUSED(mode_meta);
return ret;
}
int submit_change_config_meta_req(
const common::ObMemberList &member_list,
const int64_t &msg_proposal_id,
const int64_t &prev_log_proposal_id,
const LSN &prev_lsn,
const int64_t &prev_mode_pid,
const LogConfigMeta &config_meta) override
{
int ret = OB_SUCCESS;
UNUSED(member_list);
UNUSED(msg_proposal_id);
UNUSED(prev_log_proposal_id);
UNUSED(prev_lsn);
UNUSED(prev_mode_pid);
UNUSED(config_meta);
return ret;
}
int submit_change_config_meta_req(
const common::GlobalLearnerList &member_list,
const int64_t &msg_proposal_id,
const int64_t &prev_log_proposal_id,
const LSN &prev_lsn,
const int64_t &prev_mode_pid,
const LogConfigMeta &config_meta) override
{
int ret = OB_SUCCESS;
UNUSED(member_list);
UNUSED(msg_proposal_id);
UNUSED(prev_log_proposal_id);
UNUSED(prev_lsn);
UNUSED(prev_mode_pid);
UNUSED(config_meta);
return ret;
}
int submit_change_config_meta_req(
const common::ResendConfigLogList &member_list,
const int64_t &msg_proposal_id,
const int64_t &prev_log_proposal_id,
const LSN &prev_lsn,
const int64_t &prev_mode_pid,
const LogConfigMeta &config_meta) override
{
int ret = OB_SUCCESS;
UNUSED(member_list);
UNUSED(msg_proposal_id);
UNUSED(prev_log_proposal_id);
UNUSED(prev_lsn);
UNUSED(prev_mode_pid);
UNUSED(config_meta);
return ret;
}
int submit_change_config_meta_resp(
const common::ObAddr &server,
const int64_t msg_proposal_id,
const LogConfigVersion &config_version) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(msg_proposal_id);
UNUSED(config_version);
return ret;
}
int submit_change_mode_meta_req(
const common::ObMemberList &member_list,
const int64_t &msg_proposal_id,
const bool is_applied_mode_meta,
const LogModeMeta &mode_meta) override
{
int ret = OB_SUCCESS;
UNUSED(member_list);
UNUSED(msg_proposal_id);
UNUSED(is_applied_mode_meta);
UNUSED(mode_meta);
return ret;
}
int submit_change_mode_meta_resp(
const common::ObAddr &server,
const int64_t &msg_proposal_id) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(msg_proposal_id);
return ret;
}
int submit_config_change_pre_check_req(
const common::ObAddr &server,
const LogConfigVersion &config_version,
const bool need_purge_throttling,
const int64_t timeout_ns,
LogGetMCStResp &resp) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(config_version);
UNUSED(timeout_ns);
UNUSED(need_purge_throttling);
resp.is_normal_replica_ = true;
resp.need_update_config_meta_ = false;
resp.max_flushed_end_lsn_ = LSN(PALF_INITIAL_LSN_VAL);
return ret;
}
int submit_fetch_log_req(
const common::ObAddr &server,
const FetchLogType fetch_type,
const int64_t msg_proposal_id,
const LSN &prev_lsn,
const LSN &lsn,
const int64_t fetch_log_size,
const int64_t fetch_log_count,
const int64_t accepted_mode_pid)
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(fetch_type);
UNUSED(msg_proposal_id);
UNUSED(prev_lsn);
UNUSED(lsn);
UNUSED(fetch_log_size);
UNUSED(fetch_log_count);
UNUSED(accepted_mode_pid);
return ret;
}
int submit_notify_rebuild_req(
const ObAddr &server,
const LSN &base_lsn,
const LogInfo &base_prev_log_info) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(base_lsn);
return ret;
}
int submit_register_parent_req(const common::ObAddr &server,
const LogLearner &child_itself,
const bool is_to_leader) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(child_itself);
UNUSED(is_to_leader);
return ret;
}
int submit_register_parent_resp(const common::ObAddr &server,
const LogLearner &parent_itself,
const LogCandidateList &candidate_list,
const RegisterReturn reg_ret) override
{
int ret = OB_SUCCESS;
UNUSED(server);
parent_itself_ = parent_itself;
candidate_list_ = candidate_list;
reg_ret_ = reg_ret;
return ret;
}
int submit_retire_parent_req(const common::ObAddr &server, const LogLearner &child_itself) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(child_itself);
return ret;
}
int submit_retire_child_req(const common::ObAddr &server, const LogLearner &parent_itself) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(parent_itself);
return ret;
}
int submit_learner_keepalive_req(const common::ObAddr &server, const LogLearner &sender_itself) override
{
int ret = OB_SUCCESS;
UNUSED(server);
UNUSED(sender_itself);
return ret;
}
LogMeta get_log_meta() const
{
LogMeta meta;
return meta;
}
const LSN &get_base_lsn_used_for_block_gc() const
{
return base_lsn_for_block_gc_;
}
int get_min_block_info_for_gc(block_id_t &block_id, int64_t &ts_ns)
{
int ret = OB_SUCCESS;
UNUSED(block_id);
UNUSED(ts_ns);
return ret;
}
LogStorage *get_log_storage() { return &log_storage_; }
LogStorage *get_log_meta_storage() { return &log_meta_storage_; }
void reset_register_parent_resp_ret()
{
parent_itself_.reset();
candidate_list_.reset();
reg_ret_ = RegisterReturn::INVALID_REG_RET;
}
int check_config_meta_size(const LogConfigMeta &config_meta) const
{
int ret = OB_SUCCESS;
LogMeta log_meta;
if (OB_FAIL(log_meta.update_log_config_meta(config_meta))) {
PALF_LOG(ERROR, "LogMeta update_log_config_meta failed", K(ret), K_(palf_id), K_(is_inited));
} else {
LogMetaEntryHeader log_meta_entry_header;
const int64_t log_meta_entry_header_len = log_meta_entry_header.get_serialize_size();
const int64_t log_meta_body_len = log_meta.get_serialize_size();
if (log_meta_entry_header_len + log_meta_body_len > MAX_META_ENTRY_SIZE) {
ret = OB_INVALID_ARGUMENT;
PALF_LOG(WARN, "check_config_meta_size failed", K(ret), K_(palf_id),
K(log_meta_entry_header_len), K(log_meta_body_len), K(config_meta));
}
}
return ret;
}
public:
// register_parent_resp ret
LogLearner parent_itself_;
LogCandidateList candidate_list_;
RegisterReturn reg_ret_;
};
} // end of palf
} // end of oceanbase
#endif