Files
oceanbase/src/share/ob_rpc_struct.cpp

4942 lines
156 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.
*/
#define USING_LOG_PREFIX SHARE
#include "share/ob_rpc_struct.h"
#include "share/inner_table/ob_inner_table_schema.h"
#include "share/backup/ob_backup_struct.h"
#include "share/ob_multi_cluster_util.h"
#include "lib/utility/ob_serialization_helper.h"
#include "lib/utility/ob_print_utils.h"
#include "rootserver/ob_global_index_builder.h"
#include "common/ob_store_format.h"
#include "observer/ob_server_struct.h"
namespace oceanbase {
using namespace common;
using namespace sql;
using namespace share::schema;
using namespace share;
using namespace storage;
namespace obrpc {
OB_SERIALIZE_MEMBER(Bool, v_);
OB_SERIALIZE_MEMBER(Int64, v_);
OB_SERIALIZE_MEMBER(UInt64, v_);
static const char* upgrade_stage_str[OB_UPGRADE_STAGE_MAX] = {"NULL", "NONE", "PREUPGRADE", "DBUPGRADE", "POSTUPRADE"};
const char* get_upgrade_stage_str(ObUpgradeStage stage)
{
const char* str = NULL;
if (stage > OB_UPGRADE_STAGE_INVALID && stage < OB_UPGRADE_STAGE_MAX) {
str = upgrade_stage_str[stage];
} else {
str = upgrade_stage_str[0];
}
return str;
}
ObUpgradeStage get_upgrade_stage(const ObString& str)
{
ObUpgradeStage stage = OB_UPGRADE_STAGE_INVALID;
for (int64_t i = OB_UPGRADE_STAGE_NONE; i < OB_UPGRADE_STAGE_MAX; i++) {
if (0 == str.case_compare(upgrade_stage_str[i])) {
stage = static_cast<ObUpgradeStage>(i);
break;
}
}
return stage;
}
int ObDDLArg::assign(const ObDDLArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(primary_schema_versions_.assign(other.primary_schema_versions_))) {
LOG_WARN("fail to assign primary_schema_versions", KR(ret));
} else if (OB_FAIL(based_schema_object_infos_.assign(other.based_schema_object_infos_))) {
LOG_WARN("fail to assign based_schema_object_infos", KR(ret));
} else {
ddl_stmt_str_ = other.ddl_stmt_str_;
exec_tenant_id_ = other.exec_tenant_id_;
ddl_id_str_ = other.ddl_id_str_;
is_replay_schema_ = other.is_replay_schema_;
}
return ret;
}
DEF_TO_STRING(ObGetRootserverRoleResult)
{
int64_t pos = 0;
J_KV(K_(role), K_(replica), K_(status), K_(partition_info));
return pos;
}
void ObAlterPlanBaselineArg::restore(const ObPlanBaselineInfo& old)
{
plan_baseline_info_.key_ = old.key_;
plan_baseline_info_.schema_version_ = old.schema_version_;
plan_baseline_info_.plan_baseline_id_ = old.plan_baseline_id_;
plan_baseline_info_.plan_hash_value_ = old.plan_hash_value_;
if (!(field_update_bitmap_ & FIXED)) {
plan_baseline_info_.fixed_ = old.fixed_;
}
if (!(field_update_bitmap_ & ENABLED)) {
plan_baseline_info_.enabled_ = old.enabled_;
}
if (!(field_update_bitmap_ & OUTLINE_DATA)) {
plan_baseline_info_.outline_data_ = old.outline_data_;
}
plan_baseline_info_.sql_id_ = old.sql_id_;
}
void ObGetRootserverRoleResult::reset()
{
role_ = 0;
zone_.reset();
type_ = REPLICA_TYPE_MAX;
replica_.reset();
status_ = status::MAX;
partition_info_.reset();
}
OB_SERIALIZE_MEMBER(ObGetRootserverRoleResult, role_, zone_, type_, status_, replica_, partition_info_);
DEF_TO_STRING(ObServerInfo)
{
int64_t pos = 0;
J_KV("region", region_, "zone", zone_, "server", server_);
return pos;
}
OB_SERIALIZE_MEMBER(ObServerInfo, zone_, server_, region_);
DEF_TO_STRING(ObPartitionId)
{
int64_t pos = 0;
J_KV(KT_(table_id), K_(partition_id));
return pos;
}
OB_SERIALIZE_MEMBER(ObPartitionId, table_id_, partition_id_);
DEF_TO_STRING(ObPartitionStat)
{
int64_t pos = 0;
J_KV(K_(partition_key), K_(stat));
return pos;
}
OB_SERIALIZE_MEMBER(ObPartitionStat, partition_key_, stat_);
//////////////////////////////////////////////
// ObClonePartitionArg
// DEF_TO_STRING(ObClonePartitionArg)
//{
// int64_t pos = 0;
// J_KV(K_(partition_key),
// K_(migrate_version),
// K_(last_sstable_index),
// K_(last_block_index));
// return pos;
//}
//
// OB_SERIALIZE_MEMBER(ObClonePartitionArg,
// partition_key_,
// migrate_version_,
// last_sstable_index_,
// last_block_index_);
//
//////////////////////////////////////////////
//////////////////////////////////////////////
//
// Resource Unit & Pool
//
//////////////////////////////////////////////
//
// unit
//
bool ObCreateResourceUnitArg::is_valid() const
{
// min_xxx be zero means min_xxx doesn't have limit, same with max_xxx
return !unit_name_.empty() && min_cpu_ >= 0 && min_iops_ >= 0 && min_memory_ >= 0 && max_cpu_ > 0 &&
max_memory_ > 0 && max_iops_ > 0 && max_disk_size_ > 0 && max_session_num_ > 0;
}
int ObCreateResourceUnitArg::assign(const ObCreateResourceUnitArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
unit_name_ = other.unit_name_;
min_cpu_ = other.min_cpu_;
min_iops_ = other.min_iops_;
min_memory_ = other.min_memory_;
max_cpu_ = other.max_cpu_;
max_memory_ = other.max_memory_;
max_disk_size_ = other.max_disk_size_;
max_iops_ = other.max_iops_;
max_session_num_ = other.max_session_num_;
if_not_exist_ = other.if_not_exist_;
}
return ret;
}
DEF_TO_STRING(ObCreateResourceUnitArg)
{
int64_t pos = 0;
J_KV(K_(unit_name),
K_(min_cpu),
K_(min_iops),
K_(min_memory),
K_(max_cpu),
K_(max_memory),
K_(max_iops),
K_(max_disk_size),
K_(max_session_num),
K_(if_not_exist));
return pos;
}
OB_SERIALIZE_MEMBER((ObCreateResourceUnitArg, ObDDLArg), unit_name_, min_cpu_, min_iops_, min_memory_, max_cpu_,
max_memory_, max_iops_, max_disk_size_, max_session_num_, if_not_exist_);
OB_SERIALIZE_MEMBER((ObSplitResourcePoolArg, ObDDLArg), pool_name_, zone_list_, split_pool_list_);
bool ObSplitResourcePoolArg::is_valid() const
{
return !pool_name_.empty() && zone_list_.count() > 0 && split_pool_list_.count() > 0;
}
int ObSplitResourcePoolArg::assign(const ObSplitResourcePoolArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else if (OB_FAIL(zone_list_.assign(other.zone_list_))) {
LOG_WARN("fail to assign zone_list", KR(ret));
} else if (OB_FAIL(split_pool_list_.assign(other.split_pool_list_))) {
LOG_WARN("fail to assign split_pool_list", KR(ret));
} else {
pool_name_ = other.pool_name_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObMergeResourcePoolArg, ObDDLArg), old_pool_list_, new_pool_list_);
bool ObMergeResourcePoolArg::is_valid() const
{
return old_pool_list_.count() > 0 && new_pool_list_.count() > 0 && new_pool_list_.count() < 2;
}
int ObMergeResourcePoolArg::assign(const ObMergeResourcePoolArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else if (OB_FAIL(old_pool_list_.assign(other.old_pool_list_))) {
LOG_WARN("fail to assign old_pool_list", KR(ret));
} else if (OB_FAIL(new_pool_list_.assign(other.new_pool_list_))) {
LOG_WARN("fail to assign new_pool_list", KR(ret));
}
return ret;
}
bool ObAlterResourceUnitArg::is_valid() const
{
// 0 means not change
return !unit_name_.empty() && min_cpu_ >= 0 && min_iops_ >= 0 && min_memory_ >= 0 && max_cpu_ >= 0 &&
max_memory_ >= 0 && max_iops_ >= 0 && max_disk_size_ >= 0 && max_session_num_ >= 0;
}
int ObAlterResourceUnitArg::assign(const ObAlterResourceUnitArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
unit_name_ = other.unit_name_;
min_cpu_ = other.min_cpu_;
min_iops_ = other.min_iops_;
min_memory_ = other.min_memory_;
max_cpu_ = other.max_cpu_;
max_memory_ = other.max_memory_;
max_disk_size_ = other.max_disk_size_;
max_iops_ = other.max_iops_;
max_session_num_ = other.max_session_num_;
}
return ret;
}
DEF_TO_STRING(ObAlterResourceUnitArg)
{
int64_t pos = 0;
J_KV(K_(unit_name),
K_(min_cpu),
K_(min_iops),
K_(min_memory),
K_(max_cpu),
K_(max_memory),
K_(max_iops),
K_(max_disk_size),
K_(max_session_num));
return pos;
}
OB_SERIALIZE_MEMBER((ObAlterResourceUnitArg, ObDDLArg), unit_name_, min_cpu_, min_iops_, min_memory_, max_cpu_,
max_memory_, max_iops_, max_disk_size_, max_session_num_);
bool ObDropResourceUnitArg::is_valid() const
{
return !unit_name_.empty();
}
int ObDropResourceUnitArg::assign(const ObDropResourceUnitArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
unit_name_ = other.unit_name_;
if_exist_ = other.if_exist_;
}
return ret;
}
DEF_TO_STRING(ObDropResourceUnitArg)
{
int64_t pos = 0;
J_KV(K_(unit_name), K_(if_exist));
return pos;
}
OB_SERIALIZE_MEMBER((ObDropResourceUnitArg, ObDDLArg), unit_name_, if_exist_);
/// pool
DEF_TO_STRING(ObCreateResourcePoolArg)
{
int64_t pos = 0;
J_KV(
K_(pool_name), K_(unit), K_(unit_num), K_(zone_list), K_(replica_type), K_(if_not_exist), K_(is_tenant_sys_pool));
return pos;
}
bool ObCreateResourcePoolArg::is_valid() const
{
// zone_list empty means all zone, don't need to check it
return !pool_name_.empty() && !unit_.empty() && unit_num_ > 0;
}
int ObCreateResourcePoolArg::assign(const ObCreateResourcePoolArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else if (OB_FAIL(zone_list_.assign(other.zone_list_))) {
LOG_WARN("fail to assign zone_list", KR(ret));
} else {
pool_name_ = other.pool_name_;
unit_ = other.unit_;
unit_num_ = other.unit_num_;
if_not_exist_ = other.if_not_exist_;
replica_type_ = other.replica_type_;
is_tenant_sys_pool_ = other.is_tenant_sys_pool_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObCreateResourcePoolArg, ObDDLArg), pool_name_, unit_, unit_num_, zone_list_, if_not_exist_,
replica_type_, is_tenant_sys_pool_);
bool ObAlterResourcePoolArg::is_valid() const
{
// unit empty means not changed, unit_num zero means not changed,
// zone_list empty means not changed
return !pool_name_.empty() && unit_num_ >= 0;
}
int ObAlterResourcePoolArg::assign(const ObAlterResourcePoolArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else if (OB_FAIL(zone_list_.assign(other.zone_list_))) {
LOG_WARN("fail to assign zone_list", KR(ret));
} else if (OB_FAIL(delete_unit_id_array_.assign(other.delete_unit_id_array_))) {
LOG_WARN("fail to assign delete_unit_id_array", KR(ret));
} else {
pool_name_ = other.pool_name_;
unit_ = other.unit_;
unit_num_ = other.unit_num_;
}
return ret;
}
DEF_TO_STRING(ObAlterResourcePoolArg)
{
int64_t pos = 0;
J_KV(K_(pool_name), K_(unit), K_(unit_num), K_(zone_list), K_(delete_unit_id_array));
return pos;
}
OB_SERIALIZE_MEMBER(
(ObAlterResourcePoolArg, ObDDLArg), pool_name_, unit_, unit_num_, zone_list_, delete_unit_id_array_);
bool ObDropResourcePoolArg::is_valid() const
{
return !pool_name_.empty();
}
int ObDropResourcePoolArg::assign(const ObDropResourcePoolArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
pool_name_ = other.pool_name_;
if_exist_ = other.if_exist_;
}
return ret;
}
DEF_TO_STRING(ObDropResourcePoolArg)
{
int64_t pos = 0;
J_KV(K_(pool_name), K_(if_exist));
return pos;
}
OB_SERIALIZE_MEMBER((ObDropResourcePoolArg, ObDDLArg), pool_name_, if_exist_);
OB_SERIALIZE_MEMBER(ObCmdArg, sql_text_);
OB_SERIALIZE_MEMBER(ObDDLArg, ddl_stmt_str_, exec_tenant_id_, ddl_id_str_, primary_schema_versions_, is_replay_schema_,
based_schema_object_infos_);
//////////////////////////////////////////////
//
// Tenant
//
//////////////////////////////////////////////
bool ObSysVarIdValue::is_valid() const
{
return (SYS_VAR_INVALID != sys_id_);
}
DEF_TO_STRING(ObSysVarIdValue)
{
int64_t pos = 0;
J_KV(K_(sys_id), K_(value));
return pos;
}
OB_SERIALIZE_MEMBER(ObSysVarIdValue, sys_id_, value_);
bool ObCreateTenantArg::is_valid() const
{
return !tenant_schema_.get_tenant_name_str().empty() && pool_list_.count() > 0;
}
int ObCreateTenantArg::check_valid() const
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(tenant_schema_.get_tenant_name_str().empty())) {
ret = OB_INVALID_ARGUMENT;
LOG_USER_ERROR(OB_INVALID_ARGUMENT, "tenant name. empty tenant name.");
} else if (OB_UNLIKELY(pool_list_.count() <= 0)) {
ret = OB_INVALID_ARGUMENT;
LOG_USER_ERROR(OB_INVALID_ARGUMENT, "pool list. empty pool list.");
}
return ret;
}
int ObCreateTenantArg::assign(const ObCreateTenantArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(tenant_schema_.assign(other.tenant_schema_))) {
LOG_WARN("fail to assign tenant schema", K(ret), K(other));
} else if (OB_FAIL(pool_list_.assign(other.pool_list_))) {
LOG_WARN("fail to assign pool list", K(ret), K(other));
} else if (OB_FAIL(sys_var_list_.assign(other.sys_var_list_))) {
LOG_WARN("fail to assign sys var list", K(ret), K(other));
} else if (OB_FAIL(restore_pkeys_.assign(other.restore_pkeys_))) {
LOG_WARN("fail to assign restore pkeys", K(ret), K(other));
} else if (OB_FAIL(restore_log_pkeys_.assign(other.restore_log_pkeys_))) {
LOG_WARN("fail to assign log restore pkeys", K(ret), K(other));
} else {
if_not_exist_ = other.if_not_exist_;
name_case_mode_ = other.name_case_mode_;
is_restore_ = other.is_restore_;
}
return ret;
}
DEF_TO_STRING(ObCreateTenantArg)
{
int64_t pos = 0;
J_KV(K_(tenant_schema),
K_(pool_list),
K_(if_not_exist),
K_(sys_var_list),
K_(name_case_mode),
K_(is_restore),
K_(restore_pkeys),
K_(restore_log_pkeys));
return pos;
}
OB_SERIALIZE_MEMBER((ObCreateTenantArg, ObDDLArg), tenant_schema_, pool_list_, if_not_exist_, sys_var_list_,
name_case_mode_, is_restore_, restore_pkeys_, restore_log_pkeys_);
bool ObCreateTenantEndArg::is_valid() const
{
return OB_INVALID_TENANT_ID != tenant_id_;
}
DEF_TO_STRING(ObCreateTenantEndArg)
{
int64_t pos = 0;
J_KV(K_(tenant_id));
return pos;
}
int ObCreateTenantEndArg::assign(const ObCreateTenantEndArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
tenant_id_ = other.tenant_id_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObCreateTenantEndArg, ObDDLArg), tenant_id_);
bool ObModifyTenantArg::is_valid() const
{
// empty pool_list means not changed
return !tenant_schema_.get_tenant_name_str().empty();
}
int ObModifyTenantArg::check_normal_tenant_can_do(bool& normal_can_do) const
{
int ret = OB_SUCCESS;
normal_can_do = false;
common::ObBitSet<> normal_ops;
if (OB_FAIL(normal_ops.add_member(READ_ONLY))) {
LOG_WARN("Failed to add member READ_ONLY", K(ret));
} else if (OB_FAIL(normal_ops.add_member(PRIMARY_ZONE))) {
LOG_WARN("Failed to add memeber PRIMARY ZONE", K(ret));
} else {
normal_can_do = alter_option_bitset_.is_subset(normal_ops);
}
return ret;
}
bool ObModifyTenantArg::is_allow_when_disable_ddl() const
{
bool bret = false;
if (alter_option_bitset_.is_empty()) {
bret = false;
} else {
bret = true;
for (int64_t i = 0; i < MAX_OPTION && bret; i++) {
if (alter_option_bitset_.has_member(i) && i != PRIMARY_ZONE && i != ZONE_LIST && i != RESOURCE_POOL_LIST) {
bret = false;
}
}
}
return bret;
}
bool ObModifyTenantArg::is_allow_when_upgrade() const
{
return !alter_option_bitset_.is_empty();
}
DEF_TO_STRING(ObModifyTenantArg)
{
int64_t pos = 0;
J_KV(K_(tenant_schema), K_(pool_list), K_(alter_option_bitset), K_(sys_var_list), K_(new_tenant_name));
return pos;
}
OB_SERIALIZE_MEMBER(
(ObModifyTenantArg, ObDDLArg), tenant_schema_, alter_option_bitset_, pool_list_, sys_var_list_, new_tenant_name_);
bool ObLockTenantArg::is_valid() const
{
return !tenant_name_.empty();
}
DEF_TO_STRING(ObLockTenantArg)
{
int64_t pos = 0;
J_KV(K_(tenant_name), K_(is_locked));
return pos;
}
OB_SERIALIZE_MEMBER((ObLockTenantArg, ObDDLArg), tenant_name_, is_locked_);
bool ObDropTenantArg::is_valid() const
{
return !tenant_name_.empty();
}
DEF_TO_STRING(ObDropTenantArg)
{
int64_t pos = 0;
J_KV(K_(tenant_name), K_(if_exist), K_(delay_to_drop), K_(force_drop), K_(object_name), K_(open_recyclebin));
return pos;
}
OB_SERIALIZE_MEMBER(
(ObDropTenantArg, ObDDLArg), tenant_name_, if_exist_, delay_to_drop_, force_drop_, object_name_, open_recyclebin_);
bool ObAddSysVarArg::is_valid() const
{
return sysvar_.is_valid();
}
OB_SERIALIZE_MEMBER((ObAddSysVarArg, ObDDLArg), sysvar_, if_not_exist_);
DEF_TO_STRING(ObAddSysVarArg)
{
int64_t pos = 0;
J_KV(K_(sysvar), K_(if_not_exist));
return pos;
}
bool ObModifySysVarArg::is_valid() const
{
return !sys_var_list_.empty() && OB_INVALID_ID != tenant_id_;
}
int ObModifySysVarArg::assign(const ObModifySysVarArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret), K(other));
} else if (OB_FAIL(sys_var_list_.assign(other.sys_var_list_))) {
LOG_WARN("fail to assign sys_var_list", KR(ret), K(other));
} else {
tenant_id_ = other.tenant_id_;
is_inner_ = other.is_inner_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObModifySysVarArg, ObDDLArg), tenant_id_, sys_var_list_, is_inner_);
DEF_TO_STRING(ObModifySysVarArg)
{
int64_t pos = 0;
J_KV(K_(tenant_id), K_(sys_var_list), K_(is_inner));
return pos;
}
bool ObCreateDatabaseArg::is_valid() const
{
return OB_INVALID_ID != database_schema_.get_tenant_id() && !database_schema_.get_database_name_str().empty();
}
DEF_TO_STRING(ObCreateDatabaseArg)
{
int64_t pos = 0;
J_KV(K_(database_schema), K_(if_not_exist));
return pos;
}
OB_SERIALIZE_MEMBER((ObCreateDatabaseArg, ObDDLArg), database_schema_, if_not_exist_);
bool ObAlterDatabaseArg::is_valid() const
{
return OB_INVALID_ID != database_schema_.get_tenant_id() && !database_schema_.get_database_name_str().empty();
}
DEF_TO_STRING(ObAlterDatabaseArg)
{
int64_t pos = 0;
J_KV(K_(database_schema));
return pos;
}
OB_SERIALIZE_MEMBER((ObAlterDatabaseArg, ObDDLArg), database_schema_, alter_option_bitset_);
bool ObDropDatabaseArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !database_name_.empty();
}
DEF_TO_STRING(ObDropDatabaseArg)
{
int64_t pos = 0;
J_KV(K_(tenant_id), K_(database_name), K_(if_exist), K_(to_recyclebin));
return pos;
}
OB_SERIALIZE_MEMBER((ObDropDatabaseArg, ObDDLArg), tenant_id_, database_name_, if_exist_, to_recyclebin_);
bool ObCreateTablegroupArg::is_valid() const
{
return OB_INVALID_ID != tablegroup_schema_.get_tenant_id() && !tablegroup_schema_.get_tablegroup_name().empty();
}
DEF_TO_STRING(ObCreateTablegroupArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(tablegroup_schema), K_(if_not_exist), K_(create_mode));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObCreateTablegroupArg, ObDDLArg), tablegroup_schema_, if_not_exist_, create_mode_)
bool ObDropTablegroupArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !tablegroup_name_.empty();
}
DEF_TO_STRING(ObDropTablegroupArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(tenant_id), K_(tablegroup_name), K_(if_exist));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObDropTablegroupArg, ObDDLArg), tenant_id_, tablegroup_name_, if_exist_);
bool ObAlterTablegroupArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !tablegroup_name_.empty();
}
bool ObAlterTablegroupArg::is_alter_partitions() const
{
return alter_option_bitset_.has_member(ADD_PARTITION) || alter_option_bitset_.has_member(DROP_PARTITION) ||
alter_option_bitset_.has_member(PARTITIONED_TABLE) || alter_option_bitset_.has_member(REORGANIZE_PARTITION) ||
alter_option_bitset_.has_member(SPLIT_PARTITION);
}
bool ObAlterTablegroupArg::is_allow_when_disable_ddl() const
{
bool bret = false;
if (alter_option_bitset_.is_empty()) {
bret = false;
} else {
bret = true;
for (int64_t i = 0; i < MAX_OPTION && bret; i++) {
if (alter_option_bitset_.has_member(i) && i != PRIMARY_ZONE) {
bret = false;
}
}
}
return bret;
}
bool ObAlterTablegroupArg::is_allow_when_upgrade() const
{
bool bret = false;
if (alter_option_bitset_.is_empty()) {
bret = false;
} else {
bret = true;
for (int64_t i = 0; i < MAX_OPTION && bret; i++) {
if (alter_option_bitset_.has_member(i) && i != PRIMARY_ZONE && i != LOCALITY && i != FORCE_LOCALITY) {
bret = false;
}
}
}
return bret;
}
DEF_TO_STRING(ObAlterTablegroupArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(table_items), K_(tenant_id), K_(tablegroup_name), K_(create_mode), K_(alter_tablegroup_schema));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObAlterTablegroupArg, ObDDLArg), tenant_id_, tablegroup_name_, table_items_, alter_option_bitset_,
create_mode_, alter_tablegroup_schema_);
bool ObCreateTableArg::is_valid() const
{
// index_arg_list can be empty
return OB_INVALID_ID != schema_.get_tenant_id() && !schema_.get_table_name_str().empty();
}
DEF_TO_STRING(ObCreateTableArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(if_not_exist),
K_(schema),
K_(index_arg_list),
K_(constraint_list),
K_(db_name),
K_(last_replay_log_id),
K_(foreign_key_arg_list),
K_(is_inner),
K_(error_info));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObCreateTableArg, ObDDLArg), if_not_exist_, schema_, index_arg_list_, db_name_, create_mode_,
foreign_key_arg_list_, constraint_list_, last_replay_log_id_, is_inner_, error_info_);
bool ObCreateTableArg::is_allow_when_upgrade() const
{
bool bret = true;
if (0 != foreign_key_arg_list_.count()) {
bret = false;
} else {
for (int64_t i = 0; bret && i < constraint_list_.count(); i++) {
if (CONSTRAINT_TYPE_PRIMARY_KEY != constraint_list_.at(i).get_constraint_type()) {
bret = false;
}
}
}
return bret;
}
bool ObCreateTableLikeArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !origin_db_name_.empty() && !origin_table_name_.empty() &&
!new_db_name_.empty() && !new_table_name_.empty() &&
(table_type_ == USER_TABLE || table_type_ == TMP_TABLE_ORA_SESS || table_type_ == TMP_TABLE);
}
DEF_TO_STRING(ObCreateTableLikeArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(if_not_exist),
K_(tenant_id),
K_(origin_db_name),
K_(origin_table_name),
K_(new_db_name),
K_(new_table_name),
K_(table_type),
K_(create_host));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObCreateTableLikeArg, ObDDLArg), if_not_exist_, tenant_id_, origin_db_name_, origin_table_name_,
new_db_name_, new_table_name_, create_mode_, table_type_, create_host_);
bool ObAlterTableArg::is_valid() const
{
// TODO: add more check if needed
if (is_refresh_sess_active_time()) {
return true;
} else {
return OB_INVALID_ID != alter_table_schema_.get_tenant_id() && !alter_table_schema_.origin_database_name_.empty() &&
!alter_table_schema_.origin_table_name_.empty();
}
}
bool ObAlterTableArg::is_refresh_sess_active_time() const
{
return (alter_table_schema_.alter_option_bitset_.has_member(SESSION_ACTIVE_TIME) &&
OB_DDL_ALTER_TABLE == alter_table_schema_.alter_type_ && OB_INVALID_ID != session_id_);
}
bool ObAlterTableArg::is_allow_when_disable_ddl() const
{
bool bret = false;
if (alter_table_schema_.alter_option_bitset_.is_empty()) {
bret = false;
} else {
bret = true;
for (int64_t i = 0; i < MAX_OPTION && bret && is_alter_options_; i++) {
if (alter_table_schema_.alter_option_bitset_.has_member(i) && i != PRIMARY_ZONE) {
bret = false;
}
}
}
return bret;
}
bool ObAlterTableArg::is_allow_when_upgrade() const
{
bool bret = false;
if (alter_table_schema_.alter_option_bitset_.is_empty() && !is_alter_columns_ && !is_alter_indexs_) {
bret = false;
} else {
bret = true;
if (is_alter_indexs_) {
for (int64_t i = 0; bret && i < index_arg_list_.count(); i++) {
if (OB_ISNULL(index_arg_list_.at(i))) {
bret = false;
LOG_WARN("ptr is null", K(bret));
} else {
bret = index_arg_list_.at(i)->is_allow_when_upgrade();
}
}
}
for (int64_t i = 0; i < MAX_OPTION && bret && is_alter_options_; i++) {
if (alter_table_schema_.alter_option_bitset_.has_member(i) && i != PRIMARY_ZONE && i != LOCALITY &&
i != FORCE_LOCALITY) {
bret = false;
}
}
if (is_alter_columns_ && bret) {
// Only add columns and extend the length of the columns will be allowed again in ddl_service
ObTableSchema::const_column_iterator it_begin = alter_table_schema_.column_begin();
ObTableSchema::const_column_iterator it_end = alter_table_schema_.column_end();
AlterColumnSchema* alter_column_schema = NULL;
for (; bret && it_begin != it_end; it_begin++) {
if (OB_ISNULL(*it_begin)) {
bret = false;
LOG_WARN("*it_begin is NULL", K(bret));
} else {
alter_column_schema = static_cast<AlterColumnSchema*>(*it_begin);
// mysql mode, OB_ALL_MODIFY_COLUMN function is a subset of OB_ALL_CHANGE_COLUMN;
// Oracle mode, only OB_ALL_MODIFY_COLUMN. In the case of only supporting extended column length, for
// simplicity of implementation, only OB_ALL_MODIFY_COLUMN is left here.
if (OB_DDL_MODIFY_COLUMN != alter_column_schema->alter_type_ &&
OB_DDL_ADD_COLUMN != alter_column_schema->alter_type_) {
bret = false;
}
}
}
}
}
return bret;
}
int ObAlterTableArg::set_nls_formats(const common::ObString* nls_formats)
{
int ret = OB_SUCCESS;
if (OB_ISNULL(nls_formats)) {
ret = OB_INVALID_ARGUMENT;
} else {
char* tmp_ptr[ObNLSFormatEnum::NLS_MAX] = {};
for (int64_t i = 0; OB_SUCC(ret) && i < ObNLSFormatEnum::NLS_MAX; ++i) {
if (OB_ISNULL(tmp_ptr[i] = (char*)allocator_.alloc(nls_formats[i].length()))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SHARE_LOG(ERROR, "failed to alloc memory!", "size", nls_formats[i].length(), K(ret));
} else {
MEMCPY(tmp_ptr[i], nls_formats[i].ptr(), nls_formats[i].length());
nls_formats_[i].assign_ptr(tmp_ptr[i], nls_formats[i].length());
}
}
if (OB_FAIL(ret)) {
for (int64_t i = 0; i < ObNLSFormatEnum::NLS_MAX; ++i) {
allocator_.free(tmp_ptr[i]);
}
}
}
return ret;
}
int ObAlterTableArg::serialize_index_args(char* buf, const int64_t data_len, int64_t& pos) const
{
int ret = OB_SUCCESS;
if (!is_valid() || NULL == buf || data_len <= 0 || pos >= data_len) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), "self", *this, KP(buf), K(data_len), K(pos));
} else if (OB_FAIL(serialization::encode_vi64(buf, data_len, pos, index_arg_list_.size()))) {
SHARE_LOG(WARN, "Fail to serialize index arg count", K(ret));
}
for (int i = 0; OB_SUCC(ret) && i < index_arg_list_.size(); ++i) {
ObIndexArg* index_arg = index_arg_list_.at(i);
if (index_arg->index_action_type_ == ObIndexArg::ADD_INDEX) {
ObCreateIndexArg* create_index_arg = static_cast<ObCreateIndexArg*>(index_arg);
if (NULL == create_index_arg) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, data_len, pos, create_index_arg->index_action_type_))) {
SHARE_LOG(WARN, "failed to serialize index type", K(ret));
} else if (OB_FAIL(create_index_arg->serialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to serialize create index arg!", K(data_len), K(pos), K(ret));
}
} else if (index_arg->index_action_type_ == ObIndexArg::DROP_INDEX) {
ObDropIndexArg* drop_index_arg = static_cast<ObDropIndexArg*>(index_arg);
if (NULL == drop_index_arg) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, data_len, pos, drop_index_arg->index_action_type_))) {
SHARE_LOG(WARN, "failed to serialize index type", K(ret));
} else if (OB_FAIL(drop_index_arg->serialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to serialize drop index arg!", K(data_len), K(pos), K(ret));
}
} else if (index_arg->index_action_type_ == ObIndexArg::ALTER_INDEX) {
ObAlterIndexArg* alter_index_arg = static_cast<ObAlterIndexArg*>(index_arg);
if (OB_UNLIKELY(NULL == alter_index_arg)) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, data_len, pos, alter_index_arg->index_action_type_))) {
SHARE_LOG(WARN, "failed to serialize index type", K(ret));
} else if (OB_FAIL(alter_index_arg->serialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to serialize alter index arg!", K(data_len), K(pos), K(ret));
}
} else if (index_arg->index_action_type_ == ObIndexArg::ALTER_INDEX_PARALLEL) {
ObAlterIndexParallelArg* alter_index_parallel_arg = static_cast<ObAlterIndexParallelArg*>(index_arg);
if (OB_UNLIKELY(NULL == alter_index_parallel_arg)) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else if (OB_FAIL(
serialization::encode_vi32(buf, data_len, pos, alter_index_parallel_arg->index_action_type_))) {
SHARE_LOG(WARN, "failed to serialize index type", K(ret));
} else if (OB_FAIL(alter_index_parallel_arg->serialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to serialize alter index parallel arg!", K(data_len), K(pos), K(ret));
}
} else if (index_arg->index_action_type_ == ObIndexArg::RENAME_INDEX) {
ObRenameIndexArg* rename_index_arg = static_cast<ObRenameIndexArg*>(index_arg);
SHARE_LOG(WARN,
"serialize rename index arg!",
K(rename_index_arg->origin_index_name_),
K(rename_index_arg->new_index_name_));
if (OB_UNLIKELY(NULL == rename_index_arg)) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, data_len, pos, rename_index_arg->index_action_type_))) {
SHARE_LOG(WARN, "failed to serialize index type", K(ret));
} else if (OB_FAIL(rename_index_arg->serialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to serialize alter index arg!", K(data_len), K(pos), K(ret));
}
} else if (index_arg->index_action_type_ == ObIndexArg::DROP_FOREIGN_KEY) {
ObDropForeignKeyArg* foreign_key_arg = static_cast<ObDropForeignKeyArg*>(index_arg);
if (OB_UNLIKELY(NULL == foreign_key_arg)) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, data_len, pos, foreign_key_arg->index_action_type_))) {
SHARE_LOG(WARN, "failed to serialize index type", K(ret));
} else if (OB_FAIL(foreign_key_arg->serialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to serialize drop foreign key arg!", K(data_len), K(pos), K(ret));
}
} else {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "unknown index action type", K_(index_arg->index_action_type), K(ret));
}
}
return ret;
}
int ObAlterTableArg::deserialize_index_args(const char* buf, const int64_t data_len, int64_t& pos)
{
int ret = OB_SUCCESS;
int64_t count = 0;
if (OB_ISNULL(buf) || OB_UNLIKELY(data_len <= 0) || OB_UNLIKELY(pos > data_len)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("buf should not be null", K(buf), K(data_len), K(pos), K(ret));
} else if (pos == data_len) {
// do nothing
} else if (OB_FAIL(serialization::decode_vi64(buf, data_len, pos, &count))) {
SHARE_LOG(WARN, "Fail to decode column count", K(ret));
}
for (int i = 0; OB_SUCC(ret) && i < count; ++i) {
ObIndexArg::IndexActionType index_action_type = ObIndexArg::INVALID_ACTION;
if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&index_action_type))))) {
SHARE_LOG(WARN, "failed to decode index action type", K(ret));
break;
}
void* tmp_ptr = NULL;
if (index_action_type == ObIndexArg::ADD_INDEX) {
ObCreateIndexArg* create_index_arg = NULL;
if (NULL == (tmp_ptr = (ObCreateIndexArg*)allocator_.alloc(sizeof(ObCreateIndexArg)))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SHARE_LOG(ERROR, "failed to alloc memory!", K(ret));
} else {
create_index_arg = new (tmp_ptr) ObCreateIndexArg();
if (OB_FAIL(create_index_arg->deserialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to deserialize create index arg!", K(ret));
} else if (OB_FAIL(index_arg_list_.push_back(create_index_arg))) {
SHARE_LOG(WARN, "failed to add to index arg list", K(ret));
}
if (OB_FAIL(ret)) {
create_index_arg->~ObCreateIndexArg();
allocator_.free(static_cast<char*>(tmp_ptr));
create_index_arg = NULL;
tmp_ptr = NULL;
}
}
} else if (index_action_type == ObIndexArg::DROP_INDEX) {
ObDropIndexArg* drop_index_arg = NULL;
if (NULL == (tmp_ptr = (ObDropIndexArg*)allocator_.alloc(sizeof(ObDropIndexArg)))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SHARE_LOG(ERROR, "failed to allocate memory!", K(ret));
} else {
drop_index_arg = new (tmp_ptr) ObDropIndexArg();
if (OB_FAIL(drop_index_arg->deserialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to deserialize drop index arg!", K(ret));
} else if (OB_FAIL(index_arg_list_.push_back(drop_index_arg))) {
SHARE_LOG(WARN, "failed to add to index arg list", K(ret));
}
if (OB_FAIL(ret)) {
drop_index_arg->~ObDropIndexArg();
allocator_.free(static_cast<char*>(tmp_ptr));
drop_index_arg = NULL;
tmp_ptr = NULL;
}
}
} else if (index_action_type == ObIndexArg::ALTER_INDEX) {
ObAlterIndexArg* alter_index_arg = NULL;
if (OB_UNLIKELY(NULL == (tmp_ptr = (ObAlterIndexArg*)allocator_.alloc(sizeof(ObAlterIndexArg))))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SHARE_LOG(ERROR, "failed to allocate memory!", K(ret));
} else {
alter_index_arg = new (tmp_ptr) ObAlterIndexArg();
if (OB_FAIL(alter_index_arg->deserialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to deserialize alter index arg!", K(ret));
} else if (OB_FAIL(index_arg_list_.push_back(alter_index_arg))) {
SHARE_LOG(WARN, "failed to add to index arg list", K(ret));
}
if (OB_FAIL(ret)) {
alter_index_arg->~ObAlterIndexArg();
allocator_.free(static_cast<char*>(tmp_ptr));
alter_index_arg = NULL;
tmp_ptr = NULL;
}
}
} else if (index_action_type == ObIndexArg::ALTER_INDEX_PARALLEL) {
ObAlterIndexParallelArg* alter_index_parallel_arg = NULL;
if (OB_UNLIKELY(
NULL == (tmp_ptr = (ObAlterIndexParallelArg*)allocator_.alloc(sizeof(ObAlterIndexParallelArg))))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SHARE_LOG(ERROR, "failed to allocate memory!", K(ret));
} else {
alter_index_parallel_arg = new (tmp_ptr) ObAlterIndexParallelArg();
if (OB_FAIL(alter_index_parallel_arg->deserialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to deserialize rename index arg!", K(ret));
} else if (OB_FAIL(index_arg_list_.push_back(alter_index_parallel_arg))) {
SHARE_LOG(WARN, "failed to alter index parallel to index arg list", K(ret));
}
if (OB_FAIL(ret)) {
alter_index_parallel_arg->~ObAlterIndexParallelArg();
allocator_.free(static_cast<char*>(tmp_ptr));
alter_index_parallel_arg = NULL;
tmp_ptr = NULL;
}
}
} else if (index_action_type == ObIndexArg::RENAME_INDEX) {
ObRenameIndexArg* rename_index_arg = NULL;
if (OB_UNLIKELY(NULL == (tmp_ptr = (ObRenameIndexArg*)allocator_.alloc(sizeof(ObRenameIndexArg))))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SHARE_LOG(ERROR, "failed to allocate memory!", K(ret));
} else {
rename_index_arg = new (tmp_ptr) ObRenameIndexArg();
if (OB_FAIL(rename_index_arg->deserialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to deserialize rename index arg!", K(ret));
} else if (OB_FAIL(index_arg_list_.push_back(rename_index_arg))) {
SHARE_LOG(WARN, "failed to rename to index arg list", K(ret));
}
if (OB_FAIL(ret)) {
rename_index_arg->~ObRenameIndexArg();
allocator_.free(static_cast<char*>(tmp_ptr));
rename_index_arg = NULL;
tmp_ptr = NULL;
}
}
} else if (index_action_type == ObIndexArg::DROP_FOREIGN_KEY) {
ObDropForeignKeyArg* drop_foreign_key_arg = NULL;
if (OB_UNLIKELY(NULL == (tmp_ptr = (ObDropForeignKeyArg*)allocator_.alloc(sizeof(ObDropForeignKeyArg))))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SHARE_LOG(ERROR, "failed to allocate memory!", K(ret));
} else {
drop_foreign_key_arg = new (tmp_ptr) ObDropForeignKeyArg();
if (OB_FAIL(drop_foreign_key_arg->deserialize(buf, data_len, pos))) {
SHARE_LOG(WARN, "failed to deserialize drop foreign key arg!", K(ret));
} else if (OB_FAIL(index_arg_list_.push_back(drop_foreign_key_arg))) {
SHARE_LOG(WARN, "failed to add to index arg list", K(ret));
}
if (OB_FAIL(ret)) {
drop_foreign_key_arg->~ObDropForeignKeyArg();
allocator_.free(static_cast<char*>(tmp_ptr));
drop_foreign_key_arg = NULL;
tmp_ptr = NULL;
}
}
} else {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "unknown index action type", K(index_action_type), K(ret));
}
}
return ret;
}
int64_t ObAlterTableArg::get_index_args_serialize_size() const
{
int ret = OB_SUCCESS;
int64_t len = 0;
if (!is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), "self", *this);
} else {
len += serialization::encoded_length_vi64(index_arg_list_.size());
}
for (int64_t i = 0; OB_SUCC(ret) && i < index_arg_list_.size(); ++i) {
ObIndexArg* index_arg = index_arg_list_.at(i);
if (NULL == index_arg) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg should not be null", K(ret));
} else {
len += serialization::encoded_length(index_arg->index_action_type_);
if (ObIndexArg::ADD_INDEX == index_arg->index_action_type_) {
ObCreateIndexArg* create_index_arg = static_cast<ObCreateIndexArg*>(index_arg);
if (NULL == create_index_arg) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else {
len += create_index_arg->get_serialize_size();
}
} else if (ObIndexArg::DROP_INDEX == index_arg->index_action_type_) {
ObDropIndexArg* drop_index_arg = static_cast<ObDropIndexArg*>(index_arg);
if (NULL == drop_index_arg) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else {
len += drop_index_arg->get_serialize_size();
}
} else if (ObIndexArg::ALTER_INDEX == index_arg->index_action_type_) {
ObAlterIndexArg* alter_index_arg = static_cast<ObAlterIndexArg*>(index_arg);
if (OB_UNLIKELY(NULL == alter_index_arg)) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else {
len += alter_index_arg->get_serialize_size();
}
} else if (ObIndexArg::DROP_FOREIGN_KEY == index_arg->index_action_type_) {
ObDropForeignKeyArg* drop_foreign_key_arg = static_cast<ObDropForeignKeyArg*>(index_arg);
if (OB_UNLIKELY(NULL == drop_foreign_key_arg)) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "foreign key arg is null", K(ret));
} else {
len += drop_foreign_key_arg->get_serialize_size();
}
} else if (ObIndexArg::ALTER_INDEX_PARALLEL == index_arg->index_action_type_) {
ObAlterIndexParallelArg* alter_index_parallel_arg = static_cast<ObAlterIndexParallelArg*>(index_arg);
if (OB_UNLIKELY(NULL == alter_index_parallel_arg)) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else {
len += alter_index_parallel_arg->get_serialize_size();
}
} else if (ObIndexArg::RENAME_INDEX == index_arg->index_action_type_) {
ObRenameIndexArg* rename_index_arg = static_cast<ObRenameIndexArg*>(index_arg);
if (OB_UNLIKELY(NULL == rename_index_arg)) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "index arg is null", K(ret));
} else {
len += rename_index_arg->get_serialize_size();
}
} else {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "Invalid index action type!", K(ret));
}
}
}
if (OB_FAIL(ret)) {
len = -1;
}
return len;
}
OB_DEF_SERIALIZE(ObAlterTableArg)
{
int ret = OB_SUCCESS;
if (!is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), "self", *this);
} else if (OB_FAIL(ObDDLArg::serialize(buf, buf_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize DDLArg", K(buf_len), K(pos), K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, is_alter_columns_))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize is_alter_columns", K(buf_len), K(pos), K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, is_alter_indexs_))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize is_alter_indexes", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, is_alter_options_))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize is_alter_options", K(ret));
} else if (OB_FAIL(serialize_index_args(buf, buf_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize index args", K(buf_len), K(pos), K(ret));
} else if (OB_FAIL(alter_table_schema_.serialize(buf, buf_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize alter table schema", K(ret));
} else if (OB_FAIL(tz_info_.serialize(buf, buf_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize timezone info", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, is_alter_partitions_))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize is_alter_partitions", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, alter_part_type_))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize alter_part_type", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, create_mode_))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize create_mode", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, alter_constraint_type_))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize alter_constraint_type", K(ret));
} else if (OB_FAIL(serialization::encode_vi64(buf, buf_len, pos, session_id_))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize session_id", K(ret));
} else if (OB_FAIL(tz_info_wrap_.serialize(buf, buf_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize timezone info wrap", K(ret));
} else if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, is_inner_))) {
SHARE_SCHEMA_LOG(WARN, "fail to encode skip is_inner", K(ret));
} else {
for (int64_t i = 0; i < ObNLSFormatEnum::NLS_MAX; ++i) {
if (OB_FAIL(nls_formats_[i].serialize(buf, buf_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize nls_formats_[i]", K(nls_formats_[i]), K(ret));
}
}
}
if (OB_SUCC(ret)) {
if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, skip_sys_table_check_))) {
SHARE_SCHEMA_LOG(WARN, "fail to encode skip sys table check", K(ret));
}
}
if (OB_SUCC(ret)) {
if (OB_FAIL(foreign_key_arg_list_.serialize(buf, buf_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize foreign_key_arg_list_", K(ret));
}
}
if (OB_SUCC(ret)) {
if (OB_FAIL(serialization::encode_vi32(buf, buf_len, pos, is_update_global_indexes_))) {
SHARE_SCHEMA_LOG(WARN, "fail to serialize is_update_global_indexes", KR(ret));
}
}
return ret;
}
OB_DEF_DESERIALIZE(ObAlterTableArg)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::deserialize(buf, data_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize DDLArg", K(data_len), K(pos), K(ret));
} else if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&is_alter_columns_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize alter_type_, ", K(ret));
} else if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&is_alter_indexs_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize alter_type_, ", K(ret));
} else if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&is_alter_options_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize alter_type_, ", K(ret));
} else if (OB_FAIL(deserialize_index_args(buf, data_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize index args, ", K(ret));
} else if (OB_FAIL(alter_table_schema_.deserialize(buf, data_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize alter table schema, ", K(ret));
} else if (OB_FAIL(tz_info_.deserialize(buf, data_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize timezone info", K(ret));
} else if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&is_alter_partitions_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize alter_partitions_, ", K(ret));
} else if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&alter_part_type_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize alter_part_type_, ", K(ret));
} else if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&create_mode_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize create_mode_, ", K(ret));
} else if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&alter_constraint_type_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize alter_constraint_type_, ", K(ret));
} else if (OB_FAIL(serialization::decode_vi64(buf, data_len, pos, ((int64_t*)(&session_id_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize session_id_, ", K(ret));
} else if (pos < data_len) {
if (OB_FAIL(tz_info_wrap_.deserialize(buf, data_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize timezone info", K(ret));
}
} else {
tz_info_wrap_.set_tz_info_offset(tz_info_.get_offset());
tz_info_wrap_.set_error_on_overlap_time(tz_info_.is_error_on_overlap_time());
}
if (OB_SUCC(ret) && pos < data_len) {
if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&is_inner_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to decode skip is_inner", K(ret));
}
}
if (OB_SUCC(ret) && pos < data_len) {
ObString tmp_string;
char* tmp_ptr[ObNLSFormatEnum::NLS_MAX] = {};
for (int64_t i = 0; OB_SUCC(ret) && i < ObNLSFormatEnum::NLS_MAX; ++i) {
if (OB_FAIL(tmp_string.deserialize(buf, data_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize nls_formats_", K(i), K(ret));
} else if (OB_ISNULL(tmp_ptr[i] = (char*)allocator_.alloc(tmp_string.length()))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SHARE_LOG(ERROR, "failed to alloc memory!", "size", tmp_string.length(), K(ret));
} else {
MEMCPY(tmp_ptr[i], tmp_string.ptr(), tmp_string.length());
nls_formats_[i].assign_ptr(tmp_ptr[i], tmp_string.length());
tmp_string.reset();
}
}
if (OB_FAIL(ret)) {
for (int64_t i = 0; i < ObNLSFormatEnum::NLS_MAX; ++i) {
allocator_.free(tmp_ptr[i]);
}
}
} else {
nls_formats_[ObNLSFormatEnum::NLS_DATE] = ObTimeConverter::COMPAT_OLD_NLS_DATE_FORMAT;
nls_formats_[ObNLSFormatEnum::NLS_TIMESTAMP] = ObTimeConverter::COMPAT_OLD_NLS_TIMESTAMP_FORMAT;
nls_formats_[ObNLSFormatEnum::NLS_TIMESTAMP_TZ] = ObTimeConverter::COMPAT_OLD_NLS_TIMESTAMP_TZ_FORMAT;
}
if (OB_SUCC(ret) && pos < data_len) {
if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&skip_sys_table_check_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to decode skip sys table check", K(ret));
}
}
if (OB_SUCC(ret) && pos < data_len) {
if (OB_FAIL(foreign_key_arg_list_.deserialize(buf, data_len, pos))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize foreign_key_arg_list_", K(ret));
}
}
if (OB_SUCC(ret) && pos < data_len) {
if (OB_FAIL(serialization::decode_vi32(buf, data_len, pos, ((int32_t*)(&is_update_global_indexes_))))) {
SHARE_SCHEMA_LOG(WARN, "fail to deserialize is_update_global_indexes, ", KR(ret));
}
}
return ret;
}
OB_DEF_SERIALIZE_SIZE(ObAlterTableArg)
{
int64_t len = 0;
int ret = OB_SUCCESS;
if (!is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), "self", *this);
} else {
len += ObDDLArg::get_serialize_size();
len += serialization::encoded_length_vi32(is_alter_columns_);
len += serialization::encoded_length_vi32(is_alter_indexs_);
len += serialization::encoded_length_vi32(is_alter_partitions_);
len += serialization::encoded_length_vi32(is_alter_options_);
len += get_index_args_serialize_size();
len += alter_table_schema_.get_serialize_size();
len += tz_info_.get_serialize_size();
len += serialization::encoded_length_vi32(alter_part_type_);
len += serialization::encoded_length_vi32(alter_constraint_type_);
len += serialization::encoded_length_vi32(create_mode_);
len += serialization::encoded_length_vi64(session_id_);
len += tz_info_wrap_.get_serialize_size();
len += serialization::encoded_length_vi32(is_inner_);
for (int64_t i = 0; i < ObNLSFormatEnum::NLS_MAX; ++i) {
len += nls_formats_[i].get_serialize_size();
}
len += serialization::encoded_length_vi32(skip_sys_table_check_);
len += foreign_key_arg_list_.get_serialize_size();
len += serialization::encoded_length_vi32(is_update_global_indexes_);
}
if (OB_FAIL(ret)) {
len = -1;
}
return len;
}
bool ObTruncateTableArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !database_name_.empty() && !table_name_.empty();
}
OB_SERIALIZE_MEMBER(
(ObTruncateTableArg, ObDDLArg), tenant_id_, database_name_, table_name_, create_mode_, to_recyclebin_, session_id_);
DEF_TO_STRING(ObTruncateTableArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(tenant_id), K_(database_name), K_(table_name), K_(to_recyclebin), K_(session_id));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER(ObRenameTableItem, origin_db_name_, new_db_name_, origin_table_name_, new_table_name_);
DEF_TO_STRING(ObRenameTableItem)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(origin_db_name), K_(new_db_name), K_(origin_table_name), K_(new_table_name), K_(origin_table_id));
J_OBJ_END();
return pos;
}
bool ObRenameTableItem::is_valid() const
{
return !origin_db_name_.empty() && !new_db_name_.empty() && !origin_table_name_.empty() && !new_table_name_.empty();
}
bool ObRenameTableArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && rename_table_items_.count() > 0;
}
DEF_TO_STRING(ObRenameTableArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(tenant_id), K_(rename_table_items));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObRenameTableArg, ObDDLArg), tenant_id_, rename_table_items_);
DEF_TO_STRING(ObTableItem)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(database_name), K_(table_name));
J_OBJ_END();
return pos;
}
bool ObTableItem::operator==(const ObTableItem& r) const
{
bool ret = false;
if (OB_NAME_CASE_INVALID != mode_ && mode_ == r.mode_) {
if (!table_name_.empty() && !r.table_name_.empty() && !database_name_.empty() && !r.database_name_.empty()) {
// todo compare using case mode @hualong
// ret = ObCharset::case_mode_equal(mode_, table_name_, r.table_name_) &&
// ObCharset::case_mode_equal(mode_, database_name_, r.database_name_);
ret = table_name_ == r.table_name_ && database_name_ == r.database_name_;
}
}
return ret;
}
OB_SERIALIZE_MEMBER(ObTableItem, database_name_, table_name_);
bool ObDropTableArg::is_valid() const
{
bool ret = (OB_INVALID_ID != tenant_id_ && table_type_ < MAX_TABLE_TYPE && tables_.count() > 0);
if (false == ret && (TMP_TABLE == table_type_ || TMP_TABLE_ORA_TRX == table_type_ ||
TMP_TABLE_ORA_SESS == table_type_ || TMP_TABLE_ALL == table_type_)) {
LOG_WARN("drop table valid check for temp table");
ret = (session_id_ != OB_INVALID_ID && true == if_exist_ && false == to_recyclebin_);
}
return ret;
}
DEF_TO_STRING(ObDropTableArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(
K_(tenant_id), K_(table_type), K_(tables), K_(if_exist), K_(to_recyclebin), K_(session_id), K_(sess_create_time));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObDropTableArg, ObDDLArg), tenant_id_, table_type_, tables_, if_exist_, to_recyclebin_,
session_id_, sess_create_time_);
bool ObOptimizeTableArg::is_valid() const
{
return (OB_INVALID_ID != tenant_id_ && tables_.count() > 0);
}
OB_SERIALIZE_MEMBER((ObOptimizeTableArg, ObDDLArg), tenant_id_, tables_);
DEF_TO_STRING(ObOptimizeTableArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(tenant_id), K_(tables));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObOptimizeTenantArg, ObDDLArg), tenant_name_);
bool ObOptimizeTenantArg::is_valid() const
{
return !tenant_name_.empty();
}
DEF_TO_STRING(ObOptimizeTenantArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(tenant_name));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObOptimizeAllArg, ObDDLArg));
DEF_TO_STRING(ObOptimizeAllArg)
{
int64_t pos = 0;
J_OBJ_START();
J_OBJ_END();
return pos;
}
DEF_TO_STRING(ObColumnSortItem)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(column_name), K_(prefix_len), K_(order_type), K_(column_id), K_(is_func_index));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER(ObColumnSortItem, column_name_, prefix_len_, order_type_, column_id_, is_func_index_);
bool ObTableOption::is_valid() const
{
// if replica_num not set, it's default value is zero
return block_size_ > 0 && replica_num_ >= 0 && index_status_ > INDEX_STATUS_NOT_FOUND &&
index_status_ < INDEX_STATUS_MAX && !compress_method_.empty() && progressive_merge_num_ >= 0 &&
ObStoreFormat::is_store_format_valid(store_format_) && ObStoreFormat::is_row_store_type_valid(row_store_type_);
}
bool ObIndexOption::is_valid() const
{
// if replica_num not set, it's default value is zero
return block_size_ > 0 && index_status_ > INDEX_STATUS_NOT_FOUND && index_status_ < INDEX_STATUS_MAX &&
progressive_merge_num_ >= 0;
}
DEF_TO_STRING(ObTableOption)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(block_size),
K_(replica_num),
K_(index_status),
K_(use_bloom_filter),
K_(compress_method),
K_(comment),
K_(tablegroup_name),
K_(progressive_merge_num),
K_(primary_zone),
K_(row_store_type),
K_(store_format));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER(ObTableOption, block_size_, replica_num_, index_status_, use_bloom_filter_, compress_method_,
comment_, progressive_merge_num_, row_store_type_, store_format_);
DEF_TO_STRING(ObIndexOption)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(block_size),
K_(replica_num),
K_(index_status),
K_(use_bloom_filter),
K_(compress_method),
K_(comment),
K_(tablegroup_name),
K_(progressive_merge_num),
K_(primary_zone),
K_(parser_name),
K_(index_attributes_set),
K_(row_store_type),
K_(store_format));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObIndexOption, ObTableOption), parser_name_, index_attributes_set_);
bool ObIndexArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !index_name_.empty() && !table_name_.empty() && !database_name_.empty() &&
INVALID_ACTION != index_action_type_;
}
bool ObIndexArg::is_allow_when_upgrade() const
{
return ADD_INDEX == index_action_type_ || DROP_INDEX == index_action_type_ || DROP_FOREIGN_KEY == index_action_type_;
}
DEF_TO_STRING(ObIndexArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(tenant_id), K_(session_id), K_(index_name), K_(table_name), K_(database_name), K_(index_action_type));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER(
(ObIndexArg, ObDDLArg), tenant_id_, index_name_, table_name_, database_name_, index_action_type_, session_id_);
bool ObCreateIndexArg::is_valid() const
{
// store_columns_ can be empty
return ObIndexArg::is_valid() && index_type_ > INDEX_TYPE_IS_NOT && index_type_ < INDEX_TYPE_MAX &&
index_columns_.count() > 0 && index_option_.is_valid() && index_using_type_ >= USING_BTREE &&
index_using_type_ < USING_TYPE_MAX;
}
DEF_TO_STRING(ObCreateIndexArg)
{
int64_t pos = 0;
J_OBJ_START();
J_NAME(N_INDEX_ARG);
J_COLON();
pos += ObIndexArg::to_string(buf + pos, buf_len - pos);
J_COMMA();
J_KV(K_(index_type),
K_(index_columns),
K_(fulltext_columns),
K_(store_columns),
K_(index_option),
K_(index_using_type),
K_(data_table_id),
K_(index_table_id),
K_(if_not_exist),
K_(index_schema),
K_(is_inner),
K_(nls_date_format),
K_(nls_timestamp_format),
K_(nls_timestamp_tz_format),
K_(sql_mode));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObCreateIndexArg, ObIndexArg), index_type_, index_columns_, store_columns_, index_option_,
index_using_type_, fulltext_columns_, create_mode_, data_table_id_, index_table_id_, if_not_exist_, with_rowid_,
index_schema_, is_inner_, hidden_store_columns_, nls_date_format_, nls_timestamp_format_, nls_timestamp_tz_format_,
sql_mode_);
bool ObAlterIndexArg::is_valid() const
{
// store_columns_ can be empty
return (ObIndexArg::is_valid() && (0 == index_visibility_ || 1 == index_visibility_));
}
DEF_TO_STRING(ObAlterIndexArg)
{
int64_t pos = 0;
J_OBJ_START();
J_NAME(N_INDEX_ARG);
J_COLON();
pos += ObIndexArg::to_string(buf + pos, buf_len - pos);
J_COMMA();
J_KV(K_(index_visibility));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObAlterIndexArg, ObIndexArg), index_visibility_);
DEF_TO_STRING(ObDropIndexArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(tenant_id),
K_(index_name),
K_(table_name),
K_(database_name),
K_(index_action_type),
K_(to_recyclebin),
K_(index_table_id));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObDropIndexArg, ObIndexArg), tenant_id_, index_name_, table_name_, database_name_,
index_action_type_, to_recyclebin_, index_table_id_);
DEF_TO_STRING(ObRebuildIndexArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(tenant_id), K_(index_name), K_(table_name), K_(database_name), K_(index_action_type), K_(index_table_id));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObRebuildIndexArg, ObIndexArg), create_mode_, index_table_id_);
bool ObRenameIndexArg::is_valid() const
{
int bret = true;
if (origin_index_name_.empty()) {
bret = false;
LOG_WARN("origin_index_name is empty", K_(origin_index_name));
} else if (new_index_name_.empty()) {
bret = false;
LOG_WARN("new_index_name is empty", K_(origin_index_name));
} else {
bret = ObIndexArg::is_valid();
}
return bret;
}
DEF_TO_STRING(ObAlterIndexParallelArg)
{
int64_t pos = 0;
J_OBJ_START();
J_NAME(N_INDEX_ARG);
J_COLON();
pos += ObIndexArg::to_string(buf + pos, buf_len - pos);
J_COMMA();
J_KV(K_(new_parallel));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObAlterIndexParallelArg, ObIndexArg), new_parallel_);
DEF_TO_STRING(ObRenameIndexArg)
{
int64_t pos = 0;
J_OBJ_START();
J_NAME(N_INDEX_ARG);
J_COLON();
pos += ObIndexArg::to_string(buf + pos, buf_len - pos);
J_COMMA();
J_KV(K_(origin_index_name), K_(new_index_name));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObRenameIndexArg, ObIndexArg), origin_index_name_, new_index_name_);
bool ObCreateForeignKeyArg::is_valid() const
{
return ObIndexArg::is_valid() && !parent_table_.empty() && child_columns_.count() > 0 &&
parent_columns_.count() > 0 && child_columns_.count() == parent_columns_.count() &&
ACTION_INVALID < update_action_ && update_action_ < ACTION_MAX && ACTION_INVALID < delete_action_ &&
delete_action_ < ACTION_MAX;
}
DEF_TO_STRING(ObCreateForeignKeyArg)
{
int64_t pos = 0;
J_OBJ_START();
J_NAME(N_FOREIGN_KEY_ARG);
J_COLON();
pos += ObIndexArg::to_string(buf + pos, buf_len - pos);
J_COMMA();
J_KV(K_(parent_database),
K_(parent_table),
K_(child_columns),
K_(parent_columns),
K_(update_action),
K_(delete_action),
K_(foreign_key_name),
K_(enable_flag),
K_(is_modify_enable_flag),
K_(ref_cst_type),
K_(ref_cst_id),
K_(validate_flag),
K_(is_modify_validate_flag),
K_(rely_flag),
K_(is_modify_rely_flag),
K_(is_modify_fk_state));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObCreateForeignKeyArg, ObIndexArg), parent_database_, parent_table_, child_columns_,
parent_columns_, update_action_, delete_action_, foreign_key_name_, enable_flag_, is_modify_enable_flag_,
ref_cst_type_, ref_cst_id_, validate_flag_, is_modify_validate_flag_, rely_flag_, is_modify_rely_flag_,
is_modify_fk_state_);
bool ObDropForeignKeyArg::is_valid() const
{
return ObIndexArg::is_valid() && !foreign_key_name_.empty();
}
DEF_TO_STRING(ObDropForeignKeyArg)
{
int64_t pos = 0;
J_OBJ_START();
J_NAME(N_FOREIGN_KEY_ARG);
J_COLON();
pos += ObIndexArg::to_string(buf + pos, buf_len - pos);
J_COMMA();
J_KV(K_(foreign_key_name));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObDropForeignKeyArg, ObIndexArg), foreign_key_name_);
bool ObFlashBackTableFromRecyclebinArg::is_valid() const
{
int bret = true;
if (OB_INVALID_ID == tenant_id_) {
bret = false;
LOG_WARN("tenant_id is invalid", K_(tenant_id));
} else if (origin_table_name_.empty()) {
bret = false;
LOG_WARN("origin_table_name is empty", K_(origin_table_name));
} else if ((new_db_name_.empty() && !new_table_name_.empty()) || (!new_db_name_.empty() && new_table_name_.empty())) {
bret = false;
LOG_WARN("new_db_name or new_table_name is invalid", K_(new_db_name), K_(new_table_name));
}
return bret;
}
OB_SERIALIZE_MEMBER((ObFlashBackTableFromRecyclebinArg, ObDDLArg), tenant_id_, origin_table_name_, new_db_name_,
new_table_name_, origin_db_name_);
bool ObFlashBackIndexArg::is_valid() const
{
int bret = true;
if (OB_INVALID_ID == tenant_id_) {
bret = false;
LOG_WARN("tenant_id is invalid", K_(tenant_id));
} else if (origin_table_name_.empty()) {
bret = false;
LOG_WARN("origin_table_name is empty", K_(origin_table_name));
} else if ((new_db_name_.empty() && !new_table_name_.empty()) || (!new_db_name_.empty() && new_table_name_.empty())) {
bret = false;
LOG_WARN("new_db_name or new_table_name is invalid", K_(new_db_name), K_(new_table_name));
}
return bret;
}
OB_SERIALIZE_MEMBER((ObFlashBackIndexArg, ObDDLArg), tenant_id_, origin_table_name_, new_db_name_, new_table_name_);
bool ObPurgeIndexArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !table_name_.empty();
}
OB_SERIALIZE_MEMBER((ObPurgeIndexArg, ObDDLArg), tenant_id_, table_name_);
bool ObFlashBackDatabaseArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !origin_db_name_.empty();
}
OB_SERIALIZE_MEMBER((ObFlashBackDatabaseArg, ObDDLArg), tenant_id_, origin_db_name_, new_db_name_);
bool ObFlashBackTenantArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_;
}
OB_SERIALIZE_MEMBER((ObFlashBackTenantArg, ObDDLArg), tenant_id_, origin_tenant_name_, new_tenant_name_);
bool ObPurgeTableArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !table_name_.empty();
}
OB_SERIALIZE_MEMBER((ObPurgeTableArg, ObDDLArg), tenant_id_, table_name_);
bool ObPurgeDatabaseArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !db_name_.empty();
}
OB_SERIALIZE_MEMBER((ObPurgeDatabaseArg, ObDDLArg), tenant_id_, db_name_);
bool ObPurgeTenantArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !tenant_name_.empty();
}
OB_SERIALIZE_MEMBER((ObPurgeTenantArg, ObDDLArg), tenant_id_, tenant_name_);
bool ObPurgeRecycleBinArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ || 0 == purge_num_ || 0 == expire_time_;
}
int ObPurgeRecycleBinArg::assign(const ObPurgeRecycleBinArg& other)
{
int ret = OB_SUCCESS;
tenant_id_ = other.tenant_id_;
purge_num_ = other.purge_num_;
expire_time_ = other.expire_time_;
auto_purge_ = other.auto_purge_;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
}
return ret;
}
OB_SERIALIZE_MEMBER((ObPurgeRecycleBinArg, ObDDLArg), tenant_id_, purge_num_, expire_time_, auto_purge_);
OB_SERIALIZE_MEMBER((ObProfileDDLArg, ObDDLArg), schema_, ddl_type_, is_cascade_);
bool ObReachPartitionLimitArg::is_valid() const
{
return batch_cnt_ > 0 && OB_INVALID_ID != tenant_id_;
}
OB_SERIALIZE_MEMBER(ObReachPartitionLimitArg, batch_cnt_, tenant_id_, is_pg_arg_);
OB_SERIALIZE_MEMBER(ObCheckFrozenVersionArg, frozen_version_);
OB_SERIALIZE_MEMBER(ObGetMinSSTableSchemaVersionArg, tenant_id_arg_list_);
OB_SERIALIZE_MEMBER(ObGetMinSSTableSchemaVersionRes, ret_list_);
bool ObCreatePartitionArg::is_valid() const
{
bool check_member_list = false;
check_member_list = !ignore_member_list_ && restore_ <= REPLICA_LOGICAL_RESTORE_DATA;
return !zone_.is_empty() && (pg_key_.is_valid() || partition_key_.is_valid()) && schema_version_ >= 0 &&
memstore_version_ > 0 && replica_num_ > 0 &&
((!check_member_list && 0 == member_list_.get_member_number()) || check_member_list) &&
((!is_binding() && member_list_.get_member_number() > 0) || is_binding() || !check_member_list) &&
((!is_binding() && leader_.is_valid()) || is_binding()) && lease_start_ > 0 && logonly_replica_num_ >= 0 &&
backup_replica_num_ >= 0 && readonly_replica_num_ >= 0 &&
((!is_binding() && common::ObReplicaTypeCheck::is_replica_type_valid(replica_type_)) ||
is_binding()) // No need to specify the copy type when binding
&& last_submit_timestamp_ >= 0 &&
((!is_create_pg() && table_schemas_.count() > 0) // create pg partition or create partition
|| (is_create_pg() && table_schemas_.count() == 0) // create pg
|| is_standby_restore()) &&
(frozen_timestamp_ > 0) && non_paxos_replica_num_ >= 0 && OB_INVALID_ID != last_replay_log_id_ &&
replica_property_.is_valid();
}
int ObCreatePartitionArg::deep_copy(const ObCreatePartitionArg& arg)
{
int ret = OB_SUCCESS;
if (this != &arg) {
zone_ = arg.zone_;
pg_key_ = arg.pg_key_;
partition_key_ = arg.partition_key_;
schema_version_ = arg.schema_version_;
memstore_version_ = arg.memstore_version_;
replica_num_ = arg.replica_num_;
leader_ = arg.leader_;
lease_start_ = arg.lease_start_;
logonly_replica_num_ = arg.logonly_replica_num_;
backup_replica_num_ = arg.backup_replica_num_;
readonly_replica_num_ = arg.readonly_replica_num_;
replica_type_ = arg.replica_type_;
last_submit_timestamp_ = arg.last_submit_timestamp_;
restore_ = arg.restore_;
source_partition_key_ = arg.source_partition_key_;
frozen_timestamp_ = arg.frozen_timestamp_;
non_paxos_replica_num_ = arg.non_paxos_replica_num_;
last_replay_log_id_ = arg.last_replay_log_id_;
replica_property_ = arg.replica_property_;
ignore_member_list_ = arg.ignore_member_list_;
if (OB_FAIL(member_list_.deep_copy(arg.member_list_))) {
STORAGE_LOG(WARN, "member list deep copy error", K(arg.member_list_));
} else if (OB_FAIL(table_schemas_.assign(arg.table_schemas_))) {
STORAGE_LOG(WARN, "table schema assign error", K(ret), K(arg.table_schemas_));
} else if (OB_FAIL(copy_assign(replica_property_, arg.replica_property_))) {
STORAGE_LOG(WARN, "fail to copy replica property", K(ret));
} else if (OB_FAIL(split_info_.assign(arg.split_info_))) {
STORAGE_LOG(WARN, "fail to assign split info", K(ret));
}
}
return ret;
}
int ObCreatePartitionArg::assign(const ObCreatePartitionArg& arg)
{
return deep_copy(arg);
}
int ObCreatePartitionArg::check_need_create_sstable(bool& need_create_sstable) const
{
int ret = OB_SUCCESS;
need_create_sstable = true;
if (1 == table_schemas_.count() && table_schemas_.at(0).is_global_index_table() &&
table_schemas_.at(0).get_index_status() == ObIndexStatus::INDEX_STATUS_UNAVAILABLE) {
need_create_sstable = false;
SHARE_LOG(INFO, "unavailable global index, no need create sstable", K(*this));
} else if (split_info_.is_valid()) {
need_create_sstable = false;
SHARE_LOG(INFO, "split dest partition, no need create sstable", K(*this));
} else if (REPLICA_NOT_RESTORE != restore_ && REPLICA_RESTORE_LOG != restore_ &&
REPLICA_RESTORE_ARCHIVE_DATA != restore_) {
need_create_sstable = false;
SHARE_LOG(INFO, "restore partition, no need create sstable", K(*this));
} else if (!ObReplicaTypeCheck::is_replica_with_ssstore(replica_type_)) {
need_create_sstable = false;
SHARE_LOG(INFO, "replica without ssstore, no need create sstable", K(*this));
} else if (is_standby_restore()) {
need_create_sstable = false;
SHARE_LOG(INFO, "replica is standby restore, no need create sstable", K(*this));
}
return ret;
}
bool ObCreatePartitionStorageArg::is_valid() const
{
return rgkey_.is_valid() && partition_key_.is_valid() && schema_version_ >= 0 && memstore_version_ > 0 &&
last_submit_timestamp_ >= 0 && table_schemas_.count() > 0;
}
bool ObCreatePartitionBatchArg::is_valid() const
{
bool bool_ret = (0 < args_.count());
FOREACH_CNT_X(a, args_, bool_ret)
{
if (OB_ISNULL(a)) {
bool_ret = false;
SHARE_LOG(WARN, "a is NULL");
} else {
bool_ret &= a->is_valid();
}
}
return bool_ret;
}
int ObCreatePartitionBatchArg::assign(const ObCreatePartitionBatchArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(args_, other.args_))) {
SHARE_LOG(WARN, "failed to assign args_", K(ret));
}
return ret;
}
DEF_TO_STRING(ObCreatePartitionArg)
{
int64_t pos = 0;
J_KV(K_(zone),
K_(partition_key),
K_(pg_key),
K_(schema_version),
K_(memstore_version),
K_(replica_num),
K_(member_list),
K_(leader),
K_(lease_start),
K_(logonly_replica_num),
K_(backup_replica_num),
K_(readonly_replica_num),
K_(replica_type),
K_(last_submit_timestamp),
K_(restore),
K_(frozen_timestamp),
K_(non_paxos_replica_num),
K_(last_replay_log_id),
K_(replica_property),
K_(ignore_member_list),
K_(split_info),
K_(table_schemas));
return pos;
}
DEF_TO_STRING(ObCreatePartitionStorageArg)
{
int64_t pos = 0;
J_KV(K_(rgkey),
K_(partition_key),
K_(schema_version),
K_(memstore_version),
K_(last_submit_timestamp),
K_(restore),
K_(table_schemas));
return pos;
}
void ObCreatePartitionBatchRes::reset()
{
ret_list_.reset();
timestamp_ = OB_INVALID_TIMESTAMP;
}
void ObCreatePartitionBatchRes::reuse()
{
ret_list_.reuse();
timestamp_ = OB_INVALID_TIMESTAMP;
}
int ObCreatePartitionBatchRes::assign(const ObCreatePartitionBatchRes& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(ret_list_, other.ret_list_))) {
SHARE_LOG(WARN, "failed to assign ret_list_", K(ret));
} else {
timestamp_ = other.timestamp_;
}
return ret;
}
DEF_TO_STRING(ObCreatePartitionBatchRes)
{
int64_t pos = 0;
J_KV(K_(ret_list), K_(timestamp));
return pos;
}
DEF_TO_STRING(ObCreatePartitionBatchArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(args));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER(ObCreatePartitionArg, zone_, partition_key_, memstore_version_, replica_num_, member_list_, leader_,
lease_start_, logonly_replica_num_, backup_replica_num_, readonly_replica_num_, replica_type_,
last_submit_timestamp_, schema_version_, restore_, table_schemas_, source_partition_key_, frozen_timestamp_,
non_paxos_replica_num_, last_replay_log_id_, pg_key_, replica_property_, split_info_, ignore_member_list_);
OB_SERIALIZE_MEMBER(ObCreatePartitionStorageArg, rgkey_, partition_key_, memstore_version_, last_submit_timestamp_,
schema_version_, restore_, table_schemas_);
OB_SERIALIZE_MEMBER(ObCreatePartitionBatchArg, args_);
OB_SERIALIZE_MEMBER(ObCreatePartitionBatchRes, ret_list_, timestamp_);
bool ObSetMemberListArg::is_valid() const
{
bool bret = false;
bret = key_.is_valid() && member_list_.is_valid();
if (bret && CLUSTER_VERSION_2250 <= GET_MIN_CLUSTER_VERSION()) {
bret = quorum_ >= member_list_.get_member_number();
}
if (bret && CLUSTER_VERSION_2260 <= GET_MIN_CLUSTER_VERSION()) {
bret = lease_start_ > 0 && leader_.is_valid();
}
return bret;
}
void ObSetMemberListArg::reset()
{
key_.reset();
member_list_.reset();
quorum_ = 0;
lease_start_ = 0;
leader_.reset();
}
int ObSetMemberListArg::assign(const ObSetMemberListArg& other)
{
int ret = OB_SUCCESS;
if (this != &other) {
if (OB_FAIL(member_list_.deep_copy(other.member_list_))) {
LOG_WARN("failed to copy member list", K(ret));
} else {
key_ = other.key_;
quorum_ = other.quorum_;
lease_start_ = other.lease_start_;
leader_ = other.leader_;
}
}
return ret;
}
int ObSetMemberListArg::init(const int64_t table_id, const int64_t partition_id, const int64_t partition_cnt,
const common::ObMemberList& member_list, const int64_t quorum, const int64_t lease_start,
const common::ObAddr& leader)
{
int ret = OB_SUCCESS;
reset();
if (OB_FAIL(member_list_.deep_copy(member_list))) {
LOG_WARN("failed to assign member list", K(ret), K(member_list));
} else if (OB_FAIL(key_.init(table_id, partition_id, partition_cnt))) {
LOG_WARN("failed to init partition key", K(ret), K(table_id), K(partition_id), K(partition_cnt));
} else {
quorum_ = quorum;
lease_start_ = lease_start;
leader_ = leader;
}
return ret;
}
DEF_TO_STRING(ObSetMemberListArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(key), K_(member_list), K_(quorum), K_(lease_start), K_(leader));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER(ObSetMemberListArg, key_, member_list_, quorum_, lease_start_, leader_);
void ObSetMemberListBatchArg::reset()
{
args_.reset();
timestamp_ = common::OB_INVALID_TIMESTAMP;
}
bool ObSetMemberListBatchArg::is_valid() const
{
return 0 < args_.count();
}
int ObSetMemberListBatchArg::assign(const ObSetMemberListBatchArg& other)
{
int ret = OB_SUCCESS;
if (this != &other) {
if (OB_FAIL(args_.assign(other.args_))) {
LOG_WARN("failed to copy member list", K(ret));
} else {
timestamp_ = other.timestamp_;
}
}
return ret;
}
int ObSetMemberListBatchArg::add_arg(const ObPartitionKey& key, const common::ObMemberList& member_list)
{
int ret = OB_SUCCESS;
ObSetMemberListArg arg;
if (OB_FAIL(arg.init(key.get_table_id(),
key.get_partition_id(),
0 /*partition_cnt*/,
member_list,
member_list.get_member_number()))) {
LOG_WARN("fail to init arg", K(ret), K(arg), K(member_list));
} else if (OB_FAIL(args_.push_back(arg))) {
LOG_WARN("fail to push back arg", K(ret), K(arg));
}
return ret;
}
DEF_TO_STRING(ObSetMemberListBatchArg)
{
int64_t pos = 0;
J_OBJ_START();
J_KV(K_(args), K_(timestamp));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER(ObSetMemberListBatchArg, args_, timestamp_);
OB_SERIALIZE_MEMBER(ObCheckUniqueIndexRequestArg, pkey_, index_id_, schema_version_);
bool ObCheckUniqueIndexRequestArg::is_valid() const
{
return pkey_.is_valid() && OB_INVALID_ID != index_id_ && schema_version_ >= 0;
}
void ObCheckUniqueIndexRequestArg::reset()
{
pkey_.reset();
index_id_ = OB_INVALID_ID;
schema_version_ = 0;
}
OB_SERIALIZE_MEMBER(ObCheckUniqueIndexResponseArg, pkey_, ret_code_, is_valid_);
bool ObCheckUniqueIndexResponseArg::is_valid() const
{
return pkey_.is_valid() && OB_INVALID != index_id_;
}
void ObCheckUniqueIndexResponseArg::reset()
{
pkey_.reset();
index_id_ = OB_INVALID_ID;
ret_code_ = OB_SUCCESS;
is_valid_ = false;
}
OB_SERIALIZE_MEMBER(
ObCalcColumnChecksumRequestArg, pkey_, index_id_, schema_version_, execution_id_, snapshot_version_);
bool ObCalcColumnChecksumRequestArg::is_valid() const
{
return pkey_.is_valid() && OB_INVALID_ID != index_id_ && OB_INVALID_VERSION != schema_version_ &&
OB_INVALID_ID != execution_id_ && OB_INVALID_VERSION != snapshot_version_;
}
void ObCalcColumnChecksumRequestArg::reset()
{
pkey_.reset();
index_id_ = OB_INVALID_ID;
schema_version_ = OB_INVALID_VERSION;
execution_id_ = OB_INVALID_ID;
snapshot_version_ = OB_INVALID_VERSION;
}
OB_SERIALIZE_MEMBER(ObCalcColumnChecksumResponseArg, pkey_, index_id_, ret_code_);
bool ObCalcColumnChecksumResponseArg::is_valid() const
{
return pkey_.is_valid() && OB_INVALID_ID != index_id_;
}
void ObCalcColumnChecksumResponseArg::reset()
{
pkey_.reset();
index_id_ = OB_INVALID_ID;
ret_code_ = OB_SUCCESS;
}
OB_SERIALIZE_MEMBER(ObCheckSingleReplicaMajorSSTableExistArg, pkey_, index_id_);
bool ObCheckSingleReplicaMajorSSTableExistArg::is_valid() const
{
return pkey_.is_valid() && OB_INVALID_ID != index_id_;
}
void ObCheckSingleReplicaMajorSSTableExistArg::reset()
{
pkey_.reset();
index_id_ = OB_INVALID_ID;
}
OB_SERIALIZE_MEMBER(ObCheckSingleReplicaMajorSSTableExistResult, timestamp_);
void ObCheckSingleReplicaMajorSSTableExistResult::reset()
{
timestamp_ = 0;
}
OB_SERIALIZE_MEMBER(ObCheckAllReplicaMajorSSTableExistArg, pkey_, index_id_);
bool ObCheckAllReplicaMajorSSTableExistArg::is_valid() const
{
return pkey_.is_valid() && OB_INVALID_ID != index_id_;
}
void ObCheckAllReplicaMajorSSTableExistArg::reset()
{
pkey_.reset();
index_id_ = OB_INVALID_ID;
}
OB_SERIALIZE_MEMBER(ObCheckAllReplicaMajorSSTableExistResult, max_timestamp_);
void ObCheckAllReplicaMajorSSTableExistResult::reset()
{
max_timestamp_ = 0;
}
bool ObMajorFreezeArg::is_valid() const
{
return frozen_version_ > 0 && schema_version_ > 0 && frozen_timestamp_ > 0;
}
DEF_TO_STRING(ObMajorFreezeArg)
{
int64_t pos = 0;
J_KV(K_(frozen_version), K_(schema_version), K_(frozen_timestamp));
return pos;
}
OB_SERIALIZE_MEMBER(ObAddReplicaBatchRes, res_array_);
bool ObAddReplicaBatchRes::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < res_array_.count() && is_valid; ++i) {
is_valid = res_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObRebuildReplicaBatchRes, res_array_);
bool ObRebuildReplicaBatchRes::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < res_array_.count() && is_valid; ++i) {
is_valid = res_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObCopySSTableBatchRes, res_array_, type_);
bool ObCopySSTableBatchRes::is_valid() const
{
bool is_valid = OB_COPY_SSTABLE_TYPE_INVALID != type_;
for (int64_t i = 0; i < res_array_.count() && is_valid; ++i) {
is_valid = res_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObMigrateReplicaBatchRes, res_array_);
bool ObMigrateReplicaBatchRes::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < res_array_.count() && is_valid; ++i) {
is_valid = res_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObStandbyCutDataBatchTaskRes, res_array_);
bool ObStandbyCutDataBatchTaskRes::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < res_array_.count() && is_valid; ++i) {
is_valid = res_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObChangeReplicaBatchRes, res_array_);
bool ObChangeReplicaBatchRes::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < res_array_.count() && is_valid; ++i) {
is_valid = res_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObBackupBatchRes, res_array_);
bool ObBackupBatchRes::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < res_array_.count() && is_valid; ++i) {
is_valid = res_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObValidateBatchRes, res_array_);
int ObValidateBatchRes::assign(const ObValidateBatchRes& res)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(res_array_, res.res_array_))) {
SHARE_LOG(WARN, "failed to assign res_array_", K(ret));
}
return ret;
}
bool ObValidateBatchRes::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < res_array_.count() && is_valid; ++i) {
is_valid = res_array_.at(i).is_valid();
}
return is_valid;
}
// ---structs for partition batch online/offline---
OB_SERIALIZE_MEMBER(ObAddReplicaBatchArg, arg_array_, timeout_ts_, task_id_);
bool ObAddReplicaBatchArg::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObRemoveNonPaxosReplicaBatchArg, arg_array_, timeout_ts_, task_id_);
bool ObRemoveNonPaxosReplicaBatchArg::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObRemoveNonPaxosReplicaBatchResult, return_array_);
OB_SERIALIZE_MEMBER(
ObStandbyCutDataBatchTaskArg, arg_array_, timeout_ts_, trace_id_, flashback_ts_, switchover_epoch_, fo_trace_id_);
bool ObStandbyCutDataBatchTaskArg::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
int ObStandbyCutDataBatchTaskArg::init(const int64_t timeout, const share::ObTaskId& task_id,
const common::ObCurTraceId::TraceId& fo_trace_id, const int64_t flashback_ts, const int64_t switchover_epoch)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(OB_INVALID_TIMESTAMP == timeout || 0 >= flashback_ts || 0 >= switchover_epoch)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid arg", KR(ret), K(timeout), K(flashback_ts), K(switchover_epoch));
} else {
timeout_ts_ = timeout + ObTimeUtility::current_time();
trace_id_ = task_id;
fo_trace_id_ = fo_trace_id;
flashback_ts_ = flashback_ts;
switchover_epoch_ = switchover_epoch;
}
return ret;
}
OB_SERIALIZE_MEMBER(ObMigrateReplicaBatchArg, arg_array_, timeout_ts_, task_id_);
bool ObMigrateReplicaBatchArg::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObChangeReplicaBatchArg, arg_array_, timeout_ts_, task_id_);
bool ObChangeReplicaArg::is_valid() const
{
bool bret = false;
bret = key_.is_valid() && src_.is_valid() && dst_.is_valid() && is_replica_op_priority_valid(priority_);
if (bret && !IS_CLUSTER_VERSION_BEFORE_2200) {
bret = (OB_INVALID_VERSION != switch_epoch_);
}
if (bret) {
if (GCTX.is_primary_cluster() || ObMultiClusterUtil::is_cluster_private_table(key_.get_table_id())) {
bret = quorum_ > 0;
}
}
return bret;
}
bool ObChangeReplicaBatchArg::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObRebuildReplicaBatchArg, arg_array_, timeout_ts_, task_id_);
bool ObRebuildReplicaBatchArg::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObCopySSTableBatchArg, arg_array_, timeout_ts_, task_id_, type_);
bool ObCopySSTableBatchArg::is_valid() const
{
bool is_valid = OB_COPY_SSTABLE_TYPE_INVALID != type_;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObServerCopyLocalIndexSSTableArg, data_src_, dst_, pkey_, index_table_id_, cluster_id_, data_size_);
bool ObServerCopyLocalIndexSSTableArg::is_valid() const
{
return data_src_.is_valid() && dst_.is_valid() && pkey_.is_valid() && OB_INVALID_ID != index_table_id_ &&
cluster_id_ != OB_INVALID_ID;
}
OB_SERIALIZE_MEMBER(ObBackupBatchArg, arg_array_, timeout_ts_, task_id_);
bool ObBackupBatchArg::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObValidateBatchArg, arg_array_, timeout_ts_, task_id_);
int ObValidateBatchArg::assign(const ObValidateBatchArg& arg)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(arg_array_, arg.arg_array_))) {
SHARE_LOG(WARN, "failed to assign arg_array_", K(ret));
} else {
timeout_ts_ = arg.timeout_ts_;
task_id_.set(arg.task_id_);
}
return ret;
}
bool ObValidateBatchArg::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObPhyRestoreReplicaArg, key_, src_, dst_, task_id_);
ObPhyRestoreReplicaArg::ObPhyRestoreReplicaArg()
: key_(), src_(), dst_(), task_id_(), priority_(common::ObReplicaOpPriority::PRIO_LOW)
{}
bool ObPhyRestoreReplicaArg::is_valid() const
{
return key_.is_valid() && src_.is_valid() && dst_.is_valid() && is_replica_op_priority_valid(priority_);
}
OB_SERIALIZE_MEMBER(ObPhyRestoreReplicaRes, key_, src_, dst_, result_);
ObPhyRestoreReplicaRes::ObPhyRestoreReplicaRes() : key_(), src_(), dst_(), result_(0)
{}
bool ObPhyRestoreReplicaRes::is_valid() const
{
return key_.is_valid() && src_.is_valid() && dst_.is_valid();
}
OB_SERIALIZE_MEMBER(ObAuthReplicaMovingkArg, pg_key_, addr_, file_id_, type_);
bool ObAuthReplicaMovingkArg::is_valid() const
{
return pg_key_.is_valid() && addr_.is_valid() && file_id_ > 0 && type_ > REPLICA_MOVING_TYPE_INVALID &&
type_ < REPLICA_MOVING_TYPE_MAX;
}
int ObValidateArg::assign(const ObValidateArg& arg)
{
int ret = OB_SUCCESS;
if (OB_FAIL(physical_validate_arg_.assign(arg.physical_validate_arg_))) {
SHARE_LOG(WARN, "failed to assign physical_validate_args_", K(ret));
} else {
trace_id_.set(arg.trace_id_);
dst_ = arg.dst_;
priority_ = arg.priority_;
}
return ret;
}
int ObValidateRes::assign(const ObValidateRes& arg)
{
int ret = OB_SUCCESS;
if (OB_FAIL(validate_arg_.assign(arg.validate_arg_))) {
SHARE_LOG(WARN, "failed to assign validate_args_", K(ret));
} else {
key_ = arg.key_;
dst_ = arg.dst_;
result_ = arg.result_;
}
return ret;
}
//----Structs for partition online/offline----
OB_SERIALIZE_MEMBER(ObAddReplicaArg, key_, src_, dst_, quorum_, reserved_modify_quorum_type_, task_id_, cluster_id_,
skip_change_member_list_, switch_epoch_);
OB_SERIALIZE_MEMBER(ObAddReplicaRes, key_, src_, dst_, data_src_, quorum_, result_);
OB_SERIALIZE_MEMBER(ObRemoveNonPaxosReplicaArg, key_, dst_, task_id_, skip_change_member_list_, switch_epoch_);
OB_SERIALIZE_MEMBER(ObMigrateReplicaArg, key_, src_, dst_, data_source_, quorum_, task_id_, skip_change_member_list_,
switch_epoch_, migrate_mode_);
OB_SERIALIZE_MEMBER(ObMigrateReplicaRes, key_, src_, dst_, data_src_, result_);
OB_SERIALIZE_MEMBER(ObChangeReplicaArg, key_, src_, dst_, quorum_, task_id_, skip_change_member_list_, switch_epoch_);
OB_SERIALIZE_MEMBER(ObChangeReplicaRes, key_, src_, dst_, data_src_, quorum_, result_);
OB_SERIALIZE_MEMBER(ObRebuildReplicaArg, key_, src_, dst_, task_id_, skip_change_member_list_, switch_epoch_);
OB_SERIALIZE_MEMBER(ObRebuildReplicaRes, key_, src_, dst_, data_src_, result_);
OB_SERIALIZE_MEMBER(ObRestoreReplicaArg, key_, src_, dst_, task_id_, skip_change_member_list_, switch_epoch_);
OB_SERIALIZE_MEMBER(ObRestoreReplicaRes, key_, src_, dst_, result_);
OB_SERIALIZE_MEMBER(ObCopySSTableArg, key_, src_, dst_, task_id_, type_, index_table_id_, cluster_id_,
skip_change_member_list_, switch_epoch_);
OB_SERIALIZE_MEMBER(ObCopySSTableRes, key_, src_, dst_, data_src_, type_, index_table_id_, result_);
OB_SERIALIZE_MEMBER(ObBackupArg, key_, src_, dst_, physical_backup_arg_, task_id_, cluster_id_,
skip_change_member_list_, switch_epoch_);
OB_SERIALIZE_MEMBER(ObBackupRes, key_, src_, dst_, data_src_, physical_backup_arg_, result_);
OB_SERIALIZE_MEMBER(ObValidateArg, trace_id_, dst_, physical_validate_arg_, priority_);
OB_SERIALIZE_MEMBER(ObValidateRes, key_, dst_, validate_arg_, result_);
OB_SERIALIZE_MEMBER(ObPhysicalFlashbackResultArg, min_version_, max_version_, enable_result_);
OB_SERIALIZE_MEMBER(ObCheckPhysicalFlashbackArg, merged_version_, flashback_scn_);
OB_SERIALIZE_MEMBER(ObStandbyCutDataTaskArg, pkey_, dst_);
OB_SERIALIZE_MEMBER(ObStandbyCutDataTaskRes, key_, dst_, result_);
//----End structs for partition online/offline----
OB_SERIALIZE_MEMBER(ObMajorFreezeArg, frozen_version_, schema_version_, frozen_timestamp_);
DEF_TO_STRING(ObSetReplicaNumArg)
{
int64_t pos = 0;
J_KV(K_(partition_key), K_(replica_num));
return pos;
}
OB_SERIALIZE_MEMBER(ObSetReplicaNumArg, partition_key_, replica_num_);
DEF_TO_STRING(ObSetParentArg)
{
int64_t pos = 0;
J_KV(K_(partition_key), K_(parent_addr));
return pos;
}
OB_SERIALIZE_MEMBER(ObSetParentArg, partition_key_, parent_addr_);
void ObSwitchSchemaArg::reset()
{
schema_info_.reset();
force_refresh_ = false;
}
DEF_TO_STRING(ObSwitchSchemaArg)
{
int64_t pos = 0;
J_KV(K_(schema_info), K_(force_refresh));
return pos;
}
OB_SERIALIZE_MEMBER(ObSwitchSchemaArg, schema_info_, force_refresh_);
DEF_TO_STRING(ObSwitchLeaderArg)
{
int64_t pos = 0;
J_KV(K_(partition_key), K_(leader_addr));
return pos;
}
int ObCheckSchemaVersionElapsedArg::build(rootserver::ObGlobalIndexTask* task, common::ObPartitionKey& pkey)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(NULL == task || !pkey.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), KP(task), K(pkey));
} else {
pkey_ = pkey;
schema_version_ = task->schema_version_;
}
return ret;
}
int ObCheckCtxCreateTimestampElapsedArg::build(rootserver::ObGlobalIndexTask* task, common::ObPartitionKey& pkey)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(NULL == task || !pkey.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), KP(task), K(pkey));
} else {
pkey_ = pkey;
sstable_exist_ts_ = task->major_sstable_exist_reply_ts_;
}
return ret;
}
OB_SERIALIZE_MEMBER(ObSwitchLeaderArg, partition_key_, leader_addr_);
OB_SERIALIZE_MEMBER(ObCheckSchemaVersionElapsedArg, pkey_, schema_version_);
OB_SERIALIZE_MEMBER(ObCheckCtxCreateTimestampElapsedArg, pkey_, sstable_exist_ts_);
OB_SERIALIZE_MEMBER(ObCheckSchemaVersionElapsedResult, snapshot_);
OB_SERIALIZE_MEMBER(ObCheckCtxCreateTimestampElapsedResult, snapshot_);
OB_SERIALIZE_MEMBER(ObGetLeaderCandidatesArg, partitions_);
OB_SERIALIZE_MEMBER(ObGetLeaderCandidatesV2Arg, partitions_, prep_candidates_);
OB_SERIALIZE_MEMBER(CandidateStatus, candidate_status_);
OB_SERIALIZE_MEMBER(ObGetLeaderCandidatesResult, candidates_, candidate_status_array_);
//----Structs for managing privileges----
OB_SERIALIZE_MEMBER(ObAccountArg, user_name_, host_name_, is_role_);
bool ObCreateUserArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && user_infos_.count() > 0;
}
int ObCreateUserArg::assign(const ObCreateUserArg& other)
{
int ret = OB_SUCCESS;
tenant_id_ = other.tenant_id_;
if_not_exist_ = other.if_not_exist_;
creator_id_ = other.creator_id_;
primary_zone_ = other.primary_zone_;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else if (OB_FAIL(user_infos_.assign(other.user_infos_))) {
LOG_WARN("failed to assign user info", KR(ret), K(other));
}
return ret;
}
OB_SERIALIZE_MEMBER((ObCreateUserArg, ObDDLArg), tenant_id_, user_infos_, if_not_exist_, creator_id_, primary_zone_);
bool ObDropUserArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && users_.count() > 0 && hosts_.count() == users_.count();
}
OB_DEF_SERIALIZE(ObDropUserArg)
{
int ret = OB_SUCCESS;
BASE_SER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_ENCODE, tenant_id_, users_, hosts_, is_role_);
return ret;
}
OB_DEF_DESERIALIZE(ObDropUserArg)
{
int ret = OB_SUCCESS;
BASE_DESER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_DECODE, tenant_id_, users_, hosts_);
// compatibility for old version
if (OB_SUCC(ret) && users_.count() > 0 && hosts_.empty()) {
const ObString TMP_DEFAULT_HOST_NAME(OB_DEFAULT_HOST_NAME);
for (int64_t i = 0; i < users_.count() && OB_SUCC(ret); ++i) {
if (OB_FAIL(hosts_.push_back(TMP_DEFAULT_HOST_NAME))) {
LOG_WARN("fail to push_back DEFAULT_HOST_NAME", K(ret));
}
}
}
if (OB_SUCC(ret)) {
LST_DO_CODE(OB_UNIS_DECODE, is_role_);
}
return ret;
}
OB_DEF_SERIALIZE_SIZE(ObDropUserArg)
{
int64_t len = ObDDLArg::get_serialize_size();
LST_DO_CODE(OB_UNIS_ADD_LEN, tenant_id_, users_, hosts_, is_role_);
return len;
}
bool ObRenameUserArg::is_valid() const
{
return (OB_INVALID_ID != tenant_id_ && old_users_.count() > 0 && old_users_.count() == new_users_.count() &&
old_hosts_.count() == new_hosts_.count() && old_users_.count() == old_hosts_.count());
}
OB_DEF_SERIALIZE(ObRenameUserArg)
{
int ret = OB_SUCCESS;
BASE_SER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_ENCODE, tenant_id_, old_users_, new_users_, old_hosts_, new_hosts_);
return ret;
}
OB_DEF_DESERIALIZE(ObRenameUserArg)
{
int ret = OB_SUCCESS;
BASE_DESER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_DECODE, tenant_id_, old_users_, new_users_, old_hosts_, new_hosts_);
// compatibility for old version
if (OB_SUCC(ret) && old_users_.count() > 0 && new_users_.count() == old_users_.count() &&
(old_hosts_.empty() || new_hosts_.empty())) {
if (old_hosts_.empty() != new_hosts_.empty()) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("old_hosts and new_hosts should have same count", K_(old_hosts), K_(new_hosts), K(ret));
} else {
const ObString TMP_DEFAULT_HOST_NAME(OB_DEFAULT_HOST_NAME);
for (int64_t i = 0; i < old_users_.count() && OB_SUCC(ret); ++i) {
if (OB_FAIL(old_hosts_.push_back(TMP_DEFAULT_HOST_NAME))) {
LOG_WARN("fail to push_back DEFAULT_HOST_NAME", K(ret));
} else if (OB_FAIL(new_hosts_.push_back(TMP_DEFAULT_HOST_NAME))) {
LOG_WARN("fail to push_back DEFAULT_HOST_NAME", K(ret));
}
}
}
}
return ret;
}
OB_DEF_SERIALIZE_SIZE(ObRenameUserArg)
{
int64_t len = ObDDLArg::get_serialize_size();
LST_DO_CODE(OB_UNIS_ADD_LEN, tenant_id_, old_users_, new_users_, old_hosts_, new_hosts_);
return len;
}
bool ObSetPasswdArg::is_valid() const
{
// user_name_ and passwd_ can be empty
return OB_INVALID_ID != tenant_id_;
}
OB_DEF_SERIALIZE(ObSetPasswdArg)
{
int ret = OB_SUCCESS;
BASE_SER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_ENCODE, tenant_id_, user_, passwd_, host_, ssl_type_, ssl_cipher_, x509_issuer_, x509_subject_,
modify_max_connections_, max_connections_per_hour_, max_user_connections_);
return ret;
}
OB_DEF_DESERIALIZE(ObSetPasswdArg)
{
int ret = OB_SUCCESS;
host_.assign_ptr(OB_DEFAULT_HOST_NAME, static_cast<int32_t>(STRLEN(OB_DEFAULT_HOST_NAME)));
ssl_type_ = schema::ObSSLType::SSL_TYPE_NOT_SPECIFIED;
ssl_cipher_.reset();
x509_issuer_.reset();
x509_subject_.reset();
BASE_DESER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_DECODE, tenant_id_, user_, passwd_, host_, ssl_type_, ssl_cipher_, x509_issuer_, x509_subject_,
modify_max_connections_, max_connections_per_hour_, max_user_connections_);
return ret;
}
OB_DEF_SERIALIZE_SIZE(ObSetPasswdArg)
{
int64_t len = ObDDLArg::get_serialize_size();
LST_DO_CODE(OB_UNIS_ADD_LEN, tenant_id_, user_, passwd_, host_, ssl_type_, ssl_cipher_, x509_issuer_, x509_subject_,
modify_max_connections_, max_connections_per_hour_, max_user_connections_);
return len;
}
bool ObLockUserArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && users_.count() > 0 && users_.count() == hosts_.count();
}
OB_DEF_SERIALIZE(ObLockUserArg)
{
int ret = OB_SUCCESS;
BASE_SER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_ENCODE, tenant_id_, users_, locked_, hosts_);
return ret;
}
OB_DEF_DESERIALIZE(ObLockUserArg)
{
int ret = OB_SUCCESS;
BASE_DESER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_DECODE, tenant_id_, users_, locked_, hosts_);
// compatibility for old version
if (OB_SUCC(ret) && users_.count() > 0 && hosts_.empty()) {
const ObString TMP_DEFAULT_HOST_NAME(OB_DEFAULT_HOST_NAME);
for (int64_t i = 0; i < users_.count() && OB_SUCC(ret); ++i) {
if (OB_FAIL(hosts_.push_back(TMP_DEFAULT_HOST_NAME))) {
LOG_WARN("fail to push_back DEFAULT_HOST_NAME", K(ret));
}
}
}
return ret;
}
OB_DEF_SERIALIZE_SIZE(ObLockUserArg)
{
int64_t len = ObDDLArg::get_serialize_size();
LST_DO_CODE(OB_UNIS_ADD_LEN, tenant_id_, users_, locked_, hosts_);
return len;
}
int ObAlterUserProfileArg::assign(const ObAlterUserProfileArg& other)
{
int ret = OB_SUCCESS;
tenant_id_ = other.tenant_id_;
user_name_ = other.user_name_;
host_name_ = other.host_name_;
profile_name_ = other.profile_name_;
user_id_ = other.user_id_;
default_role_flag_ = other.default_role_flag_;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else if (OB_FAIL(role_id_array_.assign(other.role_id_array_))) {
SHARE_LOG(WARN, "fail to assign role_id_array", K(ret));
}
return ret;
}
bool ObAlterUserProfileArg::is_valid() const
{
return is_valid_tenant_id(tenant_id_) &&
((user_name_.length() > 0 && host_name_.length() > 0) || is_valid_id(user_id_));
}
OB_SERIALIZE_MEMBER((ObAlterUserProfileArg, ObDDLArg), tenant_id_, user_name_, host_name_, profile_name_, user_id_,
default_role_flag_, role_id_array_);
bool ObGrantArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_
/* Oracle mode Different permission system
* && priv_level_ > OB_PRIV_INVALID_LEVEL
&& priv_level_ < OB_PRIV_MAX_LEVEL
&& users_passwd_.count() > 0
&& users_passwd_.count() == hosts_.count() * 2
*/
;
}
bool ObGrantArg::is_allow_when_disable_ddl() const
{
return is_inner_;
}
int ObGrantArg::assign(const ObGrantArg& other)
{
int ret = OB_SUCCESS;
tenant_id_ = other.tenant_id_;
priv_level_ = other.priv_level_;
db_ = other.db_;
table_ = other.table_;
priv_set_ = other.priv_set_;
need_create_user_ = other.need_create_user_;
has_create_user_priv_ = other.has_create_user_priv_;
option_ = other.option_;
object_type_ = other.object_type_;
object_id_ = other.object_id_;
grantor_id_ = other.grantor_id_;
is_inner_ = other.is_inner_;
if (OB_FAIL(ObDDLArg::assign(other))) {
SHARE_LOG(WARN, "fail to assign ddl arg", K(ret));
} else if (OB_FAIL(users_passwd_.assign(other.users_passwd_))) {
SHARE_LOG(WARN, "fail to assign users_passwd_", K(ret));
} else if (OB_FAIL(hosts_.assign(other.hosts_))) {
SHARE_LOG(WARN, "fail to assign hosts_", K(ret));
} else if (OB_FAIL(roles_.assign(other.roles_))) {
SHARE_LOG(WARN, "fail to assign roles_", K(ret));
} else if (OB_FAIL(sys_priv_array_.assign(other.sys_priv_array_))) {
SHARE_LOG(WARN, "fail to assign sys_priv_array_", K(ret));
} else if (OB_FAIL(obj_priv_array_.assign(other.obj_priv_array_))) {
SHARE_LOG(WARN, "fail to assign obj_priv_array_", K(ret));
} else if (OB_FAIL(ins_col_ids_.assign(other.ins_col_ids_))) {
SHARE_LOG(WARN, "fail to assign ins_col_ids_", K(ret));
} else if (OB_FAIL(upd_col_ids_.assign(other.upd_col_ids_))) {
SHARE_LOG(WARN, "fail to assign upd_col_ids_", K(ret));
} else if (OB_FAIL(ref_col_ids_.assign(other.ref_col_ids_))) {
SHARE_LOG(WARN, "fail to assign ref_col_ids_", K(ret));
}
return ret;
}
OB_DEF_SERIALIZE(ObGrantArg)
{
int ret = OB_SUCCESS;
BASE_SER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_ENCODE,
tenant_id_,
priv_level_,
db_,
table_,
priv_set_,
users_passwd_,
need_create_user_,
has_create_user_priv_,
hosts_,
roles_,
option_,
sys_priv_array_,
obj_priv_array_,
object_type_,
object_id_,
ins_col_ids_,
upd_col_ids_,
ref_col_ids_,
grantor_id_,
remain_roles_,
is_inner_);
return ret;
}
OB_DEF_DESERIALIZE(ObGrantArg)
{
int ret = OB_SUCCESS;
BASE_DESER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_DECODE,
tenant_id_,
priv_level_,
db_,
table_,
priv_set_,
users_passwd_,
need_create_user_,
has_create_user_priv_,
hosts_,
roles_,
option_,
sys_priv_array_,
obj_priv_array_,
object_type_,
object_id_,
ins_col_ids_,
upd_col_ids_,
ref_col_ids_,
grantor_id_,
remain_roles_,
is_inner_);
// compatibility for old version
if (OB_SUCC(ret) && users_passwd_.count() > 0 && hosts_.empty()) {
const int64_t user_count = users_passwd_.count() / 2;
const ObString TMP_DEFAULT_HOST_NAME(OB_DEFAULT_HOST_NAME);
for (int64_t i = 0; i < user_count && OB_SUCC(ret); ++i) {
if (OB_FAIL(hosts_.push_back(TMP_DEFAULT_HOST_NAME))) {
LOG_WARN("fail to push_back DEFAULT_HOST_NAME", K(ret));
}
}
}
return ret;
}
OB_DEF_SERIALIZE_SIZE(ObGrantArg)
{
int64_t len = ObDDLArg::get_serialize_size();
LST_DO_CODE(OB_UNIS_ADD_LEN,
tenant_id_,
priv_level_,
db_,
table_,
priv_set_,
users_passwd_,
need_create_user_,
has_create_user_priv_,
hosts_,
roles_,
option_,
sys_priv_array_,
obj_priv_array_,
object_type_,
object_id_,
ins_col_ids_,
upd_col_ids_,
ref_col_ids_,
grantor_id_,
remain_roles_,
is_inner_);
return len;
}
bool ObStandbyGrantArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && OB_INVALID_ID != user_id_ && !db_.empty();
}
OB_SERIALIZE_MEMBER((ObStandbyGrantArg, ObDDLArg), tenant_id_, user_id_, db_, table_, priv_level_, priv_set_);
bool ObRevokeUserArg::is_valid() const
{
// FIXME: Currently the role only supports revoke from user
return OB_INVALID_ID != tenant_id_ && OB_INVALID_ID != user_id_;
}
OB_SERIALIZE_MEMBER((ObRevokeUserArg, ObDDLArg), tenant_id_, user_id_, priv_set_, revoke_all_, role_ids_);
bool ObRevokeDBArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && OB_INVALID_ID != user_id_ && !db_.empty();
}
OB_SERIALIZE_MEMBER((ObRevokeDBArg, ObDDLArg), tenant_id_, user_id_, db_, priv_set_);
bool ObRevokeTableArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && OB_INVALID_ID != user_id_ && !db_.empty() && !table_.empty();
}
OB_SERIALIZE_MEMBER((ObRevokeTableArg, ObDDLArg), tenant_id_, user_id_, db_, table_, priv_set_, grant_, obj_id_,
obj_type_, grantor_id_, obj_priv_array_, revoke_all_ora_);
bool ObRevokeSysPrivArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && OB_INVALID_ID != grantee_id_;
}
OB_SERIALIZE_MEMBER((ObRevokeSysPrivArg, ObDDLArg), tenant_id_, grantee_id_, sys_priv_array_);
//----End of structs for managing privileges----
bool ObAdminSwitchReplicaRoleArg::is_valid() const
{
return partition_key_.is_valid() || server_.is_valid() || !zone_.is_empty();
}
OB_SERIALIZE_MEMBER(ObAdminSwitchReplicaRoleArg, role_, partition_key_, server_, zone_, tenant_name_);
bool ObAdminSwitchRSRoleArg::is_valid() const
{
return server_.is_valid() || !zone_.is_empty();
}
OB_SERIALIZE_MEMBER(ObAdminSwitchRSRoleArg, role_, server_, zone_);
OB_SERIALIZE_MEMBER(ObCheckGtsReplicaStopZone, zone_);
OB_SERIALIZE_MEMBER(ObCheckGtsReplicaStopServer, servers_);
bool ObAdminDropReplicaArg::is_valid() const
{
// zone can be empty
return partition_key_.is_valid() && server_.is_valid() && create_timestamp_ >= 0;
}
OB_SERIALIZE_MEMBER(ObAdminDropReplicaArg, partition_key_, server_, zone_, create_timestamp_, force_cmd_);
bool ObAdminMigrateReplicaArg::is_valid() const
{
return partition_key_.is_valid() && src_.is_valid() && dest_.is_valid() && src_ != dest_;
}
OB_SERIALIZE_MEMBER(ObAdminMigrateReplicaArg, is_copy_, partition_key_, src_, dest_, force_cmd_);
bool ObPhysicalRestoreTenantArg::is_valid() const
{
return !tenant_name_.empty() && tenant_name_.length() < common::OB_MAX_TENANT_NAME_LENGTH_STORE &&
!backup_tenant_name_.empty() && backup_tenant_name_.length() < common::OB_MAX_TENANT_NAME_LENGTH_STORE &&
(!uri_.empty() || !multi_uri_.empty()) && uri_.length() < share::OB_MAX_BACKUP_DEST_LENGTH &&
!restore_option_.empty() && restore_option_.length() < common::OB_INNER_TABLE_DEFAULT_VALUE_LENTH &&
restore_timestamp_ > 0;
}
OB_SERIALIZE_MEMBER((ObPhysicalRestoreTenantArg, ObCmdArg), tenant_name_, uri_, restore_option_, restore_timestamp_,
backup_tenant_name_, passwd_array_, table_items_, multi_uri_);
ObPhysicalRestoreTenantArg::ObPhysicalRestoreTenantArg()
: ObCmdArg(),
tenant_name_(),
uri_(),
restore_option_(),
restore_timestamp_(common::OB_INVALID_TIMESTAMP),
backup_tenant_name_(),
passwd_array_(),
table_items_(),
multi_uri_()
{}
int ObPhysicalRestoreTenantArg::assign(const ObPhysicalRestoreTenantArg& other)
{
int ret = OB_SUCCESS;
if (this == &other) {
// skip
} else if (OB_FAIL(table_items_.assign(other.table_items_))) {
LOG_WARN("fail to assign table_items", KR(ret));
} else {
tenant_name_ = other.tenant_name_;
uri_ = other.uri_;
restore_option_ = other.restore_option_;
restore_timestamp_ = other.restore_timestamp_;
backup_tenant_name_ = other.backup_tenant_name_;
passwd_array_ = other.passwd_array_;
}
return ret;
}
int ObPhysicalRestoreTenantArg::add_table_item(const ObTableItem& item)
{
return table_items_.push_back(item);
}
OB_SERIALIZE_MEMBER((ObRestoreTenantArg, ObCmdArg), tenant_name_, oss_uri_);
bool ObRestorePartitionsArg::is_valid() const
{
return (OB_CREATE_TABLE_MODE_PHYSICAL_RESTORE == mode_ || OB_CREATE_TABLE_MODE_RESTORE == mode_) && schema_id_ > 0;
}
OB_SERIALIZE_MEMBER(ObRestorePartitionsArg, schema_id_, mode_, partition_ids_, schema_version_);
OB_SERIALIZE_MEMBER(ObServerZoneArg, server_, zone_);
OB_SERIALIZE_MEMBER((ObRunJobArg, ObServerZoneArg), job_);
ObUpgradeJobArg::ObUpgradeJobArg() : action_(INVALID_ACTION), version_(common::OB_INVALID_VERSION)
{}
bool ObUpgradeJobArg::is_valid() const
{
return INVALID_ACTION != action_ && version_ > 0;
}
int ObUpgradeJobArg::assign(const ObUpgradeJobArg& other)
{
int ret = OB_SUCCESS;
action_ = other.action_;
version_ = other.version_;
return ret;
}
OB_SERIALIZE_MEMBER(ObUpgradeJobArg, action_, version_);
OB_SERIALIZE_MEMBER(ObAdminFlushCacheArg, tenant_ids_, cache_type_);
OB_SERIALIZE_MEMBER(ObFlushCacheArg, is_all_tenant_, tenant_id_, cache_type_);
OB_SERIALIZE_MEMBER(ObAdminLoadBaselineArg, tenant_ids_, sql_id_, plan_hash_value_, fixed_, enabled_);
OB_SERIALIZE_MEMBER(ObLoadBaselineArg, is_all_tenant_, tenant_id_, sql_id_, plan_hash_value_, fixed_, enabled_);
OB_SERIALIZE_MEMBER(ObGetAllSchemaArg, schema_version_, tenant_name_);
bool ObAdminMergeArg::is_valid() const
{
// empty zone means all zone
return type_ >= START_MERGE && type_ <= RESUME_MERGE;
}
OB_SERIALIZE_MEMBER(ObAdminMergeArg, type_, zone_);
OB_SERIALIZE_MEMBER(ObAdminClearRoottableArg, tenant_name_);
OB_SERIALIZE_MEMBER(
ObAdminSetConfigItem, name_, value_, comment_, zone_, server_, tenant_name_, exec_tenant_id_, tenant_ids_);
OB_SERIALIZE_MEMBER(ObAdminSetConfigArg, items_, is_inner_);
OB_SERIALIZE_MEMBER(ObAdminServerArg, servers_, zone_, force_stop_, op_);
OB_SERIALIZE_MEMBER(
ObAdminZoneArg, zone_, region_, idc_, alter_zone_options_, zone_type_, sql_stmt_str_, force_stop_, op_);
OB_SERIALIZE_MEMBER(ObAutoincSyncArg, tenant_id_, table_id_, column_id_, table_part_num_, auto_increment_, sync_value_);
OB_SERIALIZE_MEMBER(ObDropReplicaArg, partition_key_, member_);
OB_SERIALIZE_MEMBER(ObAdminChangeReplicaArg, partition_key_, member_, force_cmd_);
bool ObAdminChangeReplicaArg::is_valid() const
{
return partition_key_.is_valid();
}
bool ObUpdateIndexStatusArg::is_allow_when_disable_ddl() const
{
bool bret = false;
if (is_error_index_status(status_, false /* not dropped*/)) {
bret = true;
}
return bret;
}
bool ObUpdateIndexStatusArg::is_valid() const
{
return OB_INVALID_ID != index_table_id_ && status_ > INDEX_STATUS_NOT_FOUND && status_ < INDEX_STATUS_MAX;
}
OB_SERIALIZE_MEMBER((ObUpdateIndexStatusArg, ObDDLArg), index_table_id_, status_, create_mem_version_, convert_status_);
OB_SERIALIZE_MEMBER(ObMergeFinishArg, server_, frozen_version_);
bool ObMergeErrorArg::is_valid() const
{
return partition_key_.is_valid() && server_.is_valid() && error_code_ < OB_MAX_ERROR_CODE;
}
OB_SERIALIZE_MEMBER(ObMergeErrorArg, partition_key_, server_, error_code_);
OB_SERIALIZE_MEMBER(ObAdminRebuildReplicaArg, key_, server_);
OB_SERIALIZE_MEMBER(ObDebugSyncActionArg, reset_, clear_, action_);
OB_SERIALIZE_MEMBER(ObAdminMigrateUnitArg, unit_id_, is_cancel_, destination_);
OB_SERIALIZE_MEMBER(
ObRootMajorFreezeArg, try_frozen_version_, launch_new_round_, ignore_server_list_, svr_, tenant_id_, force_launch_);
OB_SERIALIZE_MEMBER(ObMinorFreezeArg, tenant_ids_, partition_key_);
OB_SERIALIZE_MEMBER(ObRootMinorFreezeArg, tenant_ids_, partition_key_, server_list_, zone_);
OB_SERIALIZE_MEMBER(ObSyncPartitionTableFinishArg, server_, version_);
OB_SERIALIZE_MEMBER(ObSyncPGPartitionMTFinishArg, server_, version_);
OB_SERIALIZE_MEMBER(ObCheckDanglingReplicaFinishArg, server_, version_, dangling_count_);
OB_SERIALIZE_MEMBER(
ObMemberListAndLeaderArg, member_list_, leader_, self_, lower_list_, replica_type_, property_, role_);
bool ObMemberListAndLeaderArg::is_valid() const
{
return member_list_.count() > 0 && self_.is_valid() && common::REPLICA_TYPE_MAX != replica_type_ &&
property_.is_valid() && (common::INVALID_ROLE <= role_ && role_ <= common::STANDBY_LEADER);
}
// If it is a leader, you need to ensure the consistency of role_, leader_/restore_leader_, and self_
bool ObMemberListAndLeaderArg::check_leader_is_valid() const
{
bool bret = true;
if (is_leader_by_election(role_)) {
bret = (leader_.is_valid() && self_ == leader_);
}
return bret;
}
void ObMemberListAndLeaderArg::reset()
{
member_list_.reset();
leader_.reset();
self_.reset();
lower_list_.reset();
replica_type_ = common::REPLICA_TYPE_MAX;
role_ = common::INVALID_ROLE;
}
int ObMemberListAndLeaderArg::assign(const ObMemberListAndLeaderArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(member_list_.assign(other.member_list_))) {
LOG_WARN("fail to assign member_list", KR(ret), K_(member_list));
} else if (OB_FAIL(lower_list_.assign(other.lower_list_))) {
LOG_WARN("fail to assign lower_list", KR(ret), K_(lower_list));
} else {
leader_ = other.leader_;
self_ = other.self_;
replica_type_ = other.replica_type_;
property_ = other.property_;
role_ = other.role_;
}
return ret;
}
OB_SERIALIZE_MEMBER(
ObGetMemberListAndLeaderResult, member_list_, leader_, self_, lower_list_, replica_type_, property_);
void ObGetMemberListAndLeaderResult::reset()
{
member_list_.reset();
leader_.reset();
self_.reset();
lower_list_.reset();
replica_type_ = common::REPLICA_TYPE_MAX;
}
int ObGetMemberListAndLeaderResult::assign(const ObGetMemberListAndLeaderResult& other)
{
int ret = OB_SUCCESS;
reset();
if (OB_UNLIKELY(!other.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), K(other));
} else if (OB_FAIL(member_list_.assign(other.member_list_))) {
LOG_WARN("failed to assign member list", K(ret));
} else if (OB_FAIL(lower_list_.assign(other.lower_list_))) {
LOG_WARN("fail to assign member list", K(ret));
} else {
leader_ = other.leader_;
self_ = other.self_;
replica_type_ = other.replica_type_;
property_ = other.property_;
}
return ret;
}
OB_SERIALIZE_MEMBER(ObBatchGetRoleArg, keys_);
void ObBatchGetRoleArg::reset()
{
keys_.reset();
}
bool ObBatchGetRoleArg::is_valid() const
{
return keys_.count() > 0;
}
OB_SERIALIZE_MEMBER(ObBatchGetRoleResult, results_);
void ObBatchGetRoleResult::reset()
{
results_.reset();
}
bool ObBatchGetRoleResult::is_valid() const
{
return results_.count() > 0;
}
bool ObCreateOutlineArg::is_valid() const
{
return OB_INVALID_ID != outline_info_.get_tenant_id() && !outline_info_.get_name_str().empty() &&
!(outline_info_.get_signature_str().empty() &&
!ObOutlineInfo::is_sql_id_valid(outline_info_.get_sql_id_str())) &&
(!outline_info_.get_outline_content_str().empty() || outline_info_.has_outline_params()) &&
!(outline_info_.get_sql_text_str().empty() && !ObOutlineInfo::is_sql_id_valid(outline_info_.get_sql_id_str()));
}
OB_SERIALIZE_MEMBER((ObCreateOutlineArg, ObDDLArg), or_replace_, outline_info_, db_name_);
OB_SERIALIZE_MEMBER((ObCreateUserDefinedFunctionArg, ObDDLArg), udf_);
OB_SERIALIZE_MEMBER((ObDropUserDefinedFunctionArg, ObDDLArg), tenant_id_, name_, if_exist_);
OB_SERIALIZE_MEMBER((ObAlterOutlineArg, ObDDLArg), alter_outline_info_, db_name_);
bool ObDropOutlineArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !db_name_.empty() && !outline_name_.empty();
}
OB_SERIALIZE_MEMBER((ObDropOutlineArg, ObDDLArg), tenant_id_, db_name_, outline_name_);
bool ObCreateDbLinkArg::is_valid() const
{
return OB_INVALID_ID != dblink_info_.get_tenant_id() && OB_INVALID_ID != dblink_info_.get_owner_id() &&
OB_INVALID_ID != dblink_info_.get_dblink_id() &&
!dblink_info_.get_dblink_name().empty()
// && !dblink_info_.get_cluster_name().empty()
&& !dblink_info_.get_tenant_name().empty() && !dblink_info_.get_user_name().empty() &&
!dblink_info_.get_password().empty() && dblink_info_.get_host_ip() > 0 && dblink_info_.get_host_port() > 0;
}
OB_SERIALIZE_MEMBER((ObCreateDbLinkArg, ObDDLArg), dblink_info_);
bool ObDropDbLinkArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !dblink_name_.empty();
}
OB_SERIALIZE_MEMBER((ObDropDbLinkArg, ObDDLArg), tenant_id_, dblink_name_);
OB_SERIALIZE_MEMBER(ObSwitchLeaderListArg, partition_key_list_, leader_addr_);
OB_SERIALIZE_MEMBER(ObGetPartitionCountResult, partition_count_);
OB_SERIALIZE_MEMBER(ObFetchAliveServerArg, cluster_id_);
OB_SERIALIZE_MEMBER(ObFetchAliveServerResult, active_server_list_, inactive_server_list_);
OB_SERIALIZE_MEMBER(ObAdminSetTPArg, event_no_, event_name_, occur_, trigger_freq_, error_code_, server_, zone_);
OB_SERIALIZE_MEMBER(ObCancelTaskArg, task_id_);
OB_SERIALIZE_MEMBER(ObReportSingleReplicaArg, partition_key_);
OB_SERIALIZE_MEMBER(ObSetDiskValidArg);
OB_SERIALIZE_MEMBER((ObCreateSynonymArg, ObDDLArg), or_replace_, synonym_info_, db_name_, obj_db_name_);
OB_SERIALIZE_MEMBER((ObDropSynonymArg, ObDDLArg), tenant_id_, is_force_, db_name_, synonym_name_);
OB_SERIALIZE_MEMBER((ObCreatePlanBaselineArg, ObDDLArg), plan_baseline_info_, is_replace_);
OB_SERIALIZE_MEMBER((ObAlterPlanBaselineArg, ObDDLArg), plan_baseline_info_, field_update_bitmap_);
OB_SERIALIZE_MEMBER((ObDropPlanBaselineArg, ObDDLArg), tenant_id_, sql_id_, plan_hash_value_);
bool ObDropSynonymArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && !db_name_.empty() && !synonym_name_.empty();
}
bool ObDropPlanBaselineArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_;
}
OB_SERIALIZE_MEMBER(ObAdminClearBalanceTaskArg, tenant_ids_, type_, zone_names_);
OB_SERIALIZE_MEMBER(ObMCLogInfo, log_id_, timestamp_);
OB_SERIALIZE_MEMBER(ObChangeMemberArg, partition_key_, member_, quorum_);
OB_SERIALIZE_MEMBER(ObChangeMemberCtx, partition_key_, ret_value_, log_info_);
OB_SERIALIZE_MEMBER(ObChangeMemberCtxsWrapper, result_code_, ctxs_);
OB_SERIALIZE_MEMBER(ObMemberMajorSSTableCheckArg, pkey_, table_ids_);
DEF_TO_STRING(ObForceSwitchILogFileArg)
{
int64_t pos = 0;
J_KV(K(force_));
return pos;
}
OB_SERIALIZE_MEMBER(ObForceSwitchILogFileArg, force_);
DEF_TO_STRING(ObForceSetAllAsSingleReplicaArg)
{
int64_t pos = 0;
J_KV(K(force_));
return pos;
}
OB_SERIALIZE_MEMBER(ObForceSetAllAsSingleReplicaArg, force_);
DEF_TO_STRING(ObForceSetServerListArg)
{
int64_t pos = 0;
J_KV(K(server_list_), K(replica_num_));
return pos;
}
OB_SERIALIZE_MEMBER(ObForceSetServerListArg, server_list_, replica_num_);
bool ObForceCreateSysTableArg::is_valid() const
{
return OB_INVALID_TENANT_ID != tenant_id_ && OB_INVALID_ID != last_replay_log_id_ &&
share::is_tenant_table(table_id_);
}
DEF_TO_STRING(ObForceCreateSysTableArg)
{
int64_t pos = 0;
J_KV(K(tenant_id_), K(table_id_), K(last_replay_log_id_));
return pos;
}
OB_SERIALIZE_MEMBER(ObForceCreateSysTableArg, tenant_id_, table_id_, last_replay_log_id_);
bool ObForceSetLocalityArg::is_valid() const
{
return OB_INVALID_TENANT_ID != exec_tenant_id_ && locality_.length() > 0;
}
int ObForceSetLocalityArg::assign(const ObForceSetLocalityArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
locality_ = other.locality_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObForceSetLocalityArg, ObDDLArg), locality_);
DEF_TO_STRING(ObRootSplitPartitionArg)
{
int64_t pos = 0;
J_KV(K(table_id_));
return pos;
}
int ObRootSplitPartitionArg::assign(const ObRootSplitPartitionArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
table_id_ = other.table_id_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObRootSplitPartitionArg, ObDDLArg), table_id_);
OB_SERIALIZE_MEMBER(ObSplitPartitionArg, split_info_);
OB_SERIALIZE_MEMBER(ObSplitPartitionResult, results_);
OB_SERIALIZE_MEMBER(ObQueryMaxDecidedTransVersionRequest, partition_array_, last_max_decided_trans_version_);
OB_SERIALIZE_MEMBER(ObQueryMaxDecidedTransVersionResponse, ret_value_, trans_version_, pkey_);
OB_SERIALIZE_MEMBER(ObQueryIsValidMemberRequest, self_addr_, partition_array_);
OB_SERIALIZE_MEMBER(ObQueryIsValidMemberResponse, ret_value_, partition_array_, candidates_status_, ret_array_);
OB_SERIALIZE_MEMBER(ObQueryMaxFlushedILogIdRequest, partition_array_);
OB_SERIALIZE_MEMBER(ObQueryMaxFlushedILogIdResponse, err_code_, partition_array_, max_flushed_ilog_ids_);
DEF_TO_STRING(ObUpdateStatCacheArg)
{
int64_t pos = 0;
J_KV(K_(table_id), K_(tenant_id), K_(partition_ids), K_(column_ids));
return pos;
}
OB_SERIALIZE_MEMBER(ObUpdateStatCacheArg, tenant_id_, table_id_, partition_ids_, column_ids_);
OB_SERIALIZE_MEMBER(ObSplitPartitionBatchArg, split_info_);
OB_SERIALIZE_MEMBER(ObSplitPartitionBatchRes, ret_list_);
OB_SERIALIZE_MEMBER((ObSequenceDDLArg, ObDDLArg), stmt_type_, option_bitset_, seq_schema_, database_name_);
OB_SERIALIZE_MEMBER(ObBootstrapArg, server_list_, cluster_type_, initial_frozen_version_, initial_schema_version_,
primary_cluster_id_, primary_rs_list_, freeze_schemas_, frozen_status_);
int ObBootstrapArg::assign(const ObBootstrapArg& arg)
{
int ret = OB_SUCCESS;
if (OB_FAIL(server_list_.assign(arg.server_list_))) {
LOG_WARN("fail to assign", KR(ret), K(arg));
} else if (OB_FAIL(primary_rs_list_.assign(arg.primary_rs_list_))) {
LOG_WARN("fail to assign", KR(ret), K(arg));
} else if (OB_FAIL(freeze_schemas_.assign(arg.freeze_schemas_))) {
LOG_WARN("failed to assign freeze schemas", KR(ret), K(arg));
} else if (OB_FAIL(frozen_status_.assign(arg.frozen_status_))) {
LOG_WARN("failed to assign frozen status", KR(ret), K(arg));
} else {
cluster_type_ = arg.cluster_type_;
primary_cluster_id_ = arg.primary_cluster_id_;
initial_frozen_version_ = arg.initial_frozen_version_;
initial_schema_version_ = arg.initial_schema_version_;
}
return ret;
}
bool ObSplitPartitionBatchArg::is_valid() const
{
return split_info_.is_valid();
}
int ObSplitPartitionBatchArg::assign(const ObSplitPartitionBatchArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(split_info_, other.split_info_))) {
SHARE_LOG(WARN, "failed to assign args_", K(ret));
}
return ret;
}
int ObSplitPartitionBatchRes::assign(const ObSplitPartitionBatchRes& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(ret_list_, other.ret_list_))) {
SHARE_LOG(WARN, "failed to assign ret_list_", K(ret));
}
return ret;
}
DEF_TO_STRING(ObSplitPartitionBatchRes)
{
int64_t pos = 0;
J_KV(K_(ret_list));
return pos;
}
DEF_TO_STRING(ObSplitPartitionBatchArg)
{
int64_t pos = 0;
J_KV(K_(split_info));
return pos;
}
bool ObBatchStartElectionArg::is_valid() const
{
return pkeys_.count() > 0 && member_list_.is_valid() && switch_type_ != INVALID_TYPE;
}
int ObBatchStartElectionArg::add_partition_key(const ObPartitionKey& pkey)
{
int ret = OB_SUCCESS;
if (!pkey.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret));
} else if (pkeys_.count() >= MAX_COUNT) {
ret = OB_SIZE_OVERFLOW;
LOG_WARN("fail to add partition key", K(ret), "count", pkeys_.count());
} else if (OB_FAIL(pkeys_.push_back(pkey))) {
LOG_WARN("fail to push back", K(ret), K(pkey));
}
return ret;
}
void ObBatchStartElectionArg::reset()
{
member_list_.reset();
pkeys_.reset();
lease_start_time_ = 0;
switch_timestamp_ = 0;
switch_type_ = INVALID_TYPE;
trace_id_.reset();
}
int ObBatchStartElectionArg::assign(const ObBatchStartElectionArg& other)
{
int ret = OB_SUCCESS;
if (!other.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", KR(ret));
} else if (OB_FAIL(member_list_.deep_copy(other.member_list_))) {
LOG_WARN("fail to assign server list", KR(ret));
} else if (OB_FAIL(pkeys_.assign(other.pkeys_))) {
LOG_WARN("fail to assign", KR(ret));
} else {
lease_start_time_ = other.lease_start_time_;
leader_ = other.leader_;
switch_timestamp_ = other.switch_timestamp_;
switch_type_ = other.switch_type_;
quorum_ = other.quorum_;
trace_id_ = other.trace_id_;
}
return ret;
}
int ObAlterClusterInfoArg::assign(ObAlterClusterInfoArg& arg)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(arg))) {
LOG_WARN("fail to assign ddl arg", KR(ret), K(arg));
} else {
op_type_ = arg.op_type_;
mode_ = arg.mode_;
level_ = arg.level_;
is_force_ = arg.is_force_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObAlterClusterInfoArg, ObDDLArg), op_type_, mode_, is_force_, level_);
OB_SERIALIZE_MEMBER(ObAdminClusterArg, cluster_name_, cluster_id_, alter_type_, is_force_, ddl_stmt_str_,
rootservice_list_, redo_transport_options_);
OB_SERIALIZE_MEMBER(ObGetWRSArg, tenant_id_, scope_, need_filter_);
OB_SERIALIZE_MEMBER(ObGetWRSResult, self_addr_, err_code_, replica_wrs_info_list_);
OB_SERIALIZE_MEMBER(ObBatchStartElectionArg, lease_start_time_, pkeys_, member_list_, leader_, switch_timestamp_,
switch_type_, quorum_, trace_id_);
OB_SERIALIZE_MEMBER(ObClusterActionVerifyArg, verify_type_);
bool ObGetWRSArg::is_valid() const
{
return (OB_INVALID_ID != tenant_id_ && INVALID_RANGE != scope_);
}
int64_t ObEstPartArgElement::get_serialize_size(void) const
{
int64_t len = 0;
OB_UNIS_ADD_LEN(scan_flag_);
OB_UNIS_ADD_LEN(index_id_);
OB_UNIS_ADD_LEN(range_columns_count_);
OB_UNIS_ADD_LEN(batch_);
return len;
}
int ObEstPartArgElement::serialize(char* buf, const int64_t buf_len, int64_t& pos) const
{
int ret = OB_SUCCESS;
OB_UNIS_ENCODE(scan_flag_);
OB_UNIS_ENCODE(index_id_);
OB_UNIS_ENCODE(range_columns_count_);
OB_UNIS_ENCODE(batch_);
return ret;
}
int ObEstPartArgElement::deserialize(
common::ObIAllocator& allocator, const char* buf, const int64_t data_len, int64_t& pos)
{
int ret = OB_SUCCESS;
OB_UNIS_DECODE(scan_flag_);
OB_UNIS_DECODE(index_id_);
OB_UNIS_DECODE(range_columns_count_);
if (OB_SUCC(ret)) {
if (OB_FAIL(batch_.deserialize(allocator, buf, data_len, pos))) {
LOG_WARN("fail to deserialize batch", K(ret), K(data_len), K(pos));
}
}
return ret;
}
OB_DEF_SERIALIZE_SIZE(ObEstPartArg)
{
int64_t len = 0;
OB_UNIS_ADD_LEN(pkey_);
OB_UNIS_ADD_LEN(schema_version_);
OB_UNIS_ADD_LEN(column_ids_);
OB_UNIS_ADD_LEN(partition_keys_);
OB_UNIS_ADD_LEN(scan_param_);
OB_UNIS_ADD_LEN(index_params_);
OB_UNIS_ADD_LEN(index_pkeys_);
return len;
}
OB_DEF_SERIALIZE(ObEstPartArg)
{
int ret = OB_SUCCESS;
OB_UNIS_ENCODE(pkey_);
OB_UNIS_ENCODE(schema_version_);
OB_UNIS_ENCODE(column_ids_);
OB_UNIS_ENCODE(partition_keys_);
OB_UNIS_ENCODE(scan_param_);
OB_UNIS_ENCODE(index_params_);
OB_UNIS_ENCODE(index_pkeys_);
return ret;
}
OB_DEF_DESERIALIZE(ObEstPartArg)
{
int ret = OB_SUCCESS;
OB_UNIS_DECODE(pkey_);
OB_UNIS_DECODE(schema_version_);
OB_UNIS_DECODE(column_ids_);
OB_UNIS_DECODE(partition_keys_);
if (OB_SUCC(ret)) {
if (OB_FAIL(scan_param_.deserialize(allocator_, buf, data_len, pos))) {
SQL_OPT_LOG(WARN, "fail to deserialize scan param", K(ret));
}
}
int64_t N = 0;
OB_UNIS_DECODE(N);
for (int64_t i = 0; OB_SUCC(ret) && i < N; i++) {
ObEstPartArgElement arg;
if (OB_FAIL(arg.deserialize(allocator_, buf, data_len, pos))) {
SQL_OPT_LOG(WARN, "fail to deserialize index param", K(ret));
} else if (OB_FAIL(index_params_.push_back(arg))) {
SQL_OPT_LOG(WARN, "failed to push back arg element", K(ret));
}
}
OB_UNIS_DECODE(index_pkeys_);
return ret;
}
OB_SERIALIZE_MEMBER(ObEstPartResElement, logical_row_count_, physical_row_count_, reliable_, est_records_);
OB_SERIALIZE_MEMBER(ObEstPartRes, part_rowcount_size_res_, index_param_res_);
OB_SERIALIZE_MEMBER(ObEstPartRowCountSizeRes, row_count_, part_size_, avg_row_size_, reliable_);
OB_SERIALIZE_MEMBER(
TenantServerUnitConfig, tenant_id_, compat_mode_, unit_config_, replica_type_, is_delete_, if_not_grant_);
OB_SERIALIZE_MEMBER((ObDDLNopOpreatorArg, ObDDLArg), schema_operation_);
OB_SERIALIZE_MEMBER(ObTenantSchemaVersions, tenant_schema_versions_);
OB_SERIALIZE_MEMBER(
TenantIdAndStats, tenant_id_, refreshed_schema_version_, ddl_lag_, min_sys_table_scn_, min_user_table_scn_);
OB_SERIALIZE_MEMBER(ObClusterTenantStats, tenant_stats_array_);
bool TenantServerUnitConfig::is_valid() const
{
return common::OB_INVALID_ID != tenant_id_ &&
((share::ObWorker::CompatMode::INVALID != compat_mode_ && unit_config_.is_valid() &&
replica_type_ != common::ObReplicaType::REPLICA_TYPE_MAX) ||
(is_delete_));
}
int TenantServerUnitConfig::init(const uint64_t tenant_id, const share::ObWorker::CompatMode compat_mode,
const share::ObUnitConfig& unit_config, const common::ObReplicaType replica_type, const bool if_not_grant,
const bool is_delete)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(OB_INVALID_ID == tenant_id)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid tenant_id", K(ret), K(tenant_id));
// do not check others validation, since their validations vary
} else {
tenant_id_ = tenant_id;
compat_mode_ = compat_mode;
unit_config_ = unit_config;
replica_type_ = replica_type;
if_not_grant_ = if_not_grant;
is_delete_ = is_delete;
}
return ret;
}
int ObTenantSchemaVersions::add(const int64_t tenant_id, const int64_t schema_version)
{
int ret = OB_SUCCESS;
if (OB_INVALID_TENANT_ID == tenant_id) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", KR(ret), K(tenant_id), K(schema_version));
} else {
TenantIdAndSchemaVersion info;
info.tenant_id_ = tenant_id;
info.schema_version_ = schema_version;
if (OB_FAIL(tenant_schema_versions_.push_back(info))) {
LOG_WARN("fail to push back", KR(ret));
}
}
return ret;
}
int ObStandbyHeartBeatRes::set_primary_addr(const share::ObClusterAddr& primary_addr)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(!primary_addr.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("primary cluster addr is invalid", KR(ret), K(primary_addr));
} else if (OB_FAIL(primary_addr_.assign(primary_addr))) {
LOG_WARN("failed to assign primary cluster addr", KR(ret), K(primary_addr));
}
return ret;
}
int ObStandbyHeartBeatRes::set_standby_addr(const share::ObClusterAddr& standby_addr)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(!standby_addr.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("standby cluster addr is invalid", KR(ret), K(standby_addr));
} else if (OB_FAIL(standby_addr_.assign(standby_addr))) {
LOG_WARN("failed to assign standby cluster addr", KR(ret), K(standby_addr));
}
return ret;
}
OB_SERIALIZE_MEMBER((ObGetSchemaArg, ObDDLArg), reserve_, ignore_fail_);
bool ObFinishSchemaSplitArg::is_valid() const
{
return OB_INVALID_TENANT_ID != tenant_id_ && OB_INVALID_ID != tenant_id_ &&
(rootserver::ObRsJobType::JOB_TYPE_SCHEMA_SPLIT == type_ ||
rootserver::ObRsJobType::JOB_TYPE_SCHEMA_SPLIT_V2 == type_);
}
int ObFinishSchemaSplitArg::assign(const ObFinishSchemaSplitArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
tenant_id_ = other.tenant_id_;
type_ = other.type_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObFinishSchemaSplitArg, ObDDLArg), tenant_id_, type_);
OB_SERIALIZE_MEMBER(ObBroadcastSchemaArg, tenant_id_, schema_version_);
void ObBroadcastSchemaArg::reset()
{
tenant_id_ = OB_INVALID_TENANT_ID;
schema_version_ = OB_INVALID_VERSION;
}
OB_SERIALIZE_MEMBER(ObCheckMergeFinishArg, frozen_version_);
bool ObCheckMergeFinishArg::is_valid() const
{
return frozen_version_ > 0;
}
OB_SERIALIZE_MEMBER(ObGetRecycleSchemaVersionsArg, tenant_ids_);
bool ObGetRecycleSchemaVersionsArg::is_valid() const
{
return tenant_ids_.count() > 0;
}
void ObGetRecycleSchemaVersionsArg::reset()
{
tenant_ids_.reset();
}
int ObGetRecycleSchemaVersionsArg::assign(const ObGetRecycleSchemaVersionsArg& other)
{
int ret = OB_SUCCESS;
if (this != &other) {
if (OB_FAIL(tenant_ids_.assign(other.tenant_ids_))) {
LOG_WARN("fail to assign tenant_ids", KR(ret), K(other));
}
}
return ret;
}
OB_SERIALIZE_MEMBER(ObGetRecycleSchemaVersionsResult, recycle_schema_versions_);
bool ObGetRecycleSchemaVersionsResult::is_valid() const
{
return recycle_schema_versions_.count() > 0;
}
void ObGetRecycleSchemaVersionsResult::reset()
{
recycle_schema_versions_.reset();
}
int ObGetRecycleSchemaVersionsResult::assign(const ObGetRecycleSchemaVersionsResult& other)
{
int ret = OB_SUCCESS;
if (this != &other) {
if (OB_FAIL(recycle_schema_versions_.assign(other.recycle_schema_versions_))) {
LOG_WARN("fail to assign recycle_schema_versions", KR(ret), K(other));
}
}
return ret;
}
OB_SERIALIZE_MEMBER(ObGetClusterInfoArg, need_check_sync_, max_primary_schema_version_, primary_schema_versions_,
cluster_version_, standby_became_primary_scn_);
bool ObGetClusterInfoArg::is_valid() const
{
bool bret = true;
if (need_check_sync_ && OB_INVALID_VERSION == max_primary_schema_version_ &&
0 < primary_schema_versions_.tenant_schema_versions_.count() && OB_INVALID_ID != cluster_version_) {
bret = false;
}
return bret;
}
void ObGetClusterInfoArg::reset()
{
need_check_sync_ = false;
max_primary_schema_version_ = OB_INVALID_VERSION;
primary_schema_versions_.reset();
cluster_version_ = OB_INVALID_ID;
standby_became_primary_scn_ = OB_INVALID_VERSION;
}
OB_SERIALIZE_MEMBER(ObCheckAddStandbyArg, cluster_version_);
OB_SERIALIZE_MEMBER(ObHaGtsPingRequest, gts_id_, req_id_, epoch_id_, request_ts_);
OB_SERIALIZE_MEMBER(ObHaGtsPingResponse, gts_id_, req_id_, epoch_id_, response_ts_);
OB_SERIALIZE_MEMBER(ObHaGtsGetRequest, gts_id_, self_addr_, tenant_id_, srr_.mts_);
OB_SERIALIZE_MEMBER(ObHaGtsGetResponse, gts_id_, tenant_id_, srr_.mts_, gts_);
OB_SERIALIZE_MEMBER(ObHaGtsHeartbeat, gts_id_, addr_);
OB_SERIALIZE_MEMBER(ObHaGtsUpdateMetaRequest, gts_id_, epoch_id_, member_list_, local_ts_);
OB_SERIALIZE_MEMBER(ObHaGtsUpdateMetaResponse, local_ts_);
OB_SERIALIZE_MEMBER(ObHaGtsChangeMemberRequest, gts_id_, offline_replica_);
OB_SERIALIZE_MEMBER(ObHaGtsChangeMemberResponse, ret_value_);
OB_SERIALIZE_MEMBER(ObAdminAddDiskArg, diskgroup_name_, disk_path_, alias_name_, server_, zone_);
OB_SERIALIZE_MEMBER(ObAdminDropDiskArg, diskgroup_name_, alias_name_, server_, zone_);
OB_SERIALIZE_MEMBER(ObSchemaSnapshotRes, schema_version_, frozen_version_, table_schemas_, tenant_schemas_, user_infos_,
db_privs_, table_privs_, freeze_schemas_, tenant_flashback_scn_, failover_timestamp_, frozen_status_,
sys_schema_changed_, cluster_name_);
OB_SERIALIZE_MEMBER(ObSchemaSnapshotArg, schema_version_, frozen_version_);
bool ObSchemaSnapshotRes::is_valid() const
{
return schema_version_ >= 0 && frozen_version_ >= 0;
}
ObSchemaSnapshotRes::ObSchemaSnapshotRes()
: schema_version_(0),
frozen_version_(0),
table_schemas_(),
tenant_schemas_(),
user_infos_(),
db_privs_(),
table_privs_(),
freeze_schemas_(),
failover_timestamp_(OB_INVALID_VERSION),
tenant_flashback_scn_(),
frozen_status_(),
sys_schema_changed_(false),
cluster_name_()
{}
int ObSchemaSnapshotRes::assign(const ObSchemaSnapshotRes& res)
{
int ret = OB_SUCCESS;
if (!res.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("res is invalid", KR(ret), K(res));
} else if (OB_FAIL(table_schemas_.assign(res.table_schemas_))) {
LOG_WARN("failed to assign table schema", KR(ret), K(res));
} else if (OB_FAIL(tenant_schemas_.assign(res.tenant_schemas_))) {
LOG_WARN("failed to assign tenant schemas", KR(ret), K(res));
} else if (OB_FAIL(user_infos_.assign(res.user_infos_))) {
LOG_WARN("failed to assign user info", KR(ret), K(res));
} else if (OB_FAIL(db_privs_.assign(res.db_privs_))) {
LOG_WARN("failed to assign db privs", KR(ret), K(res));
} else if (OB_FAIL(table_privs_.assign(res.table_privs_))) {
LOG_WARN("failed to assign table privs", KR(ret), K(res));
} else if (OB_FAIL(freeze_schemas_.assign(res.freeze_schemas_))) {
LOG_WARN("failed to assign freeze schemas", KR(ret), K(res));
} else if (OB_FAIL(tenant_flashback_scn_.assign(res.tenant_flashback_scn_))) {
LOG_WARN("failed to assign tenant flashback scn", KR(ret), K(res));
} else if (OB_FAIL(frozen_status_.assign(res.frozen_status_))) {
LOG_WARN("failed to assign frozen status", KR(ret), K(res));
} else if (OB_FAIL(cluster_name_.assign(res.cluster_name_))) {
LOG_WARN("failed to assign clulster name", KR(ret), K(res));
} else {
schema_version_ = res.schema_version_;
frozen_version_ = res.frozen_version_;
failover_timestamp_ = res.failover_timestamp_;
sys_schema_changed_ = res.sys_schema_changed_;
}
return ret;
}
void ObSchemaSnapshotRes::reset()
{
schema_version_ = 0;
frozen_version_ = 0;
table_schemas_.reset();
tenant_schemas_.reset();
user_infos_.reset();
db_privs_.reset();
table_privs_.reset();
freeze_schemas_.reset();
tenant_flashback_scn_.reset();
failover_timestamp_ = OB_INVALID_VERSION;
frozen_status_.reset();
sys_schema_changed_ = false;
cluster_name_.reset();
}
void ObAlterTableResArg::reset()
{
schema_type_ = OB_MAX_SCHEMA;
schema_id_ = OB_INVALID_ID;
schema_version_ = OB_INVALID_VERSION;
}
void ObAlterTableRes::reset()
{
index_table_id_ = OB_INVALID_ID;
constriant_id_ = OB_INVALID_ID;
schema_version_ = OB_INVALID_VERSION;
res_arg_array_.reset();
}
void ObRegistClusterRes::reset()
{
cluster_idx_ = OB_INVALID_INDEX;
login_name_.reset();
login_passwd_.reset();
primary_cluster_.reset();
}
int ObRegistClusterRes::set_primary_cluster(const share::ObClusterAddr& cluster_addr)
{
int ret = OB_SUCCESS;
primary_cluster_.reset();
if (!cluster_addr.is_valid() || OB_INVALID_INDEX == cluster_addr.cluster_idx_) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("cluster_addr is invalid", K(ret), K(cluster_addr));
} else if (OB_FAIL(primary_cluster_.assign(cluster_addr))) {
LOG_WARN("failed to assign cluster addr", K(ret), K(cluster_addr));
}
return ret;
}
bool ObClusterInfoArg::is_valid() const
{
return cluster_info_.is_valid();
}
OB_SERIALIZE_MEMBER(ObAlterTableResArg, schema_type_, schema_id_, schema_version_);
OB_SERIALIZE_MEMBER(ObAlterTableRes, index_table_id_, constriant_id_, schema_version_, res_arg_array_);
int ObClusterInfoArg::assign(const ObClusterInfoArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(cluster_info_.assign(other.cluster_info_))) {
LOG_WARN("failed to assign cluster info", KR(ret), K(other));
} else if (OB_FAIL(sync_cluster_ids_.assign(other.sync_cluster_ids_))) {
LOG_WARN("failed to assign cluster ids", KR(ret), K(other), "this", *this);
} else if (OB_FAIL(redo_options_.assign(other.redo_options_))) {
LOG_WARN("failed to assign redo options", KR(ret), K(other));
} else {
server_status_ = other.server_status_;
}
return ret;
}
OB_SERIALIZE_MEMBER(ObClusterInfoArg, cluster_info_, server_status_, sync_cluster_ids_, redo_options_);
OB_SERIALIZE_MEMBER(ObRegistClusterArg, cluster_name_, cluster_id_, pre_regist_, cluster_addr_);
OB_SERIALIZE_MEMBER(ObRegistClusterRes, cluster_idx_, login_name_, login_passwd_, primary_cluster_);
OB_SERIALIZE_MEMBER(ObBatchFlashbackArg, switchover_timestamp_, flashback_to_ts_, leader_, pkeys_, flashback_from_ts_,
frozen_timestamp_, is_logical_flashback_, query_end_time_, schema_version_);
void ObBatchFlashbackArg::reset()
{
switchover_timestamp_ = 0;
flashback_to_ts_ = 0;
leader_.reset();
pkeys_.reset();
flashback_from_ts_ = 0;
frozen_timestamp_ = 0;
is_logical_flashback_ = false;
query_end_time_ = 0;
schema_version_ = OB_INVALID_VERSION;
}
int ObBatchFlashbackArg::add_pkey(const ObPartitionKey& pkey)
{
int ret = OB_SUCCESS;
if (!pkey.is_valid()) {
ret = OB_INVALID_ARGUMENT;
SHARE_LOG(WARN, "invalid argument", KR(ret), K(pkey));
} else if (OB_FAIL(pkeys_.push_back(pkey))) {
SHARE_LOG(WARN, "fail to push back", KR(ret), K(pkey));
}
return ret;
}
bool ObBatchFlashbackArg::is_valid() const
{
return ((is_logical_flashback_ && flashback_from_ts_ == 0) // failover use
|| (!is_logical_flashback_ && flashback_from_ts_ > 0)) // flashback table use
&& flashback_to_ts_ > 0 && leader_.is_valid() && pkeys_.count() > 0 && frozen_timestamp_ >= 0 &&
query_end_time_ > 0;
}
OB_SERIALIZE_MEMBER(
ObStandbyHeartBeatRes, primary_addr_, standby_addr_, primary_schema_info_, protection_mode_, tenant_schema_vers_);
OB_SERIALIZE_MEMBER(ObGetSwitchoverStatusRes, switchover_status_, switchover_info_);
OB_SERIALIZE_MEMBER(ObGetTenantSchemaVersionArg, tenant_id_);
OB_SERIALIZE_MEMBER(ObGetTenantSchemaVersionResult, schema_version_);
OB_SERIALIZE_MEMBER((ObFinishReplayArg, ObDDLArg), schema_version_);
OB_SERIALIZE_MEMBER(ObTenantMemoryArg, tenant_id_, memory_size_, refresh_interval_);
OB_SERIALIZE_MEMBER(
ObCheckStandbyCanAccessArg, failover_epoch_, last_merged_version_, cluster_status_, tenant_flashback_scn_);
OB_SERIALIZE_MEMBER(ObCheckServerEmptyArg, mode_);
OB_SERIALIZE_MEMBER(ObCheckDeploymentModeArg, single_zone_deployment_on_);
bool ObForceDropSchemaArg::is_valid() const
{
return OB_INVALID_TENANT_ID != exec_tenant_id_ && OB_INVALID_ID != exec_tenant_id_ && recycle_schema_version_ >= 0 &&
OB_INVALID_ID != schema_id_ && share::schema::OB_MAX_SCHEMA != type_;
}
int ObForceDropSchemaArg::assign(const ObForceDropSchemaArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else if (OB_FAIL(partition_ids_.assign(other.partition_ids_))) {
LOG_WARN("fail to assign partition_ids", K(ret));
} else if (OB_FAIL(subpartition_ids_.assign(other.subpartition_ids_))) {
LOG_WARN("fail to assign subpartition_ids", K(ret));
} else {
recycle_schema_version_ = other.recycle_schema_version_;
schema_id_ = other.schema_id_;
type_ = other.type_;
}
return ret;
}
OB_SERIALIZE_MEMBER(
(ObForceDropSchemaArg, ObDDLArg), recycle_schema_version_, schema_id_, partition_ids_, type_, subpartition_ids_);
OB_SERIALIZE_MEMBER(ObArchiveLogArg, enable_);
OB_SERIALIZE_MEMBER(ObBackupDatabaseArg, tenant_id_, is_incremental_, encryption_mode_, passwd_);
ObBackupDatabaseArg::ObBackupDatabaseArg()
: tenant_id_(0), is_incremental_(true), encryption_mode_(share::ObBackupEncryptionMode::NONE), passwd_()
{}
bool ObBackupDatabaseArg::is_valid() const
{
return share::ObBackupEncryptionMode::is_valid(encryption_mode_);
}
OB_SERIALIZE_MEMBER(ObPGBackupArchiveLogArg, archive_round_, pg_key_);
ObPGBackupArchiveLogArg::ObPGBackupArchiveLogArg() : archive_round_(-1), pg_key_()
{}
bool ObPGBackupArchiveLogArg::is_valid() const
{
return archive_round_ > 0 && pg_key_.is_valid();
}
int ObPGBackupArchiveLogArg::assign(const ObPGBackupArchiveLogArg& arg)
{
int ret = OB_SUCCESS;
archive_round_ = arg.archive_round_;
pg_key_ = arg.pg_key_;
return ret;
}
OB_SERIALIZE_MEMBER(ObPGBackupArchiveLogRes, result_, finished_, pg_key_, checkpoint_ts_);
ObPGBackupArchiveLogRes::ObPGBackupArchiveLogRes() : result_(0), finished_(false), checkpoint_ts_(), pg_key_()
{}
bool ObPGBackupArchiveLogRes::is_valid() const
{
return pg_key_.is_valid();
}
int ObPGBackupArchiveLogRes::assign(const ObPGBackupArchiveLogRes& arg)
{
int ret = OB_SUCCESS;
result_ = arg.result_;
finished_ = arg.finished_;
pg_key_ = arg.pg_key_;
checkpoint_ts_ = arg.checkpoint_ts_;
return ret;
}
OB_SERIALIZE_MEMBER(ObBackupArchiveLogBatchArg, tenant_id_, archive_round_, piece_id_, create_date_, job_id_,
checkpoint_ts_, task_id_, src_root_path_, src_storage_info_, dst_root_path_, dst_storage_info_, arg_array_);
ObBackupArchiveLogBatchArg::ObBackupArchiveLogBatchArg()
: tenant_id_(OB_INVALID_ID),
archive_round_(-1),
piece_id_(-1),
create_date_(-1),
job_id_(-1),
checkpoint_ts_(-1),
task_id_(),
src_root_path_(),
src_storage_info_(),
dst_root_path_(),
dst_storage_info_(),
arg_array_()
{}
bool ObBackupArchiveLogBatchArg::is_valid() const
{
bool bret = true;
for (int64_t i = 0; bret && i < arg_array_.count(); ++i) {
const ObPGBackupArchiveLogArg& arg = arg_array_.at(i);
if (!arg.is_valid()) {
bret = false;
}
}
return bret;
}
int ObBackupArchiveLogBatchArg::assign(const ObBackupArchiveLogBatchArg& arg)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(arg_array_, arg.arg_array_))) {
SHARE_LOG(WARN, "failed to assign arg_array_", K(ret));
} else {
tenant_id_ = arg.tenant_id_;
archive_round_ = arg.archive_round_;
piece_id_ = arg.piece_id_;
create_date_ = arg.create_date_;
job_id_ = arg.job_id_;
checkpoint_ts_ = arg.checkpoint_ts_;
task_id_ = arg.task_id_;
STRNCPY(src_root_path_, arg.src_root_path_, OB_MAX_BACKUP_PATH_LENGTH);
STRNCPY(src_storage_info_, arg.src_storage_info_, OB_MAX_BACKUP_STORAGE_INFO_LENGTH);
STRNCPY(dst_root_path_, arg.dst_root_path_, OB_MAX_BACKUP_PATH_LENGTH);
STRNCPY(dst_storage_info_, arg.dst_storage_info_, OB_MAX_BACKUP_STORAGE_INFO_LENGTH);
}
return ret;
}
OB_SERIALIZE_MEMBER(
ObBackupArchiveLogBatchRes, server_, tenant_id_, archive_round_, piece_id_, job_id_, checkpoint_ts_, res_array_);
ObBackupArchiveLogBatchRes::ObBackupArchiveLogBatchRes()
: server_(), tenant_id_(OB_INVALID_ID), archive_round_(0), piece_id_(0), job_id_(0), checkpoint_ts_(0), res_array_()
{}
bool ObBackupArchiveLogBatchRes::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && archive_round_ > 0 && piece_id_ >= 0 && server_.is_valid();
}
bool ObBackupArchiveLogBatchRes::is_interrupted() const
{
bool bret = false;
for (int64_t i = 0; i < res_array_.count(); ++i) {
const ObPGBackupArchiveLogRes& res = res_array_.at(i);
if (OB_LOG_ARCHIVE_INTERRUPTED == res.result_) {
bret = true;
break;
}
}
return bret;
}
int ObBackupArchiveLogBatchRes::assign(const ObBackupArchiveLogBatchRes& arg)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(res_array_, arg.res_array_))) {
SHARE_LOG(WARN, "failed to assgin res array", KR(ret));
} else {
tenant_id_ = arg.tenant_id_;
archive_round_ = arg.archive_round_;
piece_id_ = arg.piece_id_;
job_id_ = arg.job_id_;
checkpoint_ts_ = arg.checkpoint_ts_;
server_ = arg.server_;
}
return ret;
}
int ObBackupArchiveLogBatchRes::get_min_checkpoint_ts(int64_t& checkpoint_ts) const
{
int ret = OB_SUCCESS;
checkpoint_ts = INT64_MAX;
for (int64_t i = 0; OB_SUCC(ret) && i < res_array_.count(); ++i) {
const ObPGBackupArchiveLogRes& res = res_array_.at(i);
checkpoint_ts = std::min(checkpoint_ts, res.checkpoint_ts_);
}
return ret;
}
int ObBackupArchiveLogBatchRes::get_finished_pg_list(common::ObIArray<common::ObPGKey>& pg_list) const
{
int ret = OB_SUCCESS;
pg_list.reset();
for (int64_t i = 0; OB_SUCC(ret) && i < res_array_.count(); ++i) {
const ObPGBackupArchiveLogRes& res = res_array_.at(i);
const bool finished = OB_SUCCESS == res.result_;
if (finished) {
if (OB_FAIL(pg_list.push_back(res.pg_key_))) {
SHARE_LOG(WARN, "failed to push back pg key", KR(ret), K(res));
}
}
}
return ret;
}
int ObBackupArchiveLogBatchRes::get_failed_pg_list(common::ObIArray<common::ObPGKey>& pg_list) const
{
int ret = OB_SUCCESS;
pg_list.reset();
for (int64_t i = 0; OB_SUCC(ret) && i < res_array_.count(); ++i) {
const ObPGBackupArchiveLogRes& res = res_array_.at(i);
if (OB_SUCCESS != res.result_) {
if (OB_FAIL(pg_list.push_back(res.pg_key_))) {
SHARE_LOG(WARN, "failed to push back pg key", KR(ret), K(res));
}
}
}
return ret;
}
OB_SERIALIZE_MEMBER(ObMigrateBackupsetArg, backup_set_id_, pg_key_, backup_backupset_arg_);
ObMigrateBackupsetArg::ObMigrateBackupsetArg() : backup_set_id_(-1), pg_key_(), backup_backupset_arg_()
{}
int ObMigrateBackupsetArg::assign(const ObMigrateBackupsetArg& arg)
{
int ret = OB_SUCCESS;
backup_set_id_ = arg.backup_set_id_;
pg_key_ = arg.pg_key_;
backup_backupset_arg_ = arg.backup_backupset_arg_;
return ret;
}
bool ObMigrateBackupsetArg::is_valid() const
{
return backup_set_id_ > 0 && pg_key_.is_valid() && backup_backupset_arg_.is_valid();
}
OB_SERIALIZE_MEMBER(
ObBackupBackupsetArg, tenant_id_, backup_set_id_, tenant_name_, backup_backup_dest_, max_backup_times_);
ObBackupBackupsetArg::ObBackupBackupsetArg()
: tenant_id_(OB_INVALID_ID), backup_set_id_(-1), tenant_name_(), backup_backup_dest_(""), max_backup_times_(-1)
{}
bool ObBackupBackupsetArg::is_valid() const
{
return OB_INVALID_ID != tenant_id_ && backup_set_id_ >= 0;
}
int ObBackupBackupsetArg::assign(const ObBackupBackupsetArg& o)
{
int ret = OB_SUCCESS;
tenant_id_ = o.tenant_id_;
backup_set_id_ = o.backup_set_id_;
tenant_name_ = o.tenant_name_;
MEMCPY(backup_backup_dest_, o.backup_backup_dest_, sizeof(backup_backup_dest_));
max_backup_times_ = o.max_backup_times_;
return ret;
}
int ObBackupArchiveLogArg::assign(const ObBackupArchiveLogArg& o)
{
int ret = OB_SUCCESS;
enable_ = o.enable_;
return ret;
}
int ObBackupBackupPieceArg::assign(const ObBackupBackupPieceArg& o)
{
int ret = OB_SUCCESS;
tenant_id_ = o.tenant_id_;
piece_id_ = o.piece_id_;
tenant_name_ = o.tenant_name_;
MEMCPY(backup_backup_dest_, o.backup_backup_dest_, sizeof(backup_backup_dest_));
max_backup_times_ = o.max_backup_times_;
backup_all_ = o.backup_all_;
with_active_piece_ = o.with_active_piece_;
return ret;
}
OB_SERIALIZE_MEMBER(ObBackupBackupsetBatchArg, arg_array_, timeout_ts_, task_id_, tenant_dropped_);
int ObBackupBackupsetBatchArg::assign(const ObBackupBackupsetBatchArg& arg)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(arg_array_, arg.arg_array_))) {
SHARE_LOG(WARN, "failed to assign res_array", KR(ret));
} else {
timeout_ts_ = arg.timeout_ts_;
task_id_ = arg.task_id_;
tenant_dropped_ = arg.tenant_dropped_;
}
return ret;
}
bool ObBackupBackupsetBatchArg::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < arg_array_.count() && is_valid; ++i) {
is_valid = arg_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObBackupBackupsetReplicaRes, key_, dst_, arg_, result_);
ObBackupBackupsetReplicaRes::ObBackupBackupsetReplicaRes()
{}
int ObBackupBackupsetReplicaRes::assign(const ObBackupBackupsetReplicaRes& res)
{
int ret = OB_SUCCESS;
key_ = res.key_;
dst_ = res.dst_;
arg_ = res.arg_;
result_ = res.result_;
return ret;
}
bool ObBackupBackupsetReplicaRes::is_valid() const
{
return key_.is_valid() && dst_.is_valid() && arg_.is_valid();
}
OB_SERIALIZE_MEMBER(ObBackupBackupsetBatchRes, res_array_);
int ObBackupBackupsetBatchRes::assign(const ObBackupBackupsetBatchRes& res)
{
int ret = OB_SUCCESS;
if (OB_FAIL(copy_assign(res_array_, res.res_array_))) {
SHARE_LOG(WARN, "failed to assign res_array", KR(ret));
}
return ret;
}
bool ObBackupBackupsetBatchRes::is_valid() const
{
bool is_valid = true;
for (int64_t i = 0; i < res_array_.count() && is_valid; ++i) {
is_valid = res_array_.at(i).is_valid();
}
return is_valid;
}
OB_SERIALIZE_MEMBER(ObBackupArchiveLogArg, enable_);
OB_SERIALIZE_MEMBER(ObBackupBackupPieceArg, tenant_id_, piece_id_, tenant_name_, backup_backup_dest_, max_backup_times_,
backup_all_, with_active_piece_);
OB_SERIALIZE_MEMBER(ObBackupManageArg, tenant_id_, type_, value_, copy_id_);
OB_SERIALIZE_MEMBER(
CheckLeaderRpcIndex, switchover_timestamp_, epoch_, ml_pk_index_, pkey_info_start_index_, tenant_id_);
OB_SERIALIZE_MEMBER(ObBatchCheckLeaderArg, pkeys_, index_, trace_id_);
OB_SERIALIZE_MEMBER(ObBatchCheckRes, results_, index_);
OB_SERIALIZE_MEMBER(ObCheckFlashbackInfoArg, min_weak_read_timestamp_);
OB_SERIALIZE_MEMBER(ObCheckFlashbackInfoResult, addr_, pkey_, result_, switchover_timestamp_, ret_code_);
OB_SERIALIZE_MEMBER(ObBatchWriteCutdataClogArg, pkeys_, index_, trace_id_, switchover_timestamp_, flashback_ts_,
schema_version_, query_end_time_);
ObBackupBackupPieceArg::ObBackupBackupPieceArg()
: tenant_id_(OB_INVALID_ID),
piece_id_(-1),
tenant_name_(),
backup_backup_dest_(""),
max_backup_times_(-1),
backup_all_(false)
{}
int ObCheckFlashbackInfoArg::assign(const ObCheckFlashbackInfoArg& other)
{
int ret = OB_SUCCESS;
min_weak_read_timestamp_ = other.min_weak_read_timestamp_;
return ret;
}
int ObCheckFlashbackInfoResult::assign(const ObCheckFlashbackInfoResult& other)
{
int ret = OB_SUCCESS;
pkey_ = other.pkey_;
addr_ = other.addr_;
result_ = other.result_;
switchover_timestamp_ = other.switchover_timestamp_;
ret_code_ = other.ret_code_;
return ret;
}
bool CheckLeaderRpcIndex::is_valid() const
{
return switchover_timestamp_ > 0 && epoch_ >= 0 && ml_pk_index_ >= 0 && pkey_info_start_index_ >= 0 && tenant_id_ > 0;
}
void CheckLeaderRpcIndex::reset()
{
switchover_timestamp_ = 0;
epoch_ = -1;
ml_pk_index_ = -1;
pkey_info_start_index_ = -1;
tenant_id_ = OB_INVALID_TENANT_ID;
}
bool ObBatchWriteCutdataClogArg::is_valid() const
{
return 0 < pkeys_.count() && index_.is_valid() && 0 < switchover_timestamp_ && 0 < flashback_ts_ &&
0 < schema_version_;
}
void ObBatchWriteCutdataClogArg::reset()
{
pkeys_.reset();
index_.reset();
switchover_timestamp_ = 0;
flashback_ts_ = 0;
schema_version_ = 0;
trace_id_.reset();
query_end_time_ = 0;
}
bool ObBatchCheckLeaderArg::is_valid() const
{
return pkeys_.count() > 0 && index_.is_valid();
}
void ObBatchCheckLeaderArg::reset()
{
pkeys_.reset();
index_.reset();
}
bool ObBatchCheckRes::is_valid() const
{
return results_.count() > 0 && index_.is_valid();
}
void ObBatchCheckRes::reset()
{
results_.reset();
index_.reset();
}
OB_SERIALIZE_MEMBER(ObRebuildIndexInRestoreArg, tenant_id_);
OB_SERIALIZE_MEMBER((ObUpdateTableSchemaVersionArg, ObDDLArg), tenant_id_, table_id_, schema_version_, action_);
bool ObUpdateTableSchemaVersionArg::is_allow_when_upgrade() const
{
return UPDATE_SYS_TABLE_IN_TENANT_SPACE != action_;
}
bool ObUpdateTableSchemaVersionArg::is_valid() const
{
return (tenant_id_ > OB_INVALID_TENANT_ID && table_id_ >= 0 && schema_version_ >= OB_INVALID_SCHEMA_VERSION) ||
UPDATE_SYS_TABLE_IN_TENANT_SPACE == action_;
}
void ObUpdateTableSchemaVersionArg::reset()
{
tenant_id_ = OB_INVALID_TENANT_ID;
table_id_ = OB_INVALID_ID;
schema_version_ = OB_INVALID_SCHEMA_VERSION;
action_ = Action::INVALID;
}
void ObUpdateTableSchemaVersionArg::init(const int64_t tenant_id, const int64_t table_id, const int64_t schema_version,
const bool is_replay_schema, const Action action)
{
exec_tenant_id_ = OB_SYS_TENANT_ID;
tenant_id_ = tenant_id;
table_id_ = table_id;
schema_version_ = schema_version;
is_replay_schema_ = is_replay_schema;
action_ = action;
}
int ObUpdateTableSchemaVersionArg::assign(const ObUpdateTableSchemaVersionArg &other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ObDDLArg", KR(ret), K(other));
} else {
tenant_id_ = other.tenant_id_;
table_id_ = other.table_id_;
schema_version_ = other.schema_version_;
action_ = other.action_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObRestoreModifySchemaArg, ObDDLArg), type_, schema_id_);
bool ObRestoreModifySchemaArg::is_valid() const
{
return INVALID_TYPE < type_ && MAX_TYPE > type_ && schema_id_ > 0;
}
OB_SERIALIZE_MEMBER(ObPreProcessServerArg, server_, rescue_server_);
int ObPreProcessServerArg::init(const common::ObAddr& server, const common::ObAddr& rescue_server)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(!server.is_valid() || !rescue_server.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), K(server), K(rescue_server));
} else {
server_ = server;
rescue_server_ = rescue_server;
}
return ret;
}
OB_SERIALIZE_MEMBER(ObPreProcessServerReplyArg, server_, rescue_server_, ret_code_);
int ObPreProcessServerReplyArg::init(
const common::ObAddr& server, const common::ObAddr& rescue_server, const int ret_code)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(!server.is_valid() || !rescue_server.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), K(server), K(rescue_server));
} else {
server_ = server;
rescue_server_ = rescue_server;
ret_code_ = ret_code;
}
return ret;
}
OB_SERIALIZE_MEMBER(ObAdminRollingUpgradeArg, stage_);
bool ObAdminRollingUpgradeArg::is_valid() const
{
return OB_UPGRADE_STAGE_DBUPGRADE <= stage_ && stage_ <= OB_UPGRADE_STAGE_POSTUPGRADE;
}
OB_SERIALIZE_MEMBER(ObRsListArg, rs_list_, master_rs_);
ObLocationRpcRenewArg::ObLocationRpcRenewArg(common::ObIAllocator& allocator)
: keys_(OB_MALLOC_NORMAL_BLOCK_SIZE, ModulePageAllocator(allocator))
{}
OB_SERIALIZE_MEMBER(ObLocationRpcRenewArg, keys_);
OB_SERIALIZE_MEMBER(ObLocationRpcRenewResult, results_);
OB_SERIALIZE_MEMBER(ObGetMasterKeyResultArg, str_);
OB_SERIALIZE_MEMBER(ObKillPartTransCtxArg, partition_key_, trans_id_);
OB_SERIALIZE_MEMBER(ObPhysicalRestoreResult, job_id_, return_ret_, mod_, tenant_id_, trace_id_, addr_);
ObPhysicalRestoreResult::ObPhysicalRestoreResult()
: job_id_(common::OB_INVALID_ID),
return_ret_(common::OB_SUCCESS),
mod_(share::PHYSICAL_RESTORE_MOD_MAX_NUM),
tenant_id_(common::OB_INVALID_TENANT_ID),
trace_id_(),
addr_()
{}
bool ObPhysicalRestoreResult::is_valid() const
{
return job_id_ > 0 && OB_SUCCESS != return_ret_ && mod_ >= share::PHYSICAL_RESTORE_MOD_RS &&
mod_ < share::PHYSICAL_RESTORE_MOD_MAX_NUM && addr_.is_valid();
}
int ObPhysicalRestoreResult::assign(const ObPhysicalRestoreResult& other)
{
int ret = OB_SUCCESS;
job_id_ = other.job_id_;
return_ret_ = other.return_ret_;
mod_ = other.mod_;
tenant_id_ = other.tenant_id_;
trace_id_ = other.trace_id_;
addr_ = other.addr_;
return ret;
}
bool ObExecuteRangePartSplitArg::is_valid() const
{
return partition_key_.is_valid() && rowkey_.is_valid();
}
int ObExecuteRangePartSplitArg::assign(const ObExecuteRangePartSplitArg& other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
partition_key_ = other.partition_key_;
rowkey_ = other.rowkey_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObExecuteRangePartSplitArg, ObDDLArg), partition_key_, rowkey_);
OB_SERIALIZE_MEMBER(ObRefreshTimezoneArg, tenant_id_);
OB_SERIALIZE_MEMBER(ObCreateRestorePointArg, tenant_id_, name_);
OB_SERIALIZE_MEMBER(ObDropRestorePointArg, tenant_id_, name_);
OB_SERIALIZE_MEMBER(ObCheckBuildIndexTaskExistArg, tenant_id_, task_id_, scheduler_id_);
OB_SERIALIZE_MEMBER(ObPartitionBroadcastArg, keys_);
bool ObPartitionBroadcastArg::is_valid() const
{
return keys_.count() > 0;
}
int ObPartitionBroadcastArg::assign(const ObPartitionBroadcastArg& other)
{
int ret = OB_SUCCESS;
if (this == &other) {
} else if (OB_FAIL(keys_.assign(other.keys_))) {
LOG_WARN("fail to assign keys", KR(ret), K(other));
}
return ret;
}
OB_SERIALIZE_MEMBER(ObPartitionBroadcastResult, ret_);
bool ObPartitionBroadcastResult::is_valid() const
{
return true;
}
int ObPartitionBroadcastResult::assign(const ObPartitionBroadcastResult& other)
{
int ret = OB_SUCCESS;
if (this == &other) {
} else {
ret_ = other.ret_;
}
return ret;
}
int ObSubmitBuildIndexTaskArg::assign(const ObSubmitBuildIndexTaskArg &other)
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
index_tid_ = other.index_tid_;
}
return ret;
}
OB_SERIALIZE_MEMBER((ObSubmitBuildIndexTaskArg, ObDDLArg), index_tid_);
} // end namespace obrpc
} // namespace oceanbase