Files
oceanbase/src/clog/ob_log_callback_task.cpp
oceanbase-admin cea7de1475 init push
2021-05-31 22:56:52 +08:00

113 lines
3.4 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.
*/
#include "ob_log_callback_task.h"
namespace oceanbase {
using namespace common;
namespace clog {
int ObLogCallbackTask::init(const CallbackTaskType& task_type, const common::ObPartitionKey& partition_key)
{
int ret = OB_SUCCESS;
task_type_ = task_type;
partition_key_ = partition_key;
return ret;
}
void ObLogCallbackTask::reset()
{
task_type_ = CLOG_UNKNOWN_CB;
partition_key_.reset();
}
int ObGeneralCallbackTask::init(common::ObICallback* callback)
{
int ret = OB_SUCCESS;
ObPartitionKey pkey;
if (OB_ISNULL(callback)) {
CLOG_LOG(WARN, "invalid argument", KP(callback));
ret = OB_INVALID_ARGUMENT;
} else if (OB_FAIL(ObLogCallbackTask::init(CLOG_BATCH_CB, pkey))) {
CLOG_LOG(WARN, "ObLogCallbackTask init error", K(ret), K(pkey));
} else {
callback_ = callback;
}
return ret;
}
void ObGeneralCallbackTask::reset()
{
ObLogCallbackTask::reset();
callback_ = NULL;
}
int ObGeneralCallbackTask::handle_callback()
{
return NULL != callback_ ? callback_->callback() : OB_NOT_INIT;
}
int ObMemberChangeCallbackTask::init(const CallbackTaskType& task_type, const common::ObPartitionKey& partition_key,
const clog::ObLogType log_type, const uint64_t ms_log_id, const int64_t mc_timestamp, const int64_t replica_num,
const common::ObMemberList& prev_member_list, const common::ObMemberList& curr_member_list,
const common::ObProposalID& ms_proposal_id)
{
int ret = OB_SUCCESS;
if (task_type < CLOG_UNKNOWN_CB || task_type > CLOG_MEMBER_CHANGE_SUCCESS_CB || !partition_key.is_valid() ||
mc_timestamp <= 0 || replica_num <= 0 || OB_INVALID_ID == ms_log_id || prev_member_list.get_member_number() < 0 ||
curr_member_list.get_member_number() < 0) {
CLOG_LOG(WARN,
"invalid argument",
K(task_type),
K(partition_key),
K(mc_timestamp),
K(ms_log_id),
K(replica_num),
K(prev_member_list),
K(curr_member_list));
ret = OB_INVALID_ARGUMENT;
} else if (OB_FAIL(ObLogCallbackTask::init(task_type, partition_key))) {
CLOG_LOG(WARN, "ObLogCallbackTask init error", K(ret), K(task_type), K(partition_key));
} else {
log_type_ = log_type;
ms_log_id_ = ms_log_id;
mc_timestamp_ = mc_timestamp;
replica_num_ = replica_num;
ms_proposal_id_ = ms_proposal_id;
if (OB_FAIL(prev_member_list_.deep_copy(prev_member_list))) {
CLOG_LOG(WARN, "prev member list deep copy error", K(ret));
} else if (OB_FAIL(curr_member_list_.deep_copy(curr_member_list))) {
CLOG_LOG(WARN, "curr member list deep copy error", K(ret));
} else {
// do nothing
}
}
return ret;
}
void ObMemberChangeCallbackTask::reset()
{
ObLogCallbackTask::reset();
log_type_ = OB_LOG_UNKNOWN;
ms_log_id_ = common::OB_INVALID_ID;
mc_timestamp_ = common::OB_INVALID_TIMESTAMP;
replica_num_ = 0;
prev_member_list_.reset();
curr_member_list_.reset();
ms_proposal_id_.reset();
}
} // namespace clog
} // namespace oceanbase