Files
oceanbase/src/share/ob_rpc_struct.h
2022-06-15 10:28:03 +08:00

8469 lines
203 KiB
C++
Executable File

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#ifndef OCEANBASE_RPC_OB_RPC_STRUCT_H_
#define OCEANBASE_RPC_OB_RPC_STRUCT_H_
#include "common/ob_member.h"
#include "common/ob_member_list.h"
#include "common/ob_partition_key.h"
#include "common/ob_role.h"
#include "common/ob_role_mgr.h"
#include "common/ob_zone.h"
#include "common/ob_region.h"
#include "common/ob_idc.h"
#include "common/ob_zone_type.h"
#include "common/ob_common_types.h"
#include "common/ob_unit_info.h"
#include "common/ob_store_format.h"
#include "share/ob_debug_sync.h"
#include "share/ob_partition_modify.h"
#include "share/ob_zone_info.h"
#include "share/ob_server_status.h"
#include "share/ob_simple_batch.h"
#include "share/ob_freeze_info_proxy.h"
#include "share/ob_cluster_type.h" // ObClusterType PRIMARY_CLUSTER
#include "share/ob_web_service_root_addr.h"
#include "share/ob_cluster_version.h"
#include "share/ob_i_data_access_service.h"
#include "share/ob_multi_cluster_util.h"
#include "share/ob_cluster_switchover_info.h" // ObClusterSwitchoverInfoWrap
#include "share/backup/ob_physical_restore_info.h"
#include "share/schema/ob_error_info.h"
#include "share/schema/ob_constraint.h"
#include "share/schema/ob_schema_service.h"
#include "share/schema/ob_udf.h"
#include "share/ob_storage_format.h"
#include "share/ob_replica_wrs_info.h" // ObReplicaWrsInfoList
#include "share/restore/ob_restore_args.h" // ObRestoreArgs
#include "rootserver/ob_rs_job_table_operator.h"
#include "sql/executor/ob_task_id.h"
#include "sql/parser/ob_item_type.h" // ObCacheType
#include "share/partition_table/ob_partition_location_task.h" // ObPartitionBroadcastTask
namespace oceanbase {
namespace rootserver {
class ObGlobalIndexTask;
}
namespace obrpc {
typedef common::ObSArray<common::ObAddr> ObServerList;
static const int64_t MAX_COUNT = 128;
static const int64_t OB_DEFAULT_ARRAY_SIZE = 8;
typedef common::ObSEArray<common::ObPartitionKey, MAX_COUNT> ObPkeyArray;
enum ObUpgradeStage {
OB_UPGRADE_STAGE_INVALID,
OB_UPGRADE_STAGE_NONE,
OB_UPGRADE_STAGE_PREUPGRADE,
OB_UPGRADE_STAGE_DBUPGRADE,
OB_UPGRADE_STAGE_POSTUPGRADE,
OB_UPGRADE_STAGE_MAX
};
const char* get_upgrade_stage_str(ObUpgradeStage stage);
ObUpgradeStage get_upgrade_stage(const common::ObString& str);
enum class MigrateMode {
MT_LOCAL_FS_MODE = 0,
MT_SINGLE_ZONE_MODE = 1,
MT_MAX,
};
enum ObCreateTableMode {
OB_CREATE_TABLE_MODE_INVALID = -1,
OB_CREATE_TABLE_MODE_LOOSE = 0,
OB_CREATE_TABLE_MODE_STRICT = 1,
OB_CREATE_TABLE_MODE_RESTORE = 2,
OB_CREATE_TABLE_MODE_PHYSICAL_RESTORE = 3, // Distinguish from logical recovery
OB_CREATE_TABLE_MODE_MAX,
};
enum ObDefaultRoleFlag {
OB_DEFUALT_NONE = 0,
OB_DEFAULT_ROLE_LIST = 1,
OB_DEFAULT_ROLE_ALL = 2,
OB_DEFAULT_ROLE_ALL_EXCEPT = 3,
OB_DEFAULT_ROLE_NONE = 4,
OB_DEFAULT_ROLE_MAX,
};
struct Bool {
OB_UNIS_VERSION(1);
public:
Bool(bool v = false) : v_(v)
{}
operator bool()
{
return v_;
}
operator bool() const
{
return v_;
}
DEFINE_TO_STRING(BUF_PRINTO(v_));
private:
bool v_;
};
struct Int64 {
OB_UNIS_VERSION(1);
public:
Int64(int64_t v = common::OB_INVALID_ID) : v_(v)
{}
inline void reset();
bool is_valid() const
{
return true;
}
operator int64_t()
{
return v_;
}
operator int64_t() const
{
return v_;
}
DEFINE_TO_STRING(BUF_PRINTO(v_));
private:
int64_t v_;
};
struct UInt64 {
OB_UNIS_VERSION(1);
public:
UInt64(uint64_t v = common::OB_INVALID_ID) : v_(v)
{}
operator uint64_t()
{
return v_;
}
operator uint64_t() const
{
return v_;
}
DEFINE_TO_STRING(BUF_PRINTO(v_));
private:
uint64_t v_;
};
struct ObGetRootserverRoleResult {
OB_UNIS_VERSION(1);
public:
ObGetRootserverRoleResult()
: role_(0), zone_(), type_(common::REPLICA_TYPE_MAX), status_(share::status::MAX), replica_(), partition_info_()
{}
void reset();
DECLARE_TO_STRING;
int32_t role_;
common::ObZone zone_;
common::ObReplicaType type_;
share::status::ObRootServiceStatus status_;
share::ObPartitionReplica replica_;
share::ObPartitionInfo partition_info_;
};
struct ObServerInfo {
OB_UNIS_VERSION(1);
public:
common::ObZone zone_;
common::ObAddr server_;
common::ObRegion region_;
// FIXME: () Do you need to consider region_ comparison after adding region_? I don't need to consider it for the time
// being
bool operator<(const ObServerInfo& r) const
{
return zone_ < r.zone_;
}
DECLARE_TO_STRING;
};
struct ObPartitionId {
OB_UNIS_VERSION(1);
public:
int64_t table_id_;
int64_t partition_id_;
ObPartitionId() : table_id_(common::OB_INVALID_ID), partition_id_(common::OB_INVALID_INDEX)
{}
DECLARE_TO_STRING;
};
struct ObPartitionStat {
OB_UNIS_VERSION(1);
public:
enum PartitionStat {
RECOVERING = 0,
WRITABLE = 1,
};
ObPartitionStat() : partition_key_(), stat_(RECOVERING)
{}
void reset()
{
partition_key_.reset();
stat_ = RECOVERING;
}
common::ObPartitionKey partition_key_;
PartitionStat stat_;
DECLARE_TO_STRING;
};
typedef common::ObSArray<ObServerInfo> ObServerInfoList;
typedef common::ObSArray<common::ObPartitionKey> ObPartitionList;
typedef common::ObSArray<ObPartitionStat> ObPartitionStatList;
typedef common::ObArray<ObServerInfoList> ObPartitionServerList;
struct ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDDLArg()
: ddl_stmt_str_(),
exec_tenant_id_(common::OB_INVALID_TENANT_ID),
ddl_id_str_(),
primary_schema_versions_(),
is_replay_schema_(false),
based_schema_object_infos_()
{}
bool is_sync_primary_query() const
{
return 0 < primary_schema_versions_.count();
}
bool is_need_check_based_schema_objects() const
{
return 0 < based_schema_object_infos_.count();
}
virtual bool is_allow_when_disable_ddl() const
{
return false;
}
virtual bool is_allow_when_upgrade() const
{
return false;
}
virtual int assign(const ObDDLArg& other);
TO_STRING_KV(
K_(ddl_stmt_str), K_(exec_tenant_id), K_(ddl_id_str), K_(is_replay_schema), K_(based_schema_object_infos));
common::ObString ddl_stmt_str_;
uint64_t exec_tenant_id_;
common::ObString ddl_id_str_;
common::ObSEArray<int64_t, 5> primary_schema_versions_;
bool is_replay_schema_;
common::ObSEArray<share::schema::ObBasedSchemaObjectInfo, OB_DEFAULT_ARRAY_SIZE> based_schema_object_infos_;
};
struct ObCreateResourceUnitArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateResourceUnitArg()
: ObDDLArg(),
min_cpu_(0),
min_iops_(0),
min_memory_(0),
max_cpu_(0),
max_memory_(0),
max_disk_size_(0),
max_iops_(0),
max_session_num_(0),
if_not_exist_(false)
{}
virtual ~ObCreateResourceUnitArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual int assign(const ObCreateResourceUnitArg& other);
DECLARE_TO_STRING;
common::ObString unit_name_;
double min_cpu_;
int64_t min_iops_;
int64_t min_memory_;
double max_cpu_;
int64_t max_memory_;
int64_t max_disk_size_;
int64_t max_iops_;
int64_t max_session_num_;
bool if_not_exist_;
};
struct ObAlterResourceUnitArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObAlterResourceUnitArg()
: ObDDLArg(),
min_cpu_(0),
min_iops_(0),
min_memory_(0),
max_cpu_(0),
max_memory_(0),
max_disk_size_(0),
max_iops_(0),
max_session_num_(0)
{}
virtual ~ObAlterResourceUnitArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual int assign(const ObAlterResourceUnitArg& other);
DECLARE_TO_STRING;
common::ObString unit_name_;
double min_cpu_;
int64_t min_iops_;
int64_t min_memory_;
double max_cpu_;
int64_t max_memory_;
int64_t max_disk_size_;
int64_t max_iops_;
int64_t max_session_num_;
};
struct ObDropResourceUnitArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropResourceUnitArg() : ObDDLArg(), if_exist_(false)
{}
virtual ~ObDropResourceUnitArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual int assign(const ObDropResourceUnitArg& other);
DECLARE_TO_STRING;
common::ObString unit_name_;
bool if_exist_;
};
struct ObCreateResourcePoolArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateResourcePoolArg()
: ObDDLArg(), unit_num_(0), if_not_exist_(0), replica_type_(common::REPLICA_TYPE_FULL), is_tenant_sys_pool_(false)
{}
virtual ~ObCreateResourcePoolArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual int assign(const ObCreateResourcePoolArg& other);
DECLARE_TO_STRING;
common::ObString pool_name_;
common::ObString unit_;
int64_t unit_num_;
common::ObSArray<common::ObZone> zone_list_;
bool if_not_exist_;
common::ObReplicaType replica_type_;
bool is_tenant_sys_pool_;
};
struct ObSplitResourcePoolArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObSplitResourcePoolArg() : ObDDLArg(), pool_name_(), zone_list_(), split_pool_list_()
{}
virtual ~ObSplitResourcePoolArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual int assign(const ObSplitResourcePoolArg& other);
TO_STRING_KV(K_(pool_name), K_(zone_list), K_(split_pool_list));
common::ObString pool_name_;
common::ObSArray<common::ObZone> zone_list_;
common::ObSArray<common::ObString> split_pool_list_;
};
struct ObMergeResourcePoolArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObMergeResourcePoolArg()
: ObDDLArg(),
old_pool_list_(), // Before the merger
new_pool_list_()
{} // After the merger
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual int assign(const ObMergeResourcePoolArg& other);
TO_STRING_KV(K_(old_pool_list), K_(new_pool_list));
common::ObSArray<common::ObString> old_pool_list_;
common::ObSArray<common::ObString> new_pool_list_;
};
struct ObAlterResourcePoolArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObAlterResourcePoolArg() : ObDDLArg(), pool_name_(), unit_(), unit_num_(0), zone_list_(), delete_unit_id_array_()
{}
virtual ~ObAlterResourcePoolArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual int assign(const ObAlterResourcePoolArg& other);
DECLARE_TO_STRING;
common::ObString pool_name_;
common::ObString unit_;
int64_t unit_num_;
common::ObSArray<common::ObZone> zone_list_;
common::ObSArray<uint64_t> delete_unit_id_array_; // This array may be empty
};
struct ObDropResourcePoolArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropResourcePoolArg() : ObDDLArg(), if_exist_(false)
{}
virtual ~ObDropResourcePoolArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual int assign(const ObDropResourcePoolArg& other);
DECLARE_TO_STRING;
common::ObString pool_name_;
bool if_exist_;
};
struct ObCmdArg {
OB_UNIS_VERSION(1);
public:
common::ObString& get_sql_stmt()
{
return sql_text_;
}
const common::ObString& get_sql_stmt() const
{
return sql_text_;
}
public:
common::ObString sql_text_;
};
struct ObSysVarIdValue {
OB_UNIS_VERSION(1);
public:
ObSysVarIdValue() : sys_id_(share::SYS_VAR_INVALID), value_()
{}
ObSysVarIdValue(share::ObSysVarClassType sys_id, common::ObString& value) : sys_id_(sys_id), value_(value)
{}
~ObSysVarIdValue()
{}
bool is_valid() const;
DECLARE_TO_STRING;
share::ObSysVarClassType sys_id_;
common::ObString value_;
};
struct ObCreateTenantArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateTenantArg()
: ObDDLArg(),
tenant_schema_(),
pool_list_(),
if_not_exist_(false),
sys_var_list_(),
name_case_mode_(common::OB_NAME_CASE_INVALID),
is_restore_(false),
restore_frozen_status_()
{}
virtual ~ObCreateTenantArg(){};
bool is_valid() const;
int check_valid() const;
int assign(const ObCreateTenantArg& other);
DECLARE_TO_STRING;
share::schema::ObTenantSchema tenant_schema_;
common::ObSArray<common::ObString> pool_list_;
bool if_not_exist_;
common::ObSArray<ObSysVarIdValue> sys_var_list_;
common::ObNameCaseMode name_case_mode_;
bool is_restore_;
common::ObSArray<ObPartitionKey> restore_pkeys_; // For physical restore, partitions that should be created with
// is_restore = REPLICA_RESTORE_DATA
common::ObSArray<ObPartitionKey> restore_log_pkeys_; // For physical restore, partitions that should be created with
// is_restore = REPLICA_RESTORE_ARCHIVE_DATA
share::ObSimpleFrozenStatus restore_frozen_status_;
};
struct ObCreateTenantEndArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateTenantEndArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_TENANT_ID)
{}
virtual ~ObCreateTenantEndArg()
{}
bool is_valid() const;
int assign(const ObCreateTenantEndArg& other);
virtual bool is_allow_when_upgrade() const
{
return true;
}
DECLARE_TO_STRING;
uint64_t tenant_id_;
};
struct ObModifyTenantArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
enum ModifiableOptions {
REPLICA_NUM = 1,
CHARSET_TYPE,
COLLATION_TYPE,
PRIMARY_ZONE,
ZONE_LIST,
RESOURCE_POOL_LIST,
READ_ONLY,
COMMENT,
REWRITE_MERGE_VERSION,
LOCALITY,
LOGONLY_REPLICA_NUM,
STORAGE_FORMAT_VERSION,
STORAGE_FORMAT_WORK_VERSION,
DEFAULT_TABLEGROUP,
FORCE_LOCALITY,
PROGRESSIVE_MERGE_NUM,
MAX_OPTION,
};
ObModifyTenantArg() : ObDDLArg()
{}
bool is_valid() const;
int check_normal_tenant_can_do(bool& normal_can_do) const;
virtual bool is_allow_when_disable_ddl() const;
virtual bool is_allow_when_upgrade() const;
DECLARE_TO_STRING;
share::schema::ObTenantSchema tenant_schema_;
common::ObSArray<common::ObString> pool_list_;
// used to mark alter tenant options
common::ObBitSet<> alter_option_bitset_;
common::ObSArray<ObSysVarIdValue> sys_var_list_;
common::ObString new_tenant_name_; // for tenant rename
};
struct ObLockTenantArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObLockTenantArg() : ObDDLArg(), is_locked_(false)
{}
bool is_valid() const;
DECLARE_TO_STRING;
common::ObString tenant_name_;
bool is_locked_;
};
struct ObDropTenantArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropTenantArg()
: ObDDLArg(),
if_exist_(false),
delay_to_drop_(true),
force_drop_(false), // Obsolete field
open_recyclebin_(true)
{}
virtual ~ObDropTenantArg()
{}
/*
* drop tenant force highest priority
* At this time delay_to_drop_=false;
* In other cases delay_to_drop_=true;
* open_recyclebin_ is determined according to whether the recycle bin is open or not;
* open_recyclebin_ open as true, enter the recycle bin
* open_recyclebin_ closed to false, delayed deletion
*/
int assign(const ObDropTenantArg& other)
{
tenant_name_ = other.tenant_name_;
if_exist_ = other.if_exist_;
delay_to_drop_ = other.delay_to_drop_;
force_drop_ = other.force_drop_;
object_name_ = other.object_name_;
open_recyclebin_ = other.object_name_;
return common::OB_SUCCESS;
}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
DECLARE_TO_STRING;
common::ObString tenant_name_;
bool if_exist_;
bool delay_to_drop_;
bool force_drop_;
common::ObString object_name_; // Synchronize the name of the recycle bin in the main library
bool open_recyclebin_;
};
struct ObSequenceDDLArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObSequenceDDLArg() : ObDDLArg(), stmt_type_(common::OB_INVALID_ID), option_bitset_(), seq_schema_(), database_name_()
{}
bool is_valid() const
{
return !database_name_.empty();
}
virtual bool is_allow_when_upgrade() const
{
return sql::stmt::T_DROP_SEQUENCE == stmt_type_;
}
void set_stmt_type(int64_t type)
{
stmt_type_ = type;
}
int64_t get_stmt_type() const
{
return stmt_type_;
}
void set_tenant_id(const uint64_t tenant_id)
{
seq_schema_.set_tenant_id(tenant_id);
}
void set_sequence_id(const uint64_t sequence_id)
{
seq_schema_.set_sequence_id(sequence_id);
}
void set_sequence_name(const common::ObString& name)
{
seq_schema_.set_sequence_name(name);
}
void set_database_name(const common::ObString& name)
{
database_name_ = name;
}
share::ObSequenceOption& option()
{
return seq_schema_.get_sequence_option();
}
const common::ObString& get_database_name() const
{
return database_name_;
}
share::schema::ObSequenceSchema& sequence_schema()
{
return seq_schema_;
}
common::ObBitSet<>& get_option_bitset()
{
return option_bitset_;
}
const common::ObBitSet<>& get_option_bitset() const
{
return option_bitset_;
}
TO_STRING_KV(K_(stmt_type), K_(seq_schema), K_(database_name));
public:
int64_t stmt_type_;
common::ObBitSet<> option_bitset_;
share::schema::ObSequenceSchema seq_schema_;
common::ObString database_name_;
};
struct ObAddSysVarArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObAddSysVarArg() : sysvar_(), if_not_exist_(false)
{}
DECLARE_TO_STRING;
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
share::schema::ObSysVarSchema sysvar_;
bool if_not_exist_;
};
struct ObModifySysVarArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObModifySysVarArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), is_inner_(false)
{}
DECLARE_TO_STRING;
bool is_valid() const;
int assign(const ObModifySysVarArg& other);
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual bool is_allow_when_disable_ddl() const
{
return true;
}
uint64_t tenant_id_;
common::ObSArray<share::schema::ObSysVarSchema> sys_var_list_;
bool is_inner_;
};
struct ObCreateDatabaseArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateDatabaseArg() : ObDDLArg(), if_not_exist_(false)
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
DECLARE_TO_STRING;
share::schema::ObDatabaseSchema database_schema_;
// used to mark alter database options
common::ObBitSet<> alter_option_bitset_;
bool if_not_exist_;
};
struct ObAlterDatabaseArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
enum ModifiableOptions {
REPLICA_NUM = 1,
CHARSET_TYPE,
COLLATION_TYPE,
PRIMARY_ZONE,
READ_ONLY,
DEFAULT_TABLEGROUP,
MAX_OPTION
};
public:
ObAlterDatabaseArg() : ObDDLArg()
{}
bool is_valid() const;
bool only_alter_primary_zone() const
{
return (1 == alter_option_bitset_.num_members() && alter_option_bitset_.has_member(PRIMARY_ZONE));
}
virtual bool is_allow_when_upgrade() const
{
return true;
}
DECLARE_TO_STRING;
share::schema::ObDatabaseSchema database_schema_;
// used to mark alter database options
common::ObBitSet<> alter_option_bitset_;
};
struct ObDropDatabaseArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropDatabaseArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), if_exist_(false), to_recyclebin_(false)
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
DECLARE_TO_STRING;
uint64_t tenant_id_;
common::ObString database_name_;
bool if_exist_;
bool to_recyclebin_;
};
struct ObCreateTablegroupArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateTablegroupArg() : ObDDLArg(), if_not_exist_(false), create_mode_(obrpc::OB_CREATE_TABLE_MODE_STRICT)
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
DECLARE_TO_STRING;
share::schema::ObTablegroupSchema tablegroup_schema_;
bool if_not_exist_;
obrpc::ObCreateTableMode create_mode_;
};
struct ObDropTablegroupArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropTablegroupArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), if_exist_(false)
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
DECLARE_TO_STRING;
uint64_t tenant_id_;
common::ObString tablegroup_name_;
bool if_exist_;
};
struct ObTableItem;
struct ObAlterTablegroupArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObAlterTablegroupArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
tablegroup_name_(),
table_items_(),
alter_option_bitset_(),
create_mode_(OB_CREATE_TABLE_MODE_STRICT),
alter_tablegroup_schema_()
{}
bool is_valid() const;
bool is_alter_partitions() const;
virtual bool is_allow_when_disable_ddl() const;
virtual bool is_allow_when_upgrade() const;
DECLARE_TO_STRING;
enum ModifiableOptions {
LOCALITY = 1,
PRIMARY_ZONE,
ADD_PARTITION,
DROP_PARTITION,
PARTITIONED_TABLE,
PARTITIONED_PARTITION,
REORGANIZE_PARTITION,
SPLIT_PARTITION,
FORCE_LOCALITY,
MAX_OPTION,
};
uint64_t tenant_id_;
common::ObString tablegroup_name_;
common::ObSArray<ObTableItem> table_items_;
common::ObBitSet<> alter_option_bitset_;
ObCreateTableMode create_mode_;
share::schema::ObTablegroupSchema alter_tablegroup_schema_;
};
struct ObReachPartitionLimitArg {
OB_UNIS_VERSION(1);
public:
ObReachPartitionLimitArg() : batch_cnt_(0), tenant_id_(common::OB_INVALID_ID), is_pg_arg_(false)
{}
ObReachPartitionLimitArg(const int64_t batch_cnt, const uint64_t tenant_id, const bool is_pg_arg)
: batch_cnt_(batch_cnt), tenant_id_(tenant_id), is_pg_arg_(is_pg_arg)
{}
virtual ~ObReachPartitionLimitArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(batch_cnt), K_(tenant_id), K_(is_pg_arg));
public:
int64_t batch_cnt_;
uint64_t tenant_id_;
bool is_pg_arg_;
};
struct ObCheckFrozenVersionArg {
OB_UNIS_VERSION(1);
public:
ObCheckFrozenVersionArg() : frozen_version_(0)
{}
virtual ~ObCheckFrozenVersionArg()
{}
bool is_valid() const
{
return frozen_version_ > 0;
}
TO_STRING_KV(K_(frozen_version));
public:
int64_t frozen_version_;
};
struct ObGetMinSSTableSchemaVersionArg {
OB_UNIS_VERSION(1);
public:
ObGetMinSSTableSchemaVersionArg()
{
tenant_id_arg_list_.reuse();
}
virtual ~ObGetMinSSTableSchemaVersionArg()
{
tenant_id_arg_list_.reset();
}
bool is_valid() const
{
return tenant_id_arg_list_.size() > 0;
}
TO_STRING_KV(K_(tenant_id_arg_list));
public:
common::ObSArray<uint64_t> tenant_id_arg_list_;
};
struct ObCreateIndexArg; // Forward declaration
struct ObCreateForeignKeyArg; // Forward declaration
struct ObCreateTableArg : ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateTableArg()
: ObDDLArg(),
if_not_exist_(false),
create_mode_(OB_CREATE_TABLE_MODE_STRICT),
last_replay_log_id_(0),
is_inner_(false),
error_info_()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const;
DECLARE_TO_STRING;
bool if_not_exist_;
share::schema::ObTableSchema schema_;
common::ObSArray<ObCreateIndexArg> index_arg_list_;
common::ObSArray<ObCreateForeignKeyArg> foreign_key_arg_list_;
common::ObSEArray<share::schema::ObConstraint, 4> constraint_list_;
common::ObString db_name_;
ObCreateTableMode create_mode_;
uint64_t last_replay_log_id_;
bool is_inner_;
share::schema::ObErrorInfo error_info_;
// New members of ObCreateTableArg need to pay attention to the implementation of is_allow_when_upgrade
};
struct ObCreateTableLikeArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateTableLikeArg()
: ObDDLArg(),
if_not_exist_(false),
tenant_id_(common::OB_INVALID_ID),
table_type_(share::schema::USER_TABLE),
origin_db_name_(),
origin_table_name_(),
new_db_name_(),
new_table_name_(),
create_host_(),
create_mode_(OB_CREATE_TABLE_MODE_STRICT)
{}
bool is_valid() const;
DECLARE_TO_STRING;
bool if_not_exist_;
uint64_t tenant_id_;
share::schema::ObTableType table_type_;
common::ObString origin_db_name_;
common::ObString origin_table_name_;
common::ObString new_db_name_;
common::ObString new_table_name_;
common::ObString create_host_; // Temporary table is valid
ObCreateTableMode create_mode_;
};
struct ObCreateSynonymArg : ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateSynonymArg() : or_replace_(false), synonym_info_(), db_name_()
{}
TO_STRING_KV(K_(synonym_info), K_(db_name), K_(obj_db_name));
bool or_replace_;
share::schema::ObSynonymInfo synonym_info_;
common::ObString db_name_;
common::ObString obj_db_name_;
};
struct ObDropSynonymArg : ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropSynonymArg() : tenant_id_(common::OB_INVALID_ID), is_force_(false), db_name_(), synonym_name_()
{}
virtual ~ObDropSynonymArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
TO_STRING_KV(K_(tenant_id), K_(is_force), K_(db_name), K_(synonym_name));
uint64_t tenant_id_;
bool is_force_;
common::ObString db_name_;
common::ObString synonym_name_;
};
struct ObAlterPlanBaselineArg : ObDDLArg {
OB_UNIS_VERSION(1);
public:
enum FieldUpdated {
FIXED = 0x1,
ENABLED = 0x02,
OUTLINE_DATA = 0x4,
};
ObAlterPlanBaselineArg() : plan_baseline_info_(), field_update_bitmap_(0)
{}
TO_STRING_KV(K_(plan_baseline_info), K_(field_update_bitmap));
share::schema::ObPlanBaselineInfo plan_baseline_info_;
uint64_t field_update_bitmap_;
void restore(const share::schema::ObPlanBaselineInfo& old);
};
struct ObCreatePlanBaselineArg : ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreatePlanBaselineArg() : plan_baseline_info_(), is_replace_(false)
{}
TO_STRING_KV(K_(plan_baseline_info), K(is_replace_));
share::schema::ObPlanBaselineInfo plan_baseline_info_;
bool is_replace_;
};
struct ObDropPlanBaselineArg : ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropPlanBaselineArg()
: tenant_id_(common::OB_INVALID_ID),
sql_id_(),
plan_hash_value_(common::OB_INVALID_ID),
plan_baseline_id_(common::OB_INVALID_ID),
db_name_()
{}
virtual ~ObDropPlanBaselineArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
TO_STRING_KV(K_(tenant_id), K_(sql_id), K_(plan_hash_value));
uint64_t tenant_id_;
common::ObString sql_id_;
uint64_t plan_hash_value_;
uint64_t plan_baseline_id_;
common::ObString db_name_;
};
struct ObIndexArg : public ObDDLArg {
OB_UNIS_VERSION_V(1);
public:
enum IndexActionType {
INVALID_ACTION = 1,
ADD_INDEX,
DROP_INDEX,
ALTER_INDEX,
DROP_FOREIGN_KEY, // The foreign key is a 1.4 function, and rename_index needs to be placed at the back in
// consideration of compatibility
RENAME_INDEX,
ALTER_INDEX_PARALLEL,
REBUILD_INDEX
};
uint64_t tenant_id_;
uint64_t session_id_; // The session id is passed in when building the index, and the table schema is searched by rs
// according to the temporary table and then the ordinary table.
common::ObString index_name_;
common::ObString table_name_;
common::ObString database_name_;
IndexActionType index_action_type_;
ObIndexArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
session_id_(common::OB_INVALID_ID),
index_name_(),
table_name_(),
database_name_(),
index_action_type_(INVALID_ACTION)
{}
virtual ~ObIndexArg()
{}
void reset()
{
tenant_id_ = common::OB_INVALID_ID;
session_id_ = common::OB_INVALID_ID;
index_name_.reset();
table_name_.reset();
database_name_.reset();
index_action_type_ = INVALID_ACTION;
}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const;
int assign(const ObIndexArg& other)
{
tenant_id_ = other.tenant_id_;
session_id_ = other.session_id_;
index_name_ = other.index_name_;
table_name_ = other.table_name_;
database_name_ = other.database_name_;
index_action_type_ = other.index_action_type_;
return common::OB_SUCCESS;
}
DECLARE_VIRTUAL_TO_STRING;
};
struct ObUpdateStatCacheArg : public ObDDLArg {
OB_UNIS_VERSION_V(1);
public:
ObUpdateStatCacheArg()
: tenant_id_(common::OB_INVALID_ID), table_id_(common::OB_INVALID_ID), partition_ids_(), column_ids_()
{}
virtual ~ObUpdateStatCacheArg()
{}
void rest()
{
tenant_id_ = common::OB_INVALID_ID, table_id_ = common::OB_INVALID_ID, partition_ids_.reset();
column_ids_.reset();
}
bool is_valid() const;
int assign(const ObUpdateStatCacheArg& other)
{
int ret = common::OB_SUCCESS;
tenant_id_ = other.tenant_id_;
table_id_ = other.table_id_;
if (OB_FAIL(ObDDLArg::assign(other))) {
SHARE_LOG(WARN, "fail to assign ddl arg", KR(ret));
} else if (OB_FAIL(partition_ids_.assign(other.partition_ids_))) {
SHARE_LOG(WARN, "fail to assign partition ids", KR(ret));
} else if (OB_FAIL(column_ids_.assign(other.column_ids_))) {
SHARE_LOG(WARN, "fail to assign column ids", KR(ret));
} else { /*do nothing*/
}
return ret;
}
virtual bool is_allow_when_upgrade() const
{
return true;
}
uint64_t tenant_id_;
uint64_t table_id_;
common::ObSArray<int64_t> partition_ids_;
common::ObSArray<uint64_t> column_ids_;
DECLARE_VIRTUAL_TO_STRING;
};
struct ObDropIndexArg : public ObIndexArg {
OB_UNIS_VERSION(1);
// if add new member,should add to_string and serialize function
public:
ObDropIndexArg()
{
index_action_type_ = DROP_INDEX;
to_recyclebin_ = false;
index_table_id_ = common::OB_INVALID_ID;
}
virtual ~ObDropIndexArg()
{}
void reset()
{
ObIndexArg::reset();
index_action_type_ = DROP_INDEX;
}
bool is_valid() const
{
return ObIndexArg::is_valid();
}
bool to_recyclebin() const
{
return to_recyclebin_;
}
bool to_recyclebin_;
uint64_t index_table_id_;
DECLARE_VIRTUAL_TO_STRING;
};
struct ObRebuildIndexArg : public ObIndexArg {
OB_UNIS_VERSION(1);
// if add new member,should add to_string and serialize function
public:
ObRebuildIndexArg() : ObIndexArg()
{
create_mode_ = OB_CREATE_TABLE_MODE_STRICT;
index_action_type_ = REBUILD_INDEX;
index_table_id_ = common::OB_INVALID_ID;
}
virtual ~ObRebuildIndexArg()
{}
int assign(const ObRebuildIndexArg& other)
{
int ret = common::OB_SUCCESS;
if (OB_FAIL(ObIndexArg::assign(other))) {
SHARE_LOG(WARN, "fail to assign base", K(ret));
} else {
create_mode_ = other.create_mode_;
index_table_id_ = other.index_table_id_;
}
return ret;
}
void reset()
{
ObIndexArg::reset();
index_action_type_ = REBUILD_INDEX;
}
bool is_valid() const
{
return ObIndexArg::is_valid();
}
ObCreateTableMode create_mode_;
uint64_t index_table_id_;
DECLARE_VIRTUAL_TO_STRING;
};
struct ObAlterIndexParallelArg : public ObIndexArg {
OB_UNIS_VERSION_V(1);
public:
ObAlterIndexParallelArg() : ObIndexArg(), new_parallel_(common::OB_DEFAULT_TABLE_DOP)
{
index_action_type_ = ALTER_INDEX_PARALLEL;
}
virtual ~ObAlterIndexParallelArg()
{}
void reset()
{
ObIndexArg::reset();
index_action_type_ = ALTER_INDEX_PARALLEL;
new_parallel_ = common::OB_DEFAULT_TABLE_DOP;
}
bool is_valid() const
{
// parallel must be greater than 0
return new_parallel_ > 0;
}
int64_t new_parallel_;
DECLARE_VIRTUAL_TO_STRING;
};
struct ObRenameIndexArg : public ObIndexArg {
OB_UNIS_VERSION_V(1);
public:
ObRenameIndexArg() : ObIndexArg(), origin_index_name_(), new_index_name_()
{
index_action_type_ = RENAME_INDEX;
}
virtual ~ObRenameIndexArg()
{}
void reset()
{
ObIndexArg::reset();
index_action_type_ = RENAME_INDEX;
origin_index_name_.reset();
new_index_name_.reset();
}
bool is_valid() const;
common::ObString origin_index_name_;
common::ObString new_index_name_;
DECLARE_VIRTUAL_TO_STRING;
};
struct ObAlterIndexArg : public ObIndexArg {
OB_UNIS_VERSION_V(1);
public:
ObAlterIndexArg() : ObIndexArg(), index_visibility_(common::OB_DEFAULT_INDEX_VISIBILITY)
{
index_action_type_ = ALTER_INDEX;
}
virtual ~ObAlterIndexArg()
{}
void reset()
{
ObIndexArg::reset();
index_action_type_ = ALTER_INDEX;
index_visibility_ = common::OB_DEFAULT_INDEX_VISIBILITY;
}
bool is_valid() const;
uint64_t index_visibility_;
DECLARE_VIRTUAL_TO_STRING;
};
struct ObTruncateTableArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObTruncateTableArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
session_id_(common::OB_INVALID_ID),
database_name_(),
table_name_(),
create_mode_(OB_CREATE_TABLE_MODE_STRICT),
to_recyclebin_(false)
{}
bool is_valid() const;
DECLARE_TO_STRING;
uint64_t tenant_id_;
uint64_t session_id_; // Pass in session id when truncate table
common::ObString database_name_;
common::ObString table_name_;
ObCreateTableMode create_mode_;
bool to_recyclebin_;
};
struct ObRenameTableItem {
OB_UNIS_VERSION(1);
public:
ObRenameTableItem()
: origin_db_name_(),
new_db_name_(),
origin_table_name_(),
new_table_name_(),
origin_table_id_(common::OB_INVALID_ID)
{}
bool is_valid() const;
DECLARE_TO_STRING;
common::ObString origin_db_name_;
common::ObString new_db_name_;
common::ObString origin_table_name_;
common::ObString new_table_name_;
uint64_t origin_table_id_; // only used in work thread, no need add to SERIALIZE now
};
struct ObRenameTableArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObRenameTableArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), rename_table_items_()
{}
bool is_valid() const;
DECLARE_TO_STRING;
uint64_t tenant_id_;
common::ObSArray<ObRenameTableItem> rename_table_items_;
};
struct ObAlterTableArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
enum ModifiableTableColumns {
AUTO_INCREMENT = 1,
BLOCK_SIZE,
CHARSET_TYPE,
COLLATION_TYPE,
COMPRESS_METHOD,
COMMENT,
EXPIRE_INFO,
PRIMARY_ZONE,
REPLICA_NUM,
TABLET_SIZE,
PCTFREE,
PROGRESSIVE_MERGE_NUM,
TABLE_NAME,
TABLEGROUP_NAME,
SEQUENCE_COLUMN_ID,
USE_BLOOM_FILTER,
READ_ONLY,
LOCALITY,
SESSION_ID,
SESSION_ACTIVE_TIME,
STORE_FORMAT,
DUPLICATE_SCOPE,
ENABLE_ROW_MOVEMENT,
PROGRESSIVE_MERGE_ROUND,
STORAGE_FORMAT_VERSION,
FORCE_LOCALITY,
TABLE_MODE,
TABLE_DOP,
MAX_OPTION = 1000
};
enum AlterPartitionType {
ADD_PARTITION = -1,
DROP_PARTITION,
PARTITIONED_TABLE,
PARTITIONED_PARTITION,
REORGANIZE_PARTITION,
SPLIT_PARTITION,
TRUNCATE_PARTITION,
ADD_SUB_PARTITION,
DROP_SUB_PARTITION,
TRUNCATE_SUB_PARTITION,
NO_OPERATION = 1000
};
enum AlterConstraintType {
ADD_CONSTRAINT = -1,
DROP_CONSTRAINT,
ALTER_CONSTRAINT_STATE,
CONSTRAINT_NO_OPERATION = 1000
};
ObAlterTableArg()
: is_alter_columns_(false),
is_alter_indexs_(false),
is_alter_options_(false),
is_alter_partitions_(false),
session_id_(common::OB_INVALID_ID),
alter_part_type_(NO_OPERATION),
alter_constraint_type_(CONSTRAINT_NO_OPERATION),
index_arg_list_(),
foreign_key_arg_list_(),
alter_table_schema_(),
// To be precise, this should be called create_partition_mode?
create_mode_(OB_CREATE_TABLE_MODE_STRICT),
tz_info_wrap_(),
is_inner_(false),
nls_formats_{},
skip_sys_table_check_(false),
is_update_global_indexes_(false)
{}
~ObAlterTableArg()
{
for (int64_t i = 0; i < index_arg_list_.size(); ++i) {
ObIndexArg* index_arg = index_arg_list_.at(i);
if (OB_NOT_NULL(index_arg)) {
index_arg->~ObIndexArg();
}
}
allocator_.clear();
}
bool is_valid() const;
bool has_rename_action() const
{
return alter_table_schema_.alter_option_bitset_.has_member(TABLE_NAME);
}
bool need_progressive_merge() const
{
return alter_table_schema_.alter_option_bitset_.has_member(BLOCK_SIZE) ||
alter_table_schema_.alter_option_bitset_.has_member(COMPRESS_METHOD) ||
alter_table_schema_.alter_option_bitset_.has_member(PCTFREE) ||
alter_table_schema_.alter_option_bitset_.has_member(STORE_FORMAT) ||
alter_table_schema_.alter_option_bitset_.has_member(STORAGE_FORMAT_VERSION) ||
alter_table_schema_.alter_option_bitset_.has_member(PROGRESSIVE_MERGE_ROUND);
}
virtual bool is_allow_when_disable_ddl() const;
virtual bool is_allow_when_upgrade() const;
bool is_refresh_sess_active_time() const;
inline void set_tz_info_map(const common::ObTZInfoMap* tz_info_map)
{
tz_info_wrap_.set_tz_info_map(tz_info_map);
tz_info_.set_tz_info_map(tz_info_map);
}
int set_nls_formats(const common::ObString* nls_formats);
TO_STRING_KV(K_(is_alter_columns), K_(is_alter_indexs), K_(is_alter_options), K_(session_id), K_(index_arg_list),
K_(alter_table_schema), K_(is_inner), "nls_formats",
common::ObArrayWrap<common::ObString>(nls_formats_, common::ObNLSFormatEnum::NLS_MAX));
bool is_alter_columns_;
bool is_alter_indexs_;
bool is_alter_options_;
bool is_alter_partitions_;
uint64_t session_id_; // Only used to update the last active time of the temporary table. At this time, the session
// id used to create the temporary table is passed in
AlterPartitionType alter_part_type_;
AlterConstraintType alter_constraint_type_;
common::ObSArray<ObIndexArg*> index_arg_list_;
common::ObSArray<ObCreateForeignKeyArg> foreign_key_arg_list_;
share::schema::AlterTableSchema alter_table_schema_;
common::ObArenaAllocator allocator_;
common::ObTimeZoneInfo tz_info_; // unused now
ObCreateTableMode create_mode_;
common::ObTimeZoneInfoWrap tz_info_wrap_;
bool is_inner_;
common::ObString nls_formats_[common::ObNLSFormatEnum::NLS_MAX];
bool skip_sys_table_check_;
bool is_update_global_indexes_;
int serialize_index_args(char* buf, const int64_t data_len, int64_t& pos) const;
int deserialize_index_args(const char* buf, const int64_t data_len, int64_t& pos);
int64_t get_index_args_serialize_size() const;
};
struct ObTableItem {
OB_UNIS_VERSION(1);
public:
ObTableItem()
: mode_(common::OB_NAME_CASE_INVALID), // for compare
database_name_(),
table_name_()
{}
bool operator==(const ObTableItem& table_item) const;
inline uint64_t hash(uint64_t seed = 0) const;
void reset()
{
mode_ = common::OB_NAME_CASE_INVALID;
database_name_.reset();
table_name_.reset();
}
DECLARE_TO_STRING;
common::ObNameCaseMode mode_;
common::ObString database_name_;
common::ObString table_name_;
};
inline uint64_t ObTableItem::hash(uint64_t seed) const
{
uint64_t val = seed;
if (!database_name_.empty() && !table_name_.empty()) {
val = common::murmurhash(database_name_.ptr(), database_name_.length(), val);
val = common::murmurhash(table_name_.ptr(), table_name_.length(), val);
}
return val;
}
struct ObDropTableArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropTableArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
session_id_(common::OB_INVALID_ID),
sess_create_time_(0),
table_type_(share::schema::MAX_TABLE_TYPE),
tables_(),
if_exist_(false),
to_recyclebin_(false)
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
DECLARE_TO_STRING;
uint64_t tenant_id_;
uint64_t session_id_; // Pass in session id when deleting table
int64_t sess_create_time_; // When deleting oracle temporary table data, pass in the creation time of sess
share::schema::ObTableType table_type_;
common::ObSArray<ObTableItem> tables_;
bool if_exist_;
bool to_recyclebin_;
};
struct ObOptimizeTableArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObOptimizeTableArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), tables_()
{}
DECLARE_TO_STRING;
bool is_valid() const;
uint64_t tenant_id_;
common::ObSArray<ObTableItem> tables_;
};
struct ObOptimizeTenantArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObOptimizeTenantArg() : ObDDLArg(), tenant_name_()
{}
bool is_valid() const;
DECLARE_TO_STRING;
common::ObString tenant_name_;
};
struct ObOptimizeAllArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObOptimizeAllArg() : ObDDLArg()
{}
bool is_valid() const
{
return true;
}
DECLARE_TO_STRING;
};
struct ObColumnSortItem {
OB_UNIS_VERSION(1);
public:
ObColumnSortItem()
: column_name_(),
prefix_len_(0),
order_type_(common::ObOrderType::ASC),
column_id_(common::OB_INVALID_ID),
is_func_index_(false)
{}
void reset()
{
column_name_.reset();
prefix_len_ = 0;
order_type_ = common::ObOrderType::ASC;
column_id_ = common::OB_INVALID_ID;
is_func_index_ = false;
}
inline uint64_t get_column_id() const
{
return column_id_;
}
DECLARE_TO_STRING;
common::ObString column_name_;
int32_t prefix_len_;
common::ObOrderType order_type_;
uint64_t column_id_;
bool is_func_index_; // Whether the mark is a function index, the default is false.
};
struct ObTableOption {
OB_UNIS_VERSION_V(1);
public:
ObTableOption()
: block_size_(-1),
replica_num_(0),
index_status_(share::schema::INDEX_STATUS_UNAVAILABLE),
use_bloom_filter_(false),
compress_method_("none"),
comment_(),
progressive_merge_num_(common::OB_DEFAULT_PROGRESSIVE_MERGE_NUM),
primary_zone_(),
row_store_type_(common::MAX_ROW_STORE),
store_format_(common::OB_STORE_FORMAT_INVALID),
progressive_merge_round_(0),
storage_format_version_(common::OB_STORAGE_FORMAT_VERSION_INVALID)
{}
virtual void reset()
{
block_size_ = common::OB_DEFAULT_SSTABLE_BLOCK_SIZE;
replica_num_ = -1;
index_status_ = share::schema::INDEX_STATUS_UNAVAILABLE;
use_bloom_filter_ = false;
compress_method_ = common::ObString::make_string("none");
comment_.reset();
tablegroup_name_.reset();
progressive_merge_num_ = common::OB_DEFAULT_PROGRESSIVE_MERGE_NUM;
primary_zone_.reset();
row_store_type_ = common::MAX_ROW_STORE;
store_format_ = common::OB_STORE_FORMAT_INVALID;
progressive_merge_round_ = 0;
storage_format_version_ = common::OB_STORAGE_FORMAT_VERSION_INVALID;
}
bool is_valid() const;
DECLARE_TO_STRING;
int64_t block_size_;
int64_t replica_num_;
share::schema::ObIndexStatus index_status_;
bool use_bloom_filter_;
common::ObString compress_method_;
common::ObString comment_;
common::ObString tablegroup_name_;
int64_t progressive_merge_num_;
common::ObString primary_zone_;
common::ObRowStoreType row_store_type_;
common::ObStoreFormatType store_format_;
int64_t progressive_merge_round_;
int64_t storage_format_version_;
};
struct ObIndexOption : public ObTableOption {
OB_UNIS_VERSION(1);
public:
ObIndexOption()
: ObTableOption(),
parser_name_(common::OB_DEFAULT_FULLTEXT_PARSER_NAME),
index_attributes_set_(common::OB_DEFAULT_INDEX_ATTRIBUTES_SET)
{}
bool is_valid() const;
void reset()
{
ObTableOption::reset();
parser_name_ = common::ObString::make_string(common::OB_DEFAULT_FULLTEXT_PARSER_NAME);
}
DECLARE_TO_STRING;
common::ObString parser_name_;
uint64_t index_attributes_set_; // flags, one bit for one attribute
};
struct ObCreateIndexArg : public ObIndexArg {
OB_UNIS_VERSION_V(1);
public:
ObCreateIndexArg()
: index_type_(share::schema::INDEX_TYPE_IS_NOT),
index_columns_(),
store_columns_(),
hidden_store_columns_(),
fulltext_columns_(),
index_option_(),
create_mode_(OB_CREATE_TABLE_MODE_STRICT),
data_table_id_(common::OB_INVALID_ID),
index_table_id_(common::OB_INVALID_ID),
if_not_exist_(false),
with_rowid_(false),
index_schema_(),
is_inner_(false),
nls_date_format_(),
nls_timestamp_format_(),
nls_timestamp_tz_format_(),
sql_mode_(0)
{
index_action_type_ = ADD_INDEX;
index_using_type_ = share::schema::USING_BTREE;
}
virtual ~ObCreateIndexArg()
{}
void reset()
{
ObIndexArg::reset();
index_action_type_ = ADD_INDEX;
index_type_ = share::schema::INDEX_TYPE_IS_NOT;
index_columns_.reset();
store_columns_.reset();
hidden_store_columns_.reset();
fulltext_columns_.reset();
index_option_.reset();
index_using_type_ = share::schema::USING_BTREE;
data_table_id_ = common::OB_INVALID_ID;
index_table_id_ = common::OB_INVALID_ID;
if_not_exist_ = false;
with_rowid_ = false;
index_schema_.reset();
is_inner_ = false;
nls_date_format_.reset();
nls_timestamp_format_.reset();
nls_timestamp_tz_format_.reset();
sql_mode_ = 0;
}
bool is_valid() const;
int assign(const ObCreateIndexArg& other)
{
int ret = common::OB_SUCCESS;
if (OB_FAIL(ObIndexArg::assign(other))) {
SHARE_LOG(WARN, "fail to assign base", K(ret));
} else if (OB_FAIL(index_columns_.assign(other.index_columns_))) {
SHARE_LOG(WARN, "fail to assign index columns", K(ret));
} else if (OB_FAIL(store_columns_.assign(other.store_columns_))) {
SHARE_LOG(WARN, "fail to assign store columns", K(ret));
} else if (OB_FAIL(hidden_store_columns_.assign(other.hidden_store_columns_))) {
SHARE_LOG(WARN, "fail to assign hidden store columns", K(ret));
} else if (OB_FAIL(fulltext_columns_.assign(other.fulltext_columns_))) {
SHARE_LOG(WARN, "fail to assign fulltext columns", K(ret));
} else if (OB_FAIL(index_schema_.assign(other.index_schema_))) {
SHARE_LOG(WARN, "fail to assign index schema", K(ret));
} else {
index_type_ = other.index_type_;
index_option_ = other.index_option_;
index_using_type_ = other.index_using_type_;
create_mode_ = other.create_mode_;
data_table_id_ = other.data_table_id_;
index_table_id_ = other.index_table_id_;
if_not_exist_ = other.if_not_exist_;
with_rowid_ = other.with_rowid_;
is_inner_ = other.is_inner_;
nls_date_format_ = other.nls_date_format_;
nls_timestamp_format_ = other.nls_timestamp_format_;
nls_timestamp_tz_format_ = other.nls_timestamp_tz_format_;
sql_mode_ = other.sql_mode_;
}
return ret;
}
inline bool is_unique_primary_index() const
{
return share::schema::INDEX_TYPE_UNIQUE_LOCAL == index_type_ ||
share::schema::INDEX_TYPE_UNIQUE_GLOBAL == index_type_ ||
share::schema::INDEX_TYPE_UNIQUE_GLOBAL_LOCAL_STORAGE == index_type_ ||
share::schema::INDEX_TYPE_PRIMARY == index_type_;
}
DECLARE_VIRTUAL_TO_STRING;
share::schema::ObIndexType index_type_;
common::ObSEArray<ObColumnSortItem, common::OB_PREALLOCATED_NUM> index_columns_;
common::ObSEArray<common::ObString, common::OB_PREALLOCATED_NUM> store_columns_;
common::ObSEArray<common::ObString, common::OB_PREALLOCATED_NUM> hidden_store_columns_;
common::ObSEArray<common::ObString, common::OB_PREALLOCATED_NUM> fulltext_columns_;
ObIndexOption index_option_;
share::schema::ObIndexUsingType index_using_type_;
ObCreateTableMode create_mode_;
uint64_t data_table_id_;
uint64_t index_table_id_; // Data_table_id and index_table_id will be given in SQL during recovery
bool if_not_exist_;
bool with_rowid_;
share::schema::ObTableSchema index_schema_; // Index table schema
bool is_inner_;
// Nls_xx_format is required when creating a functional index
common::ObString nls_date_format_;
common::ObString nls_timestamp_format_;
common::ObString nls_timestamp_tz_format_;
ObSQLMode sql_mode_;
};
struct ObCreateForeignKeyArg : public ObIndexArg {
OB_UNIS_VERSION_V(1);
public:
ObCreateForeignKeyArg()
: ObIndexArg(),
parent_database_(),
parent_table_(),
child_columns_(),
parent_columns_(),
update_action_(share::schema::ACTION_INVALID),
delete_action_(share::schema::ACTION_INVALID),
foreign_key_name_(),
enable_flag_(true),
is_modify_enable_flag_(false),
ref_cst_type_(),
ref_cst_id_(),
validate_flag_(true),
is_modify_validate_flag_(false),
rely_flag_(false),
is_modify_rely_flag_(false),
is_modify_fk_state_(false)
{}
virtual ~ObCreateForeignKeyArg()
{}
void reset()
{
ObIndexArg::reset();
parent_database_.reset();
parent_table_.reset();
child_columns_.reset();
parent_columns_.reset();
update_action_ = share::schema::ACTION_INVALID;
delete_action_ = share::schema::ACTION_INVALID;
foreign_key_name_.reset();
enable_flag_ = true;
is_modify_enable_flag_ = false;
ref_cst_type_ = share::schema::CONSTRAINT_TYPE_INVALID;
ref_cst_id_ = common::OB_INVALID_ID;
validate_flag_ = true;
is_modify_validate_flag_ = false;
rely_flag_ = false;
is_modify_rely_flag_ = false;
is_modify_fk_state_ = false;
}
bool is_valid() const;
DECLARE_VIRTUAL_TO_STRING;
public:
common::ObString parent_database_;
common::ObString parent_table_;
common::ObSEArray<common::ObString, 8> child_columns_;
common::ObSEArray<common::ObString, 8> parent_columns_;
share::schema::ObReferenceAction update_action_;
share::schema::ObReferenceAction delete_action_;
common::ObString foreign_key_name_;
bool enable_flag_;
bool is_modify_enable_flag_;
share::schema::ObConstraintType ref_cst_type_;
uint64_t ref_cst_id_;
bool validate_flag_;
bool is_modify_validate_flag_;
bool rely_flag_;
bool is_modify_rely_flag_;
bool is_modify_fk_state_;
};
struct ObDropForeignKeyArg : public ObIndexArg {
OB_UNIS_VERSION_V(1);
public:
ObDropForeignKeyArg() : ObIndexArg(), foreign_key_name_()
{
index_action_type_ = DROP_FOREIGN_KEY;
}
virtual ~ObDropForeignKeyArg()
{}
void reset()
{
ObIndexArg::reset();
foreign_key_name_.reset();
}
bool is_valid() const;
DECLARE_VIRTUAL_TO_STRING;
public:
common::ObString foreign_key_name_;
};
struct ObFlashBackTableFromRecyclebinArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObFlashBackTableFromRecyclebinArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
origin_db_name_(),
origin_table_name_(),
new_db_name_(),
new_table_name_(),
origin_table_id_(common::OB_INVALID_ID)
{}
bool is_valid() const;
uint64_t tenant_id_;
common::ObString origin_db_name_;
common::ObString origin_table_name_;
common::ObString new_db_name_;
common::ObString new_table_name_;
uint64_t origin_table_id_; // only used in work thread, no need add to SERIALIZE now
TO_STRING_KV(K_(tenant_id), K_(origin_db_name), K_(origin_table_name), K_(new_db_name), K_(new_table_name),
K_(origin_table_id));
};
struct ObFlashBackIndexArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObFlashBackIndexArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
origin_table_name_(),
new_db_name_(),
new_table_name_(),
origin_table_id_(common::OB_INVALID_ID)
{}
bool is_valid() const;
uint64_t tenant_id_;
common::ObString origin_table_name_;
common::ObString new_db_name_;
common::ObString new_table_name_;
uint64_t origin_table_id_; // only used in work thread, no need add to SERIALIZE now
TO_STRING_KV(K_(tenant_id), K_(origin_table_name), K_(new_db_name), K_(new_table_name), K_(origin_table_id));
};
struct ObFlashBackDatabaseArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObFlashBackDatabaseArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), origin_db_name_(), new_db_name_()
{}
bool is_valid() const;
uint64_t tenant_id_;
common::ObString origin_db_name_;
common::ObString new_db_name_;
TO_STRING_KV(K_(tenant_id), K_(origin_db_name), K_(new_db_name));
};
struct ObFlashBackTenantArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObFlashBackTenantArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), origin_tenant_name_(), new_tenant_name_()
{}
bool is_valid() const;
uint64_t tenant_id_;
common::ObString origin_tenant_name_;
common::ObString new_tenant_name_;
TO_STRING_KV(K_(tenant_id), K_(origin_tenant_name), K_(new_tenant_name));
};
struct ObPurgeTableArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObPurgeTableArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), table_name_()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
uint64_t tenant_id_;
common::ObString table_name_;
TO_STRING_KV(K_(tenant_id), K_(table_name));
};
struct ObPurgeIndexArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObPurgeIndexArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), table_name_(), table_id_(common::OB_INVALID_ID)
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
uint64_t tenant_id_;
common::ObString table_name_;
uint64_t table_id_; // only used in work thread, no need add to SERIALIZE now
TO_STRING_KV(K_(tenant_id), K_(table_name), K_(table_id));
};
struct ObPurgeDatabaseArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObPurgeDatabaseArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), db_name_()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
uint64_t tenant_id_;
common::ObString db_name_;
TO_STRING_KV(K_(tenant_id), K_(db_name));
};
struct ObPurgeTenantArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObPurgeTenantArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), tenant_name_()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
uint64_t tenant_id_;
common::ObString tenant_name_;
TO_STRING_KV(K_(tenant_id), K_(tenant_name));
};
struct ObPurgeRecycleBinArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
static const int DEFAULT_PURGE_EACH_TIME = 10;
ObPurgeRecycleBinArg()
: ObDDLArg(), tenant_id_(common::OB_INVALID_ID), purge_num_(0), expire_time_(0), auto_purge_(false)
{}
virtual ~ObPurgeRecycleBinArg()
{}
bool is_valid() const;
int assign(const ObPurgeRecycleBinArg& other);
virtual bool is_allow_when_upgrade() const
{
return true;
}
uint64_t tenant_id_;
int64_t purge_num_;
int64_t expire_time_;
bool auto_purge_;
TO_STRING_KV(K_(tenant_id), K_(purge_num), K_(expire_time), K_(auto_purge));
};
/*
* 1. When pg_key_ and partition_key_ are equal, the entity partition needs to be created.
* 1.1 When both partition_key and pg_key are filled in as the partition key of a table,
* the physical partition of the standalone table is created
* 1.2 When partition_key and pg_key are both filled in as a tg pg_key, a pg physical partition is created
* 1.3 In both cases 1.1 and 1.2, the entity partition is created, and the is_binding() method is false
* 2. When pg_key_ and partition_key_ are not equal, there is no need to create an entity partition
* 2.1 At this time, the partition partition of a table is bound to a physical partition of pg
* 2.2 In the case of 2.1, the partition of the table is helped by the physical partition of the pg,
* and the is_binding() method returns true
*/
struct ObCreatePartitionArg {
OB_UNIS_VERSION(1);
public:
ObCreatePartitionArg()
{
reset();
}
~ObCreatePartitionArg()
{}
inline void reset();
bool is_valid() const;
bool is_binding() const
{
return pg_key_ != partition_key_;
}
int check_need_create_sstable(bool& need_create_sstable) const;
int set_memstore_percent(const int64_t mp)
{
return replica_property_.set_memstore_percent(mp);
}
int64_t get_memstore_percent() const
{
return replica_property_.get_memstore_percent();
}
// Meaning of pg_key_ / partition_key_ value:
// (1) partition/partition -> craete_partition
// (2) pg / partition -> add partition to pg
// (3) pg / pg -> create pg
bool is_create_pg() const
{
return pg_key_.is_pg() && pg_key_.is_valid() && pg_key_ == partition_key_;
}
bool is_create_pg_partition() const
{
return pg_key_.is_pg() && pg_key_.is_valid() && partition_key_.is_valid() && pg_key_ != partition_key_;
}
bool is_standby_restore() const
{
return share::REPLICA_RESTORE_STANDBY == restore_;
}
int deep_copy(const ObCreatePartitionArg& arg);
int assign(const ObCreatePartitionArg& other);
DECLARE_TO_STRING;
common::ObZone zone_;
common::ObPartitionKey partition_key_;
int64_t schema_version_;
int64_t memstore_version_;
int64_t replica_num_; // The number of versatile copies
common::ObMemberList member_list_;
common::ObAddr leader_;
int64_t lease_start_;
int64_t logonly_replica_num_; // Number of journal copies
int64_t backup_replica_num_; // Number of backup copies
int64_t readonly_replica_num_; // Number of read-only replicas
common::ObReplicaType replica_type_; // Copy type
int64_t last_submit_timestamp_; // next log id timestamp
int64_t restore_; // If it is not 0, it means that it needs to be restored
common::ObSArray<share::schema::ObTableSchema> table_schemas_;
common::ObPartitionKey source_partition_key_; // It makes sense when dismantling tables and splitting to build
// partiton (obsolete)
int64_t frozen_timestamp_; // It is a pair with memstore_version, indicating the snapshot corresponding to the
// version;
int64_t non_paxos_replica_num_;
uint64_t last_replay_log_id_; // Only used for force_create_sys_table, the default value is 0
common::ObPGKey pg_key_;
common::ObReplicaProperty replica_property_;
share::ObSplitPartition split_info_; // It makes sense when dismantling tables and splitting to build partiton
bool ignore_member_list_; // Used to mark whether the partition needs to be created repeatedly, currently only used
// in the creation of replicas synchronized from the standby database
private:
DISALLOW_COPY_AND_ASSIGN(ObCreatePartitionArg);
};
struct ObCreatePartitionStorageArg {
OB_UNIS_VERSION(1);
public:
ObCreatePartitionStorageArg()
{
reset();
}
~ObCreatePartitionStorageArg()
{}
inline void reset();
bool is_valid() const;
DECLARE_TO_STRING;
common::ObPGKey rgkey_;
common::ObPartitionKey partition_key_;
int64_t schema_version_;
int64_t memstore_version_;
int64_t last_submit_timestamp_; // next log id timestamp
int64_t restore_; // If it is not 0, it means that it needs to be restored
common::ObSArray<share::schema::ObTableSchema> table_schemas_;
};
struct ObCreatePartitionBatchArg {
OB_UNIS_VERSION(1);
public:
ObCreatePartitionBatchArg()
{
reset();
}
~ObCreatePartitionBatchArg()
{}
bool is_valid() const;
inline void reset();
int assign(const ObCreatePartitionBatchArg& other);
void reuse()
{
args_.reuse();
}
DECLARE_TO_STRING;
common::ObSArray<ObCreatePartitionArg> args_;
private:
DISALLOW_COPY_AND_ASSIGN(ObCreatePartitionBatchArg);
};
struct ObSetMemberListArg {
OB_UNIS_VERSION(1);
public:
ObSetMemberListArg() : key_(), member_list_(), quorum_(0), lease_start_(0), leader_()
{}
~ObSetMemberListArg()
{}
bool is_valid() const;
void reset();
int assign(const ObSetMemberListArg& other);
int 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 = 0,
const common::ObAddr& leader = common::ObAddr());
DECLARE_TO_STRING;
common::ObPartitionKey key_;
common::ObMemberList member_list_;
int64_t quorum_;
int64_t lease_start_;
common::ObAddr leader_;
private:
DISALLOW_COPY_AND_ASSIGN(ObSetMemberListArg);
};
struct ObSetMemberListBatchArg {
OB_UNIS_VERSION(1);
public:
ObSetMemberListBatchArg()
{
reset();
}
~ObSetMemberListBatchArg()
{}
bool is_valid() const;
void reset();
int assign(const ObSetMemberListBatchArg& other);
int add_arg(const common::ObPartitionKey& key, const common::ObMemberList& member_list);
bool reach_concurrency_limit() const
{
return args_.count() >= MAX_COUNT;
}
bool has_task() const
{
return args_.count() > 0;
}
DECLARE_TO_STRING;
common::ObSArray<ObSetMemberListArg> args_;
int64_t timestamp_; // Used to verify asynchronous rpc return packets
private:
DISALLOW_COPY_AND_ASSIGN(ObSetMemberListBatchArg);
};
struct ObCreatePartitionBatchRes {
OB_UNIS_VERSION(1);
public:
ObCreatePartitionBatchRes() : ret_list_(), timestamp_(common::OB_INVALID_TIMESTAMP)
{}
~ObCreatePartitionBatchRes()
{}
inline void reset();
int assign(const ObCreatePartitionBatchRes& other);
inline void reuse();
DECLARE_TO_STRING;
// response includes all rets
common::ObSArray<int> ret_list_;
int64_t timestamp_;
private:
DISALLOW_COPY_AND_ASSIGN(ObCreatePartitionBatchRes);
};
struct ObGetMinSSTableSchemaVersionRes {
OB_UNIS_VERSION(1);
public:
ObGetMinSSTableSchemaVersionRes() : ret_list_()
{}
~ObGetMinSSTableSchemaVersionRes()
{
reset();
}
inline void reset()
{
ret_list_.reset();
}
inline void reuse()
{
ret_list_.reuse();
}
TO_STRING_KV(K_(ret_list));
// response includes all rets
common::ObSArray<int64_t> ret_list_;
private:
DISALLOW_COPY_AND_ASSIGN(ObGetMinSSTableSchemaVersionRes);
};
struct ObCheckUniqueIndexRequestArg {
OB_UNIS_VERSION(1);
public:
ObCheckUniqueIndexRequestArg()
{
reset();
}
~ObCheckUniqueIndexRequestArg() = default;
bool is_valid() const;
void reset();
TO_STRING_KV(K_(pkey), K_(index_id), K_(schema_version));
public:
common::ObPartitionKey pkey_;
uint64_t index_id_;
int64_t schema_version_;
private:
DISALLOW_COPY_AND_ASSIGN(ObCheckUniqueIndexRequestArg);
};
struct ObCheckUniqueIndexResponseArg {
OB_UNIS_VERSION(1);
public:
ObCheckUniqueIndexResponseArg()
{
reset();
}
~ObCheckUniqueIndexResponseArg() = default;
bool is_valid() const;
void reset();
TO_STRING_KV(K_(pkey), K_(index_id), K_(ret_code), K_(is_valid));
public:
common::ObPartitionKey pkey_;
uint64_t index_id_;
int ret_code_;
bool is_valid_;
private:
DISALLOW_COPY_AND_ASSIGN(ObCheckUniqueIndexResponseArg);
};
struct ObCalcColumnChecksumRequestArg {
OB_UNIS_VERSION(1);
public:
ObCalcColumnChecksumRequestArg()
{
reset();
}
~ObCalcColumnChecksumRequestArg() = default;
bool is_valid() const;
void reset();
TO_STRING_KV(K_(pkey), K_(index_id), K_(schema_version), K_(execution_id), K_(snapshot_version));
public:
common::ObPartitionKey pkey_;
uint64_t index_id_;
int64_t schema_version_;
uint64_t execution_id_;
int64_t snapshot_version_;
private:
DISALLOW_COPY_AND_ASSIGN(ObCalcColumnChecksumRequestArg);
};
struct ObCalcColumnChecksumResponseArg {
OB_UNIS_VERSION(1);
public:
ObCalcColumnChecksumResponseArg()
{
reset();
}
~ObCalcColumnChecksumResponseArg() = default;
bool is_valid() const;
void reset();
TO_STRING_KV(K_(pkey), K_(index_id), K_(ret_code));
public:
common::ObPartitionKey pkey_;
uint64_t index_id_;
int ret_code_;
private:
DISALLOW_COPY_AND_ASSIGN(ObCalcColumnChecksumResponseArg);
};
struct ObCheckSingleReplicaMajorSSTableExistArg {
OB_UNIS_VERSION(1);
public:
ObCheckSingleReplicaMajorSSTableExistArg()
{
reset();
}
~ObCheckSingleReplicaMajorSSTableExistArg() = default;
bool is_valid() const;
void reset();
TO_STRING_KV(K_(pkey), K_(index_id));
common::ObPartitionKey pkey_;
uint64_t index_id_;
private:
DISALLOW_COPY_AND_ASSIGN(ObCheckSingleReplicaMajorSSTableExistArg);
};
struct ObCheckSingleReplicaMajorSSTableExistResult {
OB_UNIS_VERSION(1);
public:
ObCheckSingleReplicaMajorSSTableExistResult()
{
reset();
}
~ObCheckSingleReplicaMajorSSTableExistResult() = default;
void reset();
TO_STRING_KV(K_(timestamp));
int64_t timestamp_;
};
struct ObCheckAllReplicaMajorSSTableExistArg {
OB_UNIS_VERSION(1);
public:
ObCheckAllReplicaMajorSSTableExistArg()
{
reset();
}
~ObCheckAllReplicaMajorSSTableExistArg() = default;
bool is_valid() const;
void reset();
TO_STRING_KV(K_(pkey), K_(index_id));
common::ObPartitionKey pkey_;
uint64_t index_id_;
private:
DISALLOW_COPY_AND_ASSIGN(ObCheckAllReplicaMajorSSTableExistArg);
};
struct ObCheckAllReplicaMajorSSTableExistResult {
OB_UNIS_VERSION(1);
public:
ObCheckAllReplicaMajorSSTableExistResult()
{
reset();
}
~ObCheckAllReplicaMajorSSTableExistResult() = default;
void reset();
TO_STRING_KV(K_(max_timestamp));
int64_t max_timestamp_;
};
// TODO(liuyue):delete these two rpc
struct ObMigrateArg {
OB_UNIS_VERSION(1);
public:
ObMigrateArg() : keep_src_(false)
{}
bool is_valid() const
{
return partition_key_.is_valid() && src_.is_valid() && dst_.is_valid();
}
DECLARE_TO_STRING;
common::ObPartitionKey partition_key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
common::ObReplicaMember replace_;
bool keep_src_;
};
//----Structs for partition online/offline----
struct ObCopySSTableArg {
OB_UNIS_VERSION(1);
public:
ObCopySSTableArg()
: key_(),
src_(),
dst_(),
task_id_(),
type_(common::OB_COPY_SSTABLE_TYPE_INVALID),
index_table_id_(common::OB_INVALID_ID),
priority_(common::ObReplicaOpPriority::PRIO_LOW),
cluster_id_(common::OB_INVALID_ID),
skip_change_member_list_(false),
switch_epoch_(common::OB_INVALID_VERSION)
{}
bool is_valid() const
{
bool bret = false;
bret = key_.is_valid() && src_.is_valid() && dst_.is_valid() && common::OB_COPY_SSTABLE_TYPE_INVALID != type_ &&
(common::OB_COPY_SSTABLE_TYPE_LOCAL_INDEX != type_ || common::OB_INVALID_ID != index_table_id_);
if (bret && !IS_CLUSTER_VERSION_BEFORE_2200) {
bret = (common::OB_INVALID_VERSION != switch_epoch_);
}
return bret;
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(cluster_id), K_(task_id), K_(type), K_(index_table_id), K_(priority),
K(skip_change_member_list_), K(switch_epoch_));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
share::ObTaskId task_id_;
common::ObCopySSTableType type_;
uint64_t index_table_id_;
common::ObReplicaOpPriority priority_;
int64_t cluster_id_;
bool skip_change_member_list_;
int64_t switch_epoch_;
};
struct ObCopySSTableRes {
OB_UNIS_VERSION(1);
public:
ObCopySSTableRes()
: key_(),
src_(),
dst_(),
data_src_(),
type_(common::OB_COPY_SSTABLE_TYPE_INVALID),
index_table_id_(common::OB_INVALID_ID),
result_(0)
{}
bool is_valid() const
{
return key_.is_valid() && src_.is_valid() && dst_.is_valid() && common::OB_COPY_SSTABLE_TYPE_INVALID != type_ &&
(common::OB_COPY_SSTABLE_TYPE_LOCAL_INDEX != type_ || common::OB_INVALID_ID != index_table_id_);
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(data_src), K_(result), K_(type), K_(index_table_id));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
common::ObReplicaMember data_src_;
common::ObCopySSTableType type_;
uint64_t index_table_id_;
int64_t result_;
};
struct ObAddReplicaArg {
OB_UNIS_VERSION(1);
public:
ObAddReplicaArg()
: key_(),
src_(),
dst_(),
quorum_(0),
reserved_modify_quorum_type_(common::MAX_MODIFY_QUORUM_TYPE),
task_id_(),
priority_(common::ObReplicaOpPriority::PRIO_HIGH),
cluster_id_(common::OB_INVALID_ID),
skip_change_member_list_(false),
switch_epoch_(common::OB_INVALID_VERSION),
pg_file_id_(common::OB_INVALID_DATA_FILE_ID)
{}
bool is_valid() const
{
bool bret = false;
bret = key_.is_valid() && src_.is_valid() && dst_.is_valid() && src_.get_server() != dst_.get_server() &&
is_replica_op_priority_valid(priority_);
if (bret && !IS_CLUSTER_VERSION_BEFORE_2200) {
bret = (common::OB_INVALID_VERSION != switch_epoch_);
}
return bret;
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(quorum), K_(reserved_modify_quorum_type), K(task_id_), K_(priority),
K(cluster_id_), K_(skip_change_member_list), K_(switch_epoch), K_(pg_file_id));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
int64_t quorum_;
common::ObModifyQuorumType reserved_modify_quorum_type_; // unused
share::ObTaskId task_id_;
common::ObReplicaOpPriority priority_;
int64_t cluster_id_;
bool skip_change_member_list_;
int64_t switch_epoch_;
int64_t pg_file_id_;
};
struct ObAddReplicaRes {
OB_UNIS_VERSION(2);
public:
ObAddReplicaRes() : key_(), src_(), dst_(), data_src_(), quorum_(0), result_(0)
{}
bool is_valid() const
{
return key_.is_valid() && src_.is_valid() && dst_.is_valid();
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(quorum), K_(data_src), K_(result));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
common::ObReplicaMember data_src_;
int64_t quorum_;
int64_t result_;
};
struct ObRebuildReplicaArg {
OB_UNIS_VERSION(1);
public:
ObRebuildReplicaArg()
: key_(),
src_(),
dst_(),
task_id_(),
priority_(common::ObReplicaOpPriority::PRIO_HIGH),
skip_change_member_list_(false),
switch_epoch_(common::OB_INVALID_VERSION)
{}
bool 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 = (common::OB_INVALID_VERSION != switch_epoch_);
}
return bret;
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(task_id), K_(priority), K_(skip_change_member_list), K_(switch_epoch));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
share::ObTaskId task_id_;
common::ObReplicaOpPriority priority_;
bool skip_change_member_list_;
int64_t switch_epoch_;
};
struct ObRebuildReplicaRes {
OB_UNIS_VERSION(1);
public:
ObRebuildReplicaRes() : key_(), src_(), dst_(), data_src_(), result_(0)
{}
bool is_valid() const
{
return key_.is_valid() && src_.is_valid() && dst_.is_valid();
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(data_src), K_(result));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
common::ObReplicaMember data_src_;
int64_t result_;
};
struct ObRemoveNonPaxosReplicaArg {
OB_UNIS_VERSION(1);
public:
ObRemoveNonPaxosReplicaArg()
: key_(), dst_(), task_id_(), skip_change_member_list_(false), switch_epoch_(common::OB_INVALID_VERSION)
{}
bool is_valid() const
{
bool bret = false;
bret = key_.is_valid() && dst_.is_valid();
if (bret && !IS_CLUSTER_VERSION_BEFORE_2200) {
bret = (common::OB_INVALID_VERSION != switch_epoch_);
}
return bret;
}
TO_STRING_KV(K_(key), K_(dst), K_(task_id), K_(skip_change_member_list), K_(switch_epoch));
common::ObPartitionKey key_;
common::ObReplicaMember dst_;
share::ObTaskId task_id_;
bool skip_change_member_list_;
int64_t switch_epoch_;
};
struct ObRemoveNonPaxosReplicaBatchResult {
public:
ObRemoveNonPaxosReplicaBatchResult() : return_array_()
{}
public:
TO_STRING_KV(K_(return_array));
public:
common::ObSArray<int> return_array_;
OB_UNIS_VERSION(3);
};
struct ObRestoreReplicaArg {
OB_UNIS_VERSION(1);
public:
ObRestoreReplicaArg()
: key_(),
src_(),
dst_(),
task_id_(),
priority_(common::ObReplicaOpPriority::PRIO_LOW),
skip_change_member_list_(false),
switch_epoch_(common::OB_INVALID_VERSION)
{}
bool 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 = (common::OB_INVALID_VERSION != switch_epoch_);
}
return bret;
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(priority), K_(skip_change_member_list), K_(switch_epoch));
common::ObPartitionKey key_;
share::ObRestoreArgs src_;
common::ObReplicaMember dst_;
share::ObTaskId task_id_;
common::ObReplicaOpPriority priority_;
bool skip_change_member_list_;
int64_t switch_epoch_;
};
struct ObRestoreReplicaRes {
OB_UNIS_VERSION(1);
public:
ObRestoreReplicaRes() : key_(), src_(), dst_(), result_(0)
{}
bool is_valid() const
{
return key_.is_valid() && src_.is_valid() && dst_.is_valid();
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(result));
common::ObPartitionKey key_;
share::ObRestoreArgs src_;
common::ObReplicaMember dst_;
int64_t result_;
};
struct ObPhyRestoreReplicaArg {
OB_UNIS_VERSION(1);
public:
ObPhyRestoreReplicaArg();
bool is_valid() const;
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(task_id), K_(priority));
common::ObPartitionKey key_;
share::ObPhysicalRestoreArg src_;
common::ObReplicaMember dst_;
share::ObTaskId task_id_;
common::ObReplicaOpPriority priority_;
};
struct ObPhyRestoreReplicaRes {
OB_UNIS_VERSION(1);
public:
ObPhyRestoreReplicaRes();
bool is_valid() const;
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(result));
common::ObPartitionKey key_;
share::ObPhysicalRestoreArg src_;
common::ObReplicaMember dst_;
int64_t result_;
};
struct ObMigrateReplicaArg {
OB_UNIS_VERSION(1);
public:
ObMigrateReplicaArg()
: key_(),
src_(),
dst_(),
data_source_(),
quorum_(0),
task_id_(),
priority_(common::ObReplicaOpPriority::PRIO_LOW),
skip_change_member_list_(false),
switch_epoch_(common::OB_INVALID_VERSION),
migrate_mode_(MigrateMode::MT_LOCAL_FS_MODE)
{}
bool is_valid() const
{
bool bret = false;
bret = key_.is_valid() && src_.is_valid() && dst_.is_valid() && data_source_.is_valid() &&
src_.get_server() != dst_.get_server() && data_source_.get_server() != dst_.get_server() &&
is_replica_op_priority_valid(priority_) && migrate_mode_ < obrpc::MigrateMode::MT_MAX;
if (bret && !IS_CLUSTER_VERSION_BEFORE_2200) {
bret = (common::OB_INVALID_VERSION != switch_epoch_);
}
return bret;
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(data_source), K_(quorum), K_(task_id), K_(priority),
K_(skip_change_member_list), K_(switch_epoch), K_(migrate_mode));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
common::ObReplicaMember data_source_;
int64_t quorum_;
share::ObTaskId task_id_;
common::ObReplicaOpPriority priority_;
bool skip_change_member_list_;
int64_t switch_epoch_;
MigrateMode migrate_mode_;
};
struct ObMigrateReplicaRes {
OB_UNIS_VERSION(2);
public:
ObMigrateReplicaRes() : key_(), src_(), dst_(), data_src_(), result_(0)
{}
bool is_valid() const
{
return key_.is_valid() && src_.is_valid() && dst_.is_valid();
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(result), K_(data_src));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
common::ObReplicaMember data_src_;
int64_t result_;
};
struct ObChangeReplicaArg {
OB_UNIS_VERSION(1);
public:
ObChangeReplicaArg()
: key_(),
src_(),
dst_(),
quorum_(0),
task_id_(),
priority_(common::ObReplicaOpPriority::PRIO_LOW),
skip_change_member_list_(false),
switch_epoch_(common::OB_INVALID_VERSION)
{}
bool is_valid() const;
TO_STRING_KV(
K_(key), K_(src), K_(dst), K_(quorum), K_(task_id), K_(priority), K_(skip_change_member_list), K_(switch_epoch))
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
int64_t quorum_;
share::ObTaskId task_id_;
common::ObReplicaOpPriority priority_;
bool skip_change_member_list_;
int64_t switch_epoch_;
};
struct ObChangeReplicaRes {
OB_UNIS_VERSION(1);
public:
ObChangeReplicaRes() : key_(), src_(), dst_(), data_src_(), quorum_(0), result_(0)
{}
bool is_valid() const
{
return key_.is_valid() && src_.is_valid() && dst_.is_valid();
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(quorum), K_(data_src), K_(result));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
common::ObReplicaMember data_src_;
int64_t quorum_;
int64_t result_;
};
struct ObBackupArg {
OB_UNIS_VERSION(1);
public:
ObBackupArg()
: key_(),
src_(),
dst_(),
physical_backup_arg_(),
task_id_(),
priority_(common::ObReplicaOpPriority::PRIO_HIGH),
cluster_id_(common::OB_INVALID_ID),
skip_change_member_list_(false),
switch_epoch_(common::OB_INVALID_VERSION)
{}
bool is_valid() const
{
bool bret = false;
bret = key_.is_valid() && src_.is_valid() && dst_.is_valid() && physical_backup_arg_.is_valid();
if (bret && !IS_CLUSTER_VERSION_BEFORE_2200) {
bret = (common::OB_INVALID_VERSION != switch_epoch_);
}
return bret;
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(physical_backup_arg), K_(cluster_id), K_(task_id), K_(priority),
K(skip_change_member_list_), K(switch_epoch_));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
share::ObPhysicalBackupArg physical_backup_arg_;
share::ObTaskId task_id_;
common::ObReplicaOpPriority priority_;
int64_t cluster_id_;
bool skip_change_member_list_;
int64_t switch_epoch_;
};
struct ObValidateArg {
OB_UNIS_VERSION(1);
public:
ObValidateArg() : trace_id_(), dst_(), physical_validate_arg_(), priority_(common::ObReplicaOpPriority::PRIO_LOW)
{}
int assign(const ObValidateArg& arg);
bool is_valid() const
{
return physical_validate_arg_.is_valid();
}
TO_STRING_KV(K_(trace_id), K_(dst), K_(physical_validate_arg), K_(priority));
share::ObTaskId trace_id_;
common::ObReplicaMember dst_;
share::ObPhysicalValidateArg physical_validate_arg_;
common::ObReplicaOpPriority priority_;
};
struct ObStandbyCutDataTaskArg {
OB_UNIS_VERSION(1);
public:
ObStandbyCutDataTaskArg() : dst_(), pkey_()
{}
bool is_valid() const
{
return pkey_.is_valid();
}
TO_STRING_KV(K_(dst), K_(pkey));
common::ObReplicaMember dst_;
common::ObPartitionKey pkey_;
};
struct ObMigrateBackupsetArg {
OB_UNIS_VERSION(1);
public:
ObMigrateBackupsetArg();
int assign(const ObMigrateBackupsetArg& arg);
bool is_valid() const;
TO_STRING_KV(K_(backup_set_id), K_(pg_key), K_(backup_backupset_arg));
uint64_t backup_set_id_;
common::ObPartitionKey pg_key_;
share::ObBackupBackupsetArg backup_backupset_arg_;
};
struct ObBackupRes {
OB_UNIS_VERSION(1);
public:
ObBackupRes() : key_(), src_(), dst_(), data_src_(), physical_backup_arg_(), result_(0)
{}
bool is_valid() const
{
return key_.is_valid() && src_.is_valid() && dst_.is_valid() && physical_backup_arg_.is_valid();
}
TO_STRING_KV(K_(key), K_(src), K_(dst), K_(data_src), K_(physical_backup_arg), K_(result));
common::ObPartitionKey key_;
common::ObReplicaMember src_;
common::ObReplicaMember dst_;
common::ObReplicaMember data_src_;
share::ObPhysicalBackupArg physical_backup_arg_;
int64_t result_;
};
struct ObValidateRes {
OB_UNIS_VERSION(1);
public:
ObValidateRes() : key_(), dst_(), validate_arg_(), result_(0)
{}
int assign(const ObValidateRes& res);
bool is_valid() const
{
return key_.is_valid() && dst_.is_valid() && validate_arg_.is_valid();
}
TO_STRING_KV(K_(key), K_(dst), K_(validate_arg), K_(result));
common::ObPartitionKey key_;
common::ObReplicaMember dst_;
share::ObPhysicalValidateArg validate_arg_;
int64_t result_;
};
//----End structs for partition online/offline----
struct ObAddReplicaBatchRes {
OB_UNIS_VERSION(2);
public:
ObAddReplicaBatchRes() : res_array_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(res_array));
public:
common::ObSArray<ObAddReplicaRes> res_array_;
};
struct ObRebuildReplicaBatchRes {
OB_UNIS_VERSION(1);
public:
ObRebuildReplicaBatchRes() : res_array_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(res_array));
public:
common::ObSArray<ObRebuildReplicaRes> res_array_;
};
struct ObCopySSTableBatchRes {
OB_UNIS_VERSION(1);
public:
ObCopySSTableBatchRes() : res_array_(), type_(common::OB_COPY_SSTABLE_TYPE_INVALID)
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(res_array), K_(type));
public:
common::ObSArray<ObCopySSTableRes> res_array_;
common::ObCopySSTableType type_;
};
struct ObMigrateReplicaBatchRes {
OB_UNIS_VERSION(2);
public:
ObMigrateReplicaBatchRes() : res_array_()
{}
bool is_valid() const;
TO_STRING_KV(K_(res_array));
public:
common::ObSArray<ObMigrateReplicaRes> res_array_;
};
struct ObChangeReplicaBatchRes {
OB_UNIS_VERSION(1);
public:
ObChangeReplicaBatchRes() : res_array_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(res_array));
public:
common::ObSArray<ObChangeReplicaRes> res_array_;
};
struct ObStandbyCutDataTaskRes {
OB_UNIS_VERSION(1);
public:
ObStandbyCutDataTaskRes() : key_(), dst_(), result_(0)
{}
bool is_valid() const
{
return key_.is_valid() && dst_.is_valid();
}
TO_STRING_KV(K_(key), K_(dst), K_(result));
common::ObPartitionKey key_;
common::ObReplicaMember dst_;
int64_t result_;
};
struct ObStandbyCutDataBatchTaskRes {
OB_UNIS_VERSION(1);
public:
ObStandbyCutDataBatchTaskRes() : res_array_()
{}
public:
int assign(const struct ObStandbyCutDataBatchTaskRes& res);
bool is_valid() const;
TO_STRING_KV(K_(res_array));
public:
common::ObSArray<ObStandbyCutDataTaskRes> res_array_;
};
struct ObBackupBatchRes {
OB_UNIS_VERSION(1);
public:
ObBackupBatchRes() : res_array_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(res_array));
public:
common::ObSArray<ObBackupRes> res_array_;
};
struct ObValidateBatchRes {
OB_UNIS_VERSION(1);
public:
ObValidateBatchRes() : res_array_()
{}
public:
int assign(const ObValidateBatchRes& res);
bool is_valid() const;
TO_STRING_KV(K_(res_array));
public:
common::ObSArray<ObValidateRes> res_array_;
};
struct ObPGBackupArchiveLogArg {
OB_UNIS_VERSION(1);
public:
ObPGBackupArchiveLogArg();
public:
bool is_valid() const;
int assign(const ObPGBackupArchiveLogArg& arg);
TO_STRING_KV(K_(archive_round), K_(pg_key));
public:
int64_t archive_round_;
common::ObPGKey pg_key_;
};
struct ObPGBackupArchiveLogRes {
OB_UNIS_VERSION(1);
public:
ObPGBackupArchiveLogRes();
public:
bool is_valid() const;
int assign(const ObPGBackupArchiveLogRes& res);
TO_STRING_KV(K_(result), K_(finished), K_(checkpoint_ts), K_(pg_key));
public:
int result_;
bool finished_;
int64_t checkpoint_ts_;
common::ObPGKey pg_key_;
};
struct ObBackupArchiveLogBatchArg {
OB_UNIS_VERSION(1);
public:
ObBackupArchiveLogBatchArg();
public:
bool is_valid() const;
int assign(const ObBackupArchiveLogBatchArg& arg);
TO_STRING_KV(K_(tenant_id), K_(archive_round), K_(checkpoint_ts), K_(task_id), K_(src_root_path),
K_(src_storage_info), K_(dst_root_path), K_(dst_storage_info), K_(arg_array));
public:
uint64_t tenant_id_;
int64_t archive_round_;
int64_t piece_id_;
int64_t create_date_;
int64_t job_id_;
int64_t checkpoint_ts_; // rs_checkpoint_ts
share::ObTaskId task_id_;
char src_root_path_[share::OB_MAX_BACKUP_PATH_LENGTH];
char src_storage_info_[share::OB_MAX_BACKUP_STORAGE_INFO_LENGTH];
char dst_root_path_[share::OB_MAX_BACKUP_PATH_LENGTH];
char dst_storage_info_[share::OB_MAX_BACKUP_STORAGE_INFO_LENGTH];
common::ObSArray<ObPGBackupArchiveLogArg> arg_array_;
};
struct ObBackupArchiveLogBatchRes {
OB_UNIS_VERSION(1);
public:
ObBackupArchiveLogBatchRes();
public:
bool is_valid() const;
bool is_interrupted() const;
int assign(const ObBackupArchiveLogBatchRes& arg);
int get_min_checkpoint_ts(int64_t& checkpoint_ts) const;
int get_finished_pg_list(common::ObIArray<common::ObPGKey>& pg_list) const;
int get_failed_pg_list(common::ObIArray<common::ObPGKey>& pg_list) const;
TO_STRING_KV(
K_(server), K_(tenant_id), K_(archive_round), K_(piece_id), K_(checkpoint_ts), K_(job_id), K_(res_array));
public:
common::ObAddr server_;
uint64_t tenant_id_;
int64_t archive_round_;
int64_t piece_id_;
int64_t job_id_;
int64_t checkpoint_ts_; // rs checkpoint ts
common::ObSArray<ObPGBackupArchiveLogRes> res_array_;
};
struct ObBackupBackupsetReplicaRes {
OB_UNIS_VERSION(1);
public:
ObBackupBackupsetReplicaRes();
public:
int assign(const ObBackupBackupsetReplicaRes& res);
bool is_valid() const;
TO_STRING_KV(K_(key), K_(dst), K_(result));
public:
common::ObPartitionKey key_;
common::ObReplicaMember dst_;
share::ObBackupBackupsetArg arg_;
int result_;
};
struct ObBackupBackupsetBatchRes {
OB_UNIS_VERSION(1);
public:
int assign(const ObBackupBackupsetBatchRes& res);
bool is_valid() const;
TO_STRING_KV(K_(res_array));
public:
common::ObSArray<ObBackupBackupsetReplicaRes> res_array_;
};
// ---Structs for partition batch online/offline---
struct ObAddReplicaBatchArg {
OB_UNIS_VERSION(1);
public:
ObAddReplicaBatchArg() : arg_array_(), timeout_ts_(0), task_id_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(arg_array), K_(timeout_ts), K_(task_id));
public:
common::ObSArray<ObAddReplicaArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId task_id_;
};
struct ObRemoveNonPaxosReplicaBatchArg {
OB_UNIS_VERSION(1);
public:
ObRemoveNonPaxosReplicaBatchArg() : arg_array_(), timeout_ts_(0), task_id_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(arg_array), K_(timeout_ts), K_(task_id));
public:
common::ObSArray<ObRemoveNonPaxosReplicaArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId task_id_;
};
struct ObMigrateReplicaBatchArg {
OB_UNIS_VERSION(1);
public:
ObMigrateReplicaBatchArg() : arg_array_(), timeout_ts_(0), task_id_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(arg_array), K_(timeout_ts), K_(task_id));
public:
common::ObSArray<ObMigrateReplicaArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId task_id_;
};
struct ObChangeReplicaBatchArg {
OB_UNIS_VERSION(1);
public:
ObChangeReplicaBatchArg() : arg_array_(), timeout_ts_(0), task_id_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(arg_array), K_(timeout_ts), K_(task_id));
public:
common::ObSArray<ObChangeReplicaArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId task_id_;
};
struct ObCopySSTableBatchArg {
OB_UNIS_VERSION(1);
public:
ObCopySSTableBatchArg() : arg_array_(), timeout_ts_(0), task_id_(), type_(common::OB_COPY_SSTABLE_TYPE_INVALID)
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(arg_array), K_(timeout_ts), K_(task_id), K_(type));
public:
common::ObSArray<ObCopySSTableArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId task_id_;
common::ObCopySSTableType type_;
};
struct ObRebuildReplicaBatchArg {
OB_UNIS_VERSION(1);
public:
ObRebuildReplicaBatchArg() : arg_array_(), timeout_ts_(0), task_id_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(arg_array), K_(timeout_ts), K_(task_id));
public:
common::ObSArray<ObRebuildReplicaArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId task_id_;
};
struct ObServerCopyLocalIndexSSTableArg {
OB_UNIS_VERSION(1);
public:
ObServerCopyLocalIndexSSTableArg()
: data_src_(), dst_(), pkey_(), index_table_id_(common::OB_INVALID_ID), cluster_id_(common::OB_INVALID_ID), data_size_(0)
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(data_src), K_(dst), K_(pkey), K_(index_table_id), K_(cluster_id), K_(data_size));
public:
common::ObAddr data_src_;
common::ObAddr dst_;
common::ObPartitionKey pkey_;
uint64_t index_table_id_;
int64_t cluster_id_;
int64_t data_size_;
};
struct ObBackupBatchArg {
OB_UNIS_VERSION(1);
public:
ObBackupBatchArg() : arg_array_(), timeout_ts_(0), task_id_()
{}
public:
bool is_valid() const;
TO_STRING_KV(K_(arg_array), K_(timeout_ts), K_(task_id));
public:
common::ObSArray<ObBackupArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId task_id_;
};
enum ObReplicaMovingType : int8_t {
REPLICA_MOVING_TYPE_INVALID = 0,
REPLICA_MOVING_TYPE_ADD_REPLICA,
REPLICA_MOVING_TYPE_DROP_REPLICA,
REPLICA_MOVING_TYPE_MAX
};
struct ObAuthReplicaMovingkArg {
OB_UNIS_VERSION(1);
public:
ObAuthReplicaMovingkArg() : file_id_(0), type_(REPLICA_MOVING_TYPE_INVALID)
{}
bool is_valid() const;
TO_STRING_KV(K(pg_key_), K(addr_), K(file_id_), K(type_));
public:
common::ObPGKey pg_key_;
common::ObAddr addr_;
int64_t file_id_;
ObReplicaMovingType type_;
};
struct ObValidateBatchArg {
OB_UNIS_VERSION(1);
public:
ObValidateBatchArg() : arg_array_(), timeout_ts_(0), task_id_()
{}
public:
int assign(const ObValidateBatchArg& arg);
bool is_valid() const;
TO_STRING_KV(K_(arg_array), K_(timeout_ts), K_(task_id));
public:
common::ObSArray<ObValidateArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId task_id_;
};
struct ObStandbyCutDataBatchTaskArg {
OB_UNIS_VERSION(1);
public:
ObStandbyCutDataBatchTaskArg()
: arg_array_(), timeout_ts_(0), trace_id_(), fo_trace_id_(), flashback_ts_(0), switchover_epoch_(0)
{}
public:
int 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);
bool is_valid() const;
TO_STRING_KV(K_(arg_array), K_(timeout_ts), K_(trace_id), K_(flashback_ts), K_(switchover_epoch), K_(fo_trace_id));
public:
common::ObSArray<ObStandbyCutDataTaskArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId trace_id_;
common::ObCurTraceId::TraceId fo_trace_id_;
int64_t flashback_ts_;
int64_t switchover_epoch_;
};
struct ObBackupBackupsetBatchArg {
OB_UNIS_VERSION(1);
public:
ObBackupBackupsetBatchArg() : arg_array_(), timeout_ts_(), task_id_(), tenant_dropped_(false)
{}
public:
int assign(const ObBackupBackupsetBatchArg& res);
bool is_valid() const;
TO_STRING_KV(K_(timeout_ts), K_(task_id), K_(tenant_dropped));
public:
common::ObSArray<ObMigrateBackupsetArg> arg_array_;
int64_t timeout_ts_;
share::ObTaskId task_id_;
bool tenant_dropped_;
};
//----Structs for managing privileges----
struct ObMajorFreezeArg {
OB_UNIS_VERSION(1);
public:
ObMajorFreezeArg() : frozen_version_(0), schema_version_(0), frozen_timestamp_(0)
{}
inline void reset();
inline void reuse();
bool is_valid() const;
DECLARE_TO_STRING;
int64_t frozen_version_;
int64_t schema_version_;
int64_t frozen_timestamp_;
private:
// DISALLOW_COPY_AND_ASSIGN(ObMajorFreezeArg);
};
struct ObSetReplicaNumArg {
OB_UNIS_VERSION(1);
public:
ObSetReplicaNumArg() : partition_key_(), replica_num_(0)
{}
~ObSetReplicaNumArg()
{}
inline void reset();
bool is_valid() const
{
return partition_key_.is_valid() && replica_num_ > 0;
}
DECLARE_TO_STRING;
common::ObPartitionKey partition_key_;
int64_t replica_num_;
};
struct ObSetParentArg {
OB_UNIS_VERSION(1);
public:
ObSetParentArg() : partition_key_(), parent_addr_()
{}
~ObSetParentArg()
{}
inline void reset();
bool is_valid() const
{
return partition_key_.is_valid() && parent_addr_.is_valid();
}
DECLARE_TO_STRING;
common::ObPartitionKey partition_key_;
common::ObAddr parent_addr_;
};
struct ObSwitchLeaderArg {
OB_UNIS_VERSION(1);
public:
ObSwitchLeaderArg() : partition_key_(), leader_addr_()
{}
~ObSwitchLeaderArg()
{}
inline void reset();
bool is_valid() const
{
return partition_key_.is_valid() && leader_addr_.is_valid();
}
DECLARE_TO_STRING;
common::ObPartitionKey partition_key_;
common::ObAddr leader_addr_;
};
struct ObSwitchSchemaArg {
OB_UNIS_VERSION(1);
public:
explicit ObSwitchSchemaArg() : schema_info_(), force_refresh_(false)
{}
explicit ObSwitchSchemaArg(const share::schema::ObRefreshSchemaInfo& schema_info, bool force_refresh)
: schema_info_(schema_info), force_refresh_(force_refresh)
{}
~ObSwitchSchemaArg()
{}
void reset();
bool is_valid() const
{
return schema_info_.get_schema_version() > 0;
}
DECLARE_TO_STRING;
share::schema::ObRefreshSchemaInfo schema_info_;
bool force_refresh_;
};
struct ObCheckSchemaVersionElapsedArg {
OB_UNIS_VERSION(1);
public:
ObCheckSchemaVersionElapsedArg() : pkey_(), schema_version_(0)
{}
bool is_valid() const
{
return pkey_.is_valid() && schema_version_ > 0;
}
void reuse()
{
pkey_.reset();
schema_version_ = 0;
}
int build(rootserver::ObGlobalIndexTask* task, common::ObPartitionKey& pkey);
TO_STRING_KV(K_(pkey), K_(schema_version));
common::ObPartitionKey pkey_;
int64_t schema_version_;
};
struct ObCheckCtxCreateTimestampElapsedArg {
OB_UNIS_VERSION(1);
public:
ObCheckCtxCreateTimestampElapsedArg() : pkey_(), sstable_exist_ts_(0)
{}
bool is_valid() const
{
return pkey_.is_valid() && sstable_exist_ts_ > 0;
}
void reuse()
{
pkey_.reset();
sstable_exist_ts_ = 0;
}
int build(rootserver::ObGlobalIndexTask* task, common::ObPartitionKey& pkey);
TO_STRING_KV(K_(pkey), K_(sstable_exist_ts));
common::ObPartitionKey pkey_;
int64_t sstable_exist_ts_;
};
struct ObCheckSchemaVersionElapsedResult {
OB_UNIS_VERSION(1);
public:
ObCheckSchemaVersionElapsedResult() : snapshot_(common::OB_INVALID_TIMESTAMP)
{}
bool is_valid() const
{
return snapshot_ != common::OB_INVALID_TIMESTAMP;
}
void reuse()
{
snapshot_ = common::OB_INVALID_TIMESTAMP;
}
TO_STRING_KV(K_(snapshot));
int64_t snapshot_;
};
struct ObCheckCtxCreateTimestampElapsedResult {
OB_UNIS_VERSION(1);
public:
ObCheckCtxCreateTimestampElapsedResult() : snapshot_(common::OB_INVALID_TIMESTAMP)
{}
bool is_valid() const
{
return snapshot_ != common::OB_INVALID_TIMESTAMP;
}
void reuse()
{
snapshot_ = common::OB_INVALID_TIMESTAMP;
}
TO_STRING_KV(K_(snapshot));
int64_t snapshot_;
};
struct ObGetLeaderCandidatesArg {
OB_UNIS_VERSION(1);
public:
ObGetLeaderCandidatesArg() : partitions_()
{}
void reuse()
{
partitions_.reuse();
}
bool is_valid() const
{
return partitions_.count() > 0;
}
TO_STRING_KV(K_(partitions));
ObPartitionList partitions_;
};
struct ObGetLeaderCandidatesV2Arg {
OB_UNIS_VERSION(1);
public:
ObGetLeaderCandidatesV2Arg() : partitions_(), prep_candidates_()
{}
void reuse()
{
partitions_.reuse();
prep_candidates_.reuse();
}
bool is_valid() const
{
return ((partitions_.count() > 0) && (prep_candidates_.count() > 0));
}
TO_STRING_KV(K_(partitions));
ObPartitionList partitions_;
ObServerList prep_candidates_;
};
class CandidateStatus {
OB_UNIS_VERSION(1);
public:
CandidateStatus() : candidate_status_(0)
{}
virtual ~CandidateStatus()
{}
public:
void set_in_black_list(const bool in_black_list)
{
if (in_black_list) {
in_black_list_ = 1;
} else {
in_black_list_ = 0;
}
}
bool get_in_black_list() const
{
bool ret_in_black_list = false;
if (0 == in_black_list_) { // false, do nothing
} else {
ret_in_black_list = true;
}
return ret_in_black_list;
}
TO_STRING_KV("in_black_list", get_in_black_list());
private:
union {
uint64_t candidate_status_;
struct {
uint64_t in_black_list_ : 1; // Boolean
uint64_t reserved_ : 63;
};
};
};
typedef common::ObSArray<CandidateStatus> CandidateStatusList;
struct ObGetLeaderCandidatesResult {
OB_UNIS_VERSION(1);
public:
ObGetLeaderCandidatesResult() : candidates_()
{}
void reuse()
{
candidates_.reuse();
candidate_status_array_.reuse();
}
TO_STRING_KV(K_(candidates));
common::ObSArray<ObServerList> candidates_;
common::ObSArray<CandidateStatusList> candidate_status_array_;
};
//----Structs for managing privileges----
struct ObAccountArg {
OB_UNIS_VERSION(1);
public:
ObAccountArg() : user_name_(), host_name_(), is_role_(false)
{}
ObAccountArg(const common::ObString& user_name, const common::ObString& host_name)
: user_name_(user_name), host_name_(host_name), is_role_(false)
{}
ObAccountArg(const char* user_name, const char* host_name)
: user_name_(user_name), host_name_(host_name), is_role_(false)
{}
ObAccountArg(const common::ObString& user_name, const common::ObString& host_name, const bool is_role)
: user_name_(user_name), host_name_(host_name), is_role_(is_role)
{}
ObAccountArg(const char* user_name, const char* host_name, const bool is_role)
: user_name_(user_name), host_name_(host_name), is_role_(is_role)
{}
bool is_valid() const
{
return !user_name_.empty();
}
bool is_default_host_name() const
{
return 0 == host_name_.compare(common::OB_DEFAULT_HOST_NAME);
}
TO_STRING_KV(K_(user_name), K_(host_name), K_(is_role));
common::ObString user_name_;
common::ObString host_name_;
bool is_role_;
};
struct ObCreateUserArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateUserArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
if_not_exist_(false),
creator_id_(common::OB_INVALID_ID),
primary_zone_()
{}
virtual ~ObCreateUserArg()
{}
bool is_valid() const;
int assign(const ObCreateUserArg& other);
TO_STRING_KV(K_(tenant_id), K_(user_infos));
uint64_t tenant_id_;
bool if_not_exist_;
common::ObSArray<share::schema::ObUserInfo> user_infos_;
uint64_t creator_id_;
common::ObString primary_zone_; // only used in oracle mode
};
struct ObDropUserArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropUserArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), is_role_(false)
{}
virtual ~ObDropUserArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
TO_STRING_KV(K_(tenant_id), K_(users), K_(hosts), K_(is_role));
uint64_t tenant_id_;
common::ObSArray<common::ObString> users_;
common::ObSArray<common::ObString> hosts_; // can not use ObAccountArg for compatibility
bool is_role_;
};
struct ObRenameUserArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObRenameUserArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID)
{}
virtual ~ObRenameUserArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(old_users), K_(old_hosts), K_(new_users), K_(new_hosts));
uint64_t tenant_id_;
common::ObSArray<common::ObString> old_users_;
common::ObSArray<common::ObString> new_users_;
common::ObSArray<common::ObString> old_hosts_;
common::ObSArray<common::ObString> new_hosts_;
};
struct ObSetPasswdArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObSetPasswdArg()
: ObDDLArg(), tenant_id_(common::OB_INVALID_ID), ssl_type_(share::schema::ObSSLType::SSL_TYPE_NOT_SPECIFIED),
modify_max_connections_(false), max_connections_per_hour_(OB_INVALID_ID), max_user_connections_(OB_INVALID_ID)
{}
virtual ~ObSetPasswdArg()
{}
bool is_valid() const;
TO_STRING_KV(
K_(tenant_id), K_(user), K_(host), K_(passwd), K_(ssl_type), K_(ssl_cipher), K_(x509_issuer), K_(x509_subject),
K_(modify_max_connections), K_(max_connections_per_hour), K_(max_user_connections));
uint64_t tenant_id_;
common::ObString user_;
common::ObString passwd_;
common::ObString host_;
share::schema::ObSSLType ssl_type_;
common::ObString ssl_cipher_;
common::ObString x509_issuer_;
common::ObString x509_subject_;
bool modify_max_connections_;
uint64_t max_connections_per_hour_;
uint64_t max_user_connections_;
};
struct ObLockUserArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObLockUserArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), locked_(false)
{}
virtual ~ObLockUserArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(users), K_(hosts), K_(locked));
uint64_t tenant_id_;
common::ObSArray<common::ObString> users_;
common::ObSArray<common::ObString> hosts_;
bool locked_;
};
struct ObAlterUserProfileArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObAlterUserProfileArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_TENANT_ID),
user_name_(),
host_name_(),
profile_name_(),
user_id_(common::OB_INVALID_TENANT_ID),
default_role_flag_(common::OB_INVALID_TENANT_ID),
role_id_array_()
{}
virtual ~ObAlterUserProfileArg()
{}
int assign(const ObAlterUserProfileArg& other);
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(user_name), K_(host_name), K_(profile_name));
uint64_t tenant_id_;
common::ObString user_name_;
common::ObString host_name_;
common::ObString profile_name_;
uint64_t user_id_;
uint64_t default_role_flag_;
common::ObSEArray<uint64_t, 4> role_id_array_;
};
struct ObGrantArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObGrantArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
priv_level_(share::schema::OB_PRIV_INVALID_LEVEL),
priv_set_(0),
users_passwd_(),
hosts_(),
need_create_user_(false),
has_create_user_priv_(false),
roles_(),
option_(0),
sys_priv_array_(),
obj_priv_array_(),
object_type_(share::schema::ObObjectType::INVALID),
object_id_(common::OB_INVALID_ID),
ins_col_ids_(),
upd_col_ids_(),
ref_col_ids_(),
grantor_id_(common::OB_INVALID_ID),
remain_roles_(),
is_inner_(false)
{}
virtual ~ObGrantArg()
{}
bool is_valid() const;
int assign(const ObGrantArg& other);
virtual bool is_allow_when_disable_ddl() const;
TO_STRING_KV(K_(tenant_id), K_(priv_level), K_(db), K_(table), K_(priv_set), K_(users_passwd), K_(hosts),
K_(need_create_user), K_(has_create_user_priv), K_(option), K_(object_type), K_(object_id), K_(grantor_id),
K_(ins_col_ids), K_(upd_col_ids), K_(ref_col_ids), K_(grantor_id));
uint64_t tenant_id_;
share::schema::ObPrivLevel priv_level_;
common::ObString db_;
common::ObString table_;
ObPrivSet priv_set_;
common::ObSArray<common::ObString> users_passwd_;
common::ObSArray<common::ObString> hosts_;
bool need_create_user_;
bool has_create_user_priv_;
common::ObSArray<common::ObString> roles_;
uint64_t option_;
share::ObRawPrivArray sys_priv_array_;
share::ObRawObjPrivArray obj_priv_array_;
share::schema::ObObjectType object_type_;
uint64_t object_id_;
common::ObSEArray<uint64_t, 4> ins_col_ids_;
common::ObSEArray<uint64_t, 4> upd_col_ids_;
common::ObSEArray<uint64_t, 4> ref_col_ids_;
uint64_t grantor_id_;
// used to save the user_name and host_name that cannot be stored in role[0] and role[1]
// to support grant xxx to multiple user in oracle mode
common::ObSArray<common::ObString> remain_roles_;
bool is_inner_;
};
struct ObStandbyGrantArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObStandbyGrantArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
user_id_(0),
db_(),
table_(),
priv_level_(share::schema::OB_PRIV_INVALID_LEVEL),
priv_set_()
{}
virtual ~ObStandbyGrantArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(user_id), K_(priv_level), K_(priv_set), K_(db), K_(table), K_(priv_level));
uint64_t tenant_id_;
uint64_t user_id_;
common::ObString db_;
common::ObString table_;
share::schema::ObPrivLevel priv_level_;
ObPrivSet priv_set_;
share::ObRawObjPrivArray obj_priv_array_;
};
struct ObRevokeUserArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObRevokeUserArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
user_id_(common::OB_INVALID_ID),
priv_set_(0),
revoke_all_(false),
role_ids_()
{}
bool is_valid() const;
TO_STRING_KV(
K_(tenant_id), K_(user_id), "priv_set", share::schema::ObPrintPrivSet(priv_set_), K_(revoke_all), K_(role_ids));
uint64_t tenant_id_;
uint64_t user_id_;
ObPrivSet priv_set_;
bool revoke_all_;
common::ObSArray<uint64_t> role_ids_;
};
struct ObRevokeDBArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObRevokeDBArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), user_id_(common::OB_INVALID_ID), priv_set_(0)
{}
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(user_id), K_(db), "priv_set", share::schema::ObPrintPrivSet(priv_set_));
uint64_t tenant_id_;
uint64_t user_id_;
common::ObString db_;
ObPrivSet priv_set_;
};
struct ObRevokeTableArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObRevokeTableArg()
: ObDDLArg(),
tenant_id_(common::OB_INVALID_ID),
user_id_(common::OB_INVALID_ID),
priv_set_(0),
grant_(true),
obj_id_(common::OB_INVALID_ID),
obj_type_(common::OB_INVALID_ID),
grantor_id_(common::OB_INVALID_ID),
obj_priv_array_(),
revoke_all_ora_(false)
{}
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(user_id), K_(db), K_(table), "priv_set", share::schema::ObPrintPrivSet(priv_set_),
K_(grant), K_(obj_id), K_(obj_type), K_(grantor_id), K_(obj_priv_array));
uint64_t tenant_id_;
uint64_t user_id_;
common::ObString db_;
common::ObString table_;
ObPrivSet priv_set_;
bool grant_;
uint64_t obj_id_;
uint64_t obj_type_;
uint64_t grantor_id_;
share::ObRawObjPrivArray obj_priv_array_;
bool revoke_all_ora_;
};
struct ObRevokeSysPrivArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObRevokeSysPrivArg()
: ObDDLArg(), tenant_id_(common::OB_INVALID_ID), grantee_id_(common::OB_INVALID_ID), sys_priv_array_()
{}
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(grantee_id), K_(sys_priv_array));
uint64_t tenant_id_;
uint64_t grantee_id_;
share::ObRawPrivArray sys_priv_array_;
};
struct ObCreateRoleArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateRoleArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID)
{}
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(user_infos));
uint64_t tenant_id_;
// role and user share the same user schema structure
common::ObSArray<share::schema::ObUserInfo> user_infos_;
};
//----End of structs for managing privileges----
// system admin (alter system ...) rpc argument define
struct ObAdminServerArg {
OB_UNIS_VERSION(1);
public:
enum AdminServerOp {
INVALID_OP = 0,
ADD = 1,
DELETE = 2,
CANCEL_DELETE = 3,
START = 4,
STOP = 5,
FORCE_STOP = 6,
ISOLATE = 7,
};
ObAdminServerArg() : servers_(), zone_(), force_stop_(false), op_(INVALID_OP)
{}
~ObAdminServerArg()
{}
// zone can be empty, so don't check it
bool is_valid() const
{
return servers_.count() > 0;
}
TO_STRING_KV(K_(servers), K_(zone), K_(force_stop), K_(op));
ObServerList servers_;
common::ObZone zone_;
bool force_stop_;
AdminServerOp op_;
};
struct ObAdminZoneArg {
OB_UNIS_VERSION(1);
public:
enum AdminZoneOp {
ADD = 1,
DELETE = 2,
START = 3,
STOP = 4,
MODIFY = 5,
FORCE_STOP = 6,
ISOLATE = 7,
};
enum ALTER_ZONE_OPTION {
ALTER_ZONE_REGION = 0,
ALTER_ZONE_IDC = 1,
ALTER_ZONE_TYPE = 2,
ALTER_ZONE_MAX = 128,
};
public:
ObAdminZoneArg()
: zone_(), region_(), idc_(), zone_type_(common::ObZoneType::ZONE_TYPE_INVALID), force_stop_(false), op_(ADD)
{}
~ObAdminZoneArg()
{}
bool is_valid() const
{
return !zone_.is_empty();
}
TO_STRING_KV(K_(zone), K_(region), K_(idc), K_(zone_type), K_(sql_stmt_str), K_(force_stop), K_(op));
common::ObZone zone_;
common::ObRegion region_;
common::ObIDC idc_;
common::ObZoneType zone_type_;
common::ObString sql_stmt_str_;
common::ObBitSet<ALTER_ZONE_MAX> alter_zone_options_;
bool force_stop_;
AdminZoneOp op_;
};
struct ObAdminSwitchReplicaRoleArg {
OB_UNIS_VERSION(1);
public:
ObAdminSwitchReplicaRoleArg() : role_(common::FOLLOWER), partition_key_(), server_(), zone_(), tenant_name_()
{}
~ObAdminSwitchReplicaRoleArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(role), K_(partition_key), K_(server), K_(zone), K_(tenant_name));
common::ObRole role_;
common::ObPartitionKey partition_key_;
common::ObAddr server_;
common::ObZone zone_;
common::ObFixedLengthString<common::OB_MAX_TENANT_NAME_LENGTH + 1> tenant_name_;
};
struct ObAdminSwitchRSRoleArg {
OB_UNIS_VERSION(1);
public:
ObAdminSwitchRSRoleArg() : role_(common::FOLLOWER), server_(), zone_()
{}
~ObAdminSwitchRSRoleArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(role), K_(server), K_(zone));
common::ObRole role_;
common::ObAddr server_;
common::ObZone zone_;
};
struct ObAdminChangeReplicaArg {
OB_UNIS_VERSION(1);
public:
ObAdminChangeReplicaArg() : partition_key_(), member_(), force_cmd_(false)
{}
~ObAdminChangeReplicaArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(partition_key), K_(member), K_(force_cmd));
common::ObPartitionKey partition_key_;
common::ObReplicaMember member_;
bool force_cmd_;
};
struct ObCheckGtsReplicaStopServer {
OB_UNIS_VERSION(1);
public:
ObCheckGtsReplicaStopServer() : servers_()
{}
TO_STRING_KV(K_(servers));
int init(const common::ObIArray<common::ObAddr>& servers)
{
int ret = common::OB_SUCCESS;
servers_.reset();
if (OB_FAIL(servers_.assign(servers))) {
SHARE_LOG(WARN, "fail to assign servers", K(ret));
}
return ret;
}
bool is_valid() const
{
return servers_.count() > 0;
}
public:
common::ObSArray<common::ObAddr> servers_;
};
struct ObCheckGtsReplicaStopZone {
OB_UNIS_VERSION(1);
public:
ObCheckGtsReplicaStopZone() : zone_()
{}
ObCheckGtsReplicaStopZone(const common::ObZone& zone) : zone_(zone)
{}
TO_STRING_KV(K_(zone));
bool is_valid() const
{
return !zone_.is_empty();
}
public:
common::ObZone zone_;
};
struct ObAdminDropReplicaArg {
OB_UNIS_VERSION(1);
public:
ObAdminDropReplicaArg() : partition_key_(), server_(), zone_(), create_timestamp_(0), force_cmd_(false)
{}
~ObAdminDropReplicaArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(partition_key), K_(server), K_(zone), K_(create_timestamp), K_(force_cmd));
common::ObPartitionKey partition_key_;
common::ObAddr server_;
common::ObZone zone_;
int64_t create_timestamp_;
bool force_cmd_;
};
struct ObAdminAddDiskArg {
OB_UNIS_VERSION(1);
public:
ObAdminAddDiskArg() : diskgroup_name_(), disk_path_(), alias_name_(), server_(), zone_()
{}
~ObAdminAddDiskArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(diskgroup_name), K_(disk_path), K_(alias_name), K_(server), K_(zone));
common::ObString diskgroup_name_;
common::ObString disk_path_;
common::ObString alias_name_;
common::ObAddr server_;
common::ObZone zone_;
};
struct ObAdminDropDiskArg {
OB_UNIS_VERSION(1);
public:
ObAdminDropDiskArg() : diskgroup_name_(), alias_name_(), server_(), zone_()
{}
~ObAdminDropDiskArg()
{}
TO_STRING_KV(K_(diskgroup_name), K_(alias_name), K_(server), K_(zone));
common::ObString diskgroup_name_;
common::ObString alias_name_;
common::ObAddr server_;
common::ObZone zone_;
};
struct ObAdminMigrateReplicaArg {
OB_UNIS_VERSION(1);
public:
ObAdminMigrateReplicaArg() : is_copy_(false), partition_key_(), src_(), dest_(), force_cmd_(false)
{}
~ObAdminMigrateReplicaArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(is_copy), K_(partition_key), K_(src), K_(dest), K_(force_cmd));
bool is_copy_;
common::ObPartitionKey partition_key_;
common::ObAddr src_;
common::ObAddr dest_;
bool force_cmd_;
};
struct ObPhysicalRestoreTenantArg : public ObCmdArg {
OB_UNIS_VERSION(1);
public:
ObPhysicalRestoreTenantArg();
virtual ~ObPhysicalRestoreTenantArg()
{}
bool is_valid() const;
int assign(const ObPhysicalRestoreTenantArg& other);
int add_table_item(const ObTableItem& item);
TO_STRING_KV(K_(tenant_name), K_(uri), K_(restore_option), K_(restore_timestamp), K_(backup_tenant_name),
K_(passwd_array), K_(table_items), K_(multi_uri));
common::ObString tenant_name_;
common::ObString uri_;
common::ObString restore_option_;
int64_t restore_timestamp_;
common::ObString backup_tenant_name_;
common::ObString passwd_array_; // Password verification
common::ObSArray<ObTableItem> table_items_;
common::ObString multi_uri_;
};
struct ObRestoreTenantArg : public ObCmdArg {
OB_UNIS_VERSION(1);
public:
ObRestoreTenantArg() : ObCmdArg(), tenant_name_(), oss_uri_()
{}
bool is_valid() const
{
return !tenant_name_.is_empty() && !oss_uri_.empty();
}
TO_STRING_KV(K_(tenant_name), K_(oss_uri));
common::ObFixedLengthString<common::OB_MAX_TENANT_NAME_LENGTH + 1> tenant_name_;
common::ObString oss_uri_;
};
struct ObRestorePartitionsArg {
OB_UNIS_VERSION(1);
public:
ObRestorePartitionsArg()
: schema_id_(common::OB_INVALID_ID),
mode_(OB_CREATE_TABLE_MODE_RESTORE),
partition_ids_(),
schema_version_(common::OB_INVALID_VERSION)
{}
bool is_valid() const;
TO_STRING_KV(K_(schema_id), K_(mode), K_(schema_version), "partition_cnt", partition_ids_.count());
uint64_t schema_id_;
obrpc::ObCreateTableMode mode_;
common::ObSArray<int64_t> partition_ids_; // Physical recovery, the list of partition_id existing in the baseline
// SSTABLE
int64_t schema_version_; // Physical recovery, the schema_version corresponding to the baseline
};
struct ObServerZoneArg {
OB_UNIS_VERSION(1);
public:
ObServerZoneArg() : server_(), zone_()
{}
// server can be invalid, zone can be empty
bool is_valid() const
{
return true;
}
TO_STRING_KV(K_(server), K_(zone));
common::ObAddr server_;
common::ObZone zone_;
};
struct ObAdminReportReplicaArg : public ObServerZoneArg {};
struct ObAdminRecycleReplicaArg : public ObServerZoneArg {};
struct ObAdminRefreshSchemaArg : public ObServerZoneArg {};
struct ObAdminRefreshMemStatArg : public ObServerZoneArg {};
struct ObAdminClearLocationCacheArg : public ObServerZoneArg {};
struct ObRunJobArg : public ObServerZoneArg {
OB_UNIS_VERSION(1);
public:
ObRunJobArg() : ObServerZoneArg(), job_()
{}
bool is_valid() const
{
return ObServerZoneArg::is_valid() && !job_.empty();
}
TO_STRING_KV(K_(server), K_(zone), K_(job));
common::ObString job_;
};
struct ObUpgradeJobArg {
OB_UNIS_VERSION(1);
public:
enum Action { INVALID_ACTION, RUN_UPGRADE_JOB, STOP_UPGRADE_JOB };
public:
ObUpgradeJobArg();
bool is_valid() const;
int assign(const ObUpgradeJobArg& other);
TO_STRING_KV(K_(action), K_(version));
public:
Action action_;
int64_t version_;
};
struct ObAdminMergeArg {
OB_UNIS_VERSION(1);
public:
enum Type {
START_MERGE = 1,
SUSPEND_MERGE = 2,
RESUME_MERGE = 3,
};
ObAdminMergeArg() : type_(START_MERGE), zone_()
{}
bool is_valid() const;
TO_STRING_KV(K_(type), K_(zone));
Type type_;
common::ObZone zone_;
};
struct ObAdminClearRoottableArg {
OB_UNIS_VERSION(1);
public:
ObAdminClearRoottableArg() : tenant_name_()
{}
// tenant_name be empty means all tenant
bool is_valid() const
{
return true;
}
TO_STRING_KV(K_(tenant_name));
common::ObFixedLengthString<common::OB_MAX_TENANT_NAME_LENGTH + 1> tenant_name_;
};
struct ObAdminSetConfigItem {
OB_UNIS_VERSION(1);
public:
ObAdminSetConfigItem()
: name_(),
value_(),
comment_(),
zone_(),
server_(),
tenant_name_(),
exec_tenant_id_(common::OB_SYS_TENANT_ID),
tenant_ids_()
{}
TO_STRING_KV(
K_(name), K_(value), K_(comment), K_(zone), K_(server), K_(tenant_name), K_(exec_tenant_id), K_(tenant_ids));
common::ObFixedLengthString<common::OB_MAX_CONFIG_NAME_LEN> name_;
common::ObFixedLengthString<common::OB_MAX_CONFIG_VALUE_LEN> value_;
common::ObFixedLengthString<common::OB_MAX_CONFIG_INFO_LEN> comment_;
common::ObZone zone_;
common::ObAddr server_;
common::ObFixedLengthString<common::OB_MAX_TENANT_NAME_LENGTH + 1> tenant_name_;
uint64_t exec_tenant_id_;
common::ObSArray<uint64_t> tenant_ids_;
};
struct ObAdminSetConfigArg {
OB_UNIS_VERSION(1);
public:
ObAdminSetConfigArg() : items_(), is_inner_(false)
{}
~ObAdminSetConfigArg()
{}
bool is_valid() const
{
return items_.count() > 0;
}
TO_STRING_KV(K_(items), K_(is_inner));
common::ObSArray<ObAdminSetConfigItem> items_;
bool is_inner_;
};
struct ObAdminLoadBaselineArg {
OB_UNIS_VERSION(1);
public:
ObAdminLoadBaselineArg()
: tenant_ids_(), sql_id_(), plan_hash_value_(common::OB_INVALID_ID), fixed_(false), enabled_(true)
{}
virtual ~ObAdminLoadBaselineArg()
{}
int push_tenant(uint64_t tenant_id)
{
return tenant_ids_.push_back(tenant_id);
}
TO_STRING_KV(K_(tenant_ids), K_(sql_id), K_(plan_hash_value), K_(fixed), K_(enabled));
common::ObSEArray<uint64_t, 8> tenant_ids_;
common::ObString sql_id_;
uint64_t plan_hash_value_;
bool fixed_;
bool enabled_;
};
struct ObAdminFlushCacheArg {
OB_UNIS_VERSION(1);
public:
ObAdminFlushCacheArg() :
cache_type_(CACHE_TYPE_INVALID),
is_fine_grained_(false)
{
}
virtual ~ObAdminFlushCacheArg() {}
bool is_valid() const
{
return cache_type_ > CACHE_TYPE_INVALID && cache_type_ < CACHE_TYPE_MAX;
}
int push_tenant(uint64_t tenant_id) { return tenant_ids_.push_back(tenant_id); }
int push_database(uint64_t db_id) { return db_ids_.push_back(db_id); }
TO_STRING_KV(K_(tenant_ids), K_(cache_type), K_(db_ids), K_(sql_id), K_(is_fine_grained));
common::ObSEArray<uint64_t, 8> tenant_ids_;
ObCacheType cache_type_;
common::ObSEArray<uint64_t, 8> db_ids_;
common::ObString sql_id_;
bool is_fine_grained_;
};
struct ObAdminMigrateUnitArg {
OB_UNIS_VERSION(1);
public:
ObAdminMigrateUnitArg() : unit_id_(0), is_cancel_(false), destination_()
{}
~ObAdminMigrateUnitArg()
{}
bool is_valid() const
{
return common::OB_INVALID_ID != unit_id_ && (destination_.is_valid() || is_cancel_);
}
TO_STRING_KV(K_(unit_id), K_(is_cancel), K_(destination));
uint64_t unit_id_;
bool is_cancel_;
common::ObAddr destination_;
};
struct ObAutoincSyncArg {
OB_UNIS_VERSION(1);
public:
ObAutoincSyncArg()
: tenant_id_(common::OB_INVALID_ID),
table_id_(common::OB_INVALID_ID),
column_id_(common::OB_INVALID_ID),
sync_value_(0),
table_part_num_(0),
auto_increment_(0)
{}
TO_STRING_KV(K_(tenant_id), K_(table_id), K_(column_id), K_(sync_value), K_(table_part_num), K_(auto_increment));
uint64_t tenant_id_;
uint64_t table_id_;
uint64_t column_id_;
uint64_t sync_value_;
// TODO may need add first_part_num. As table_part_num not see usefull.
// Not add first_part_num now.
uint64_t table_part_num_;
uint64_t auto_increment_; // only for sync table option auto_increment
};
struct ObDropReplicaArg {
OB_UNIS_VERSION(1);
public:
ObDropReplicaArg() : partition_key_(), member_()
{}
bool is_valid() const
{
return partition_key_.is_valid() && member_.is_valid();
}
TO_STRING_KV(K_(partition_key), K_(member));
common::ObPartitionKey partition_key_;
common::ObReplicaMember member_;
};
struct ObUpdateIndexStatusArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObUpdateIndexStatusArg()
: ObDDLArg(),
index_table_id_(common::OB_INVALID_ID),
status_(share::schema::INDEX_STATUS_MAX),
create_mem_version_(0),
convert_status_(true)
{}
bool is_valid() const;
virtual bool is_allow_when_disable_ddl() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
TO_STRING_KV(K_(index_table_id), K_(status), K_(create_mem_version), K_(convert_status));
uint64_t index_table_id_;
share::schema::ObIndexStatus status_;
int64_t create_mem_version_;
bool convert_status_;
};
struct ObMergeFinishArg {
OB_UNIS_VERSION(1);
public:
ObMergeFinishArg() : frozen_version_(0)
{}
bool is_valid() const
{
return server_.is_valid() && frozen_version_ > 0;
}
TO_STRING_KV(K_(server), K_(frozen_version));
common::ObAddr server_;
int64_t frozen_version_;
};
struct ObMergeErrorArg {
OB_UNIS_VERSION(1);
public:
ObMergeErrorArg() : error_code_(0)
{}
bool is_valid() const;
TO_STRING_KV(K_(partition_key), K_(server), K_(error_code));
common::ObPartitionKey partition_key_;
common::ObAddr server_;
int error_code_;
};
struct ObAdminRebuildReplicaArg {
OB_UNIS_VERSION(1);
public:
ObAdminRebuildReplicaArg() : key_(), server_()
{}
bool is_valid() const
{
return key_.is_valid() && server_.is_valid();
}
TO_STRING_KV(K_(key), K_(server));
common::ObPartitionKey key_;
common::ObAddr server_;
};
struct ObDebugSyncActionArg {
OB_UNIS_VERSION(1);
public:
ObDebugSyncActionArg() : reset_(false), clear_(false)
{}
bool is_valid() const
{
return reset_ || clear_ || action_.is_valid();
}
TO_STRING_KV(K_(reset), K_(clear), K_(action));
bool reset_;
bool clear_;
common::ObDebugSyncAction action_;
};
struct ObRootMajorFreezeArg {
OB_UNIS_VERSION(1);
public:
ObRootMajorFreezeArg()
: try_frozen_version_(0),
launch_new_round_(false),
ignore_server_list_(),
svr_(),
tenant_id_(common::OB_INVALID_TENANT_ID),
force_launch_(false)
{}
inline void reset();
inline bool is_valid() const
{
return try_frozen_version_ >= 0;
}
TO_STRING_KV(
K_(try_frozen_version), K_(launch_new_round), K(ignore_server_list_), K(svr_), K(tenant_id_), K_(force_launch));
int64_t try_frozen_version_;
bool launch_new_round_;
common::ObSArray<common::ObAddr> ignore_server_list_;
common::ObAddr svr_;
int64_t tenant_id_;
bool force_launch_;
};
struct ObMinorFreezeArg {
OB_UNIS_VERSION(1);
public:
ObMinorFreezeArg()
{}
void reset()
{
tenant_ids_.reset();
partition_key_.reset();
}
bool is_valid() const
{
return true;
}
TO_STRING_KV(K_(tenant_ids), K_(partition_key));
common::ObSArray<uint64_t> tenant_ids_;
common::ObPartitionKey partition_key_;
};
struct ObRootMinorFreezeArg {
OB_UNIS_VERSION(2);
public:
ObRootMinorFreezeArg()
{}
void reset()
{
tenant_ids_.reset();
partition_key_.reset();
server_list_.reset();
zone_.reset();
}
bool is_valid() const
{
return true;
}
TO_STRING_KV(K_(tenant_ids), K_(partition_key), K_(server_list), K_(zone));
common::ObSArray<uint64_t> tenant_ids_;
common::ObPartitionKey partition_key_;
common::ObSArray<common::ObAddr> server_list_;
common::ObZone zone_;
};
struct ObSyncPartitionTableFinishArg {
OB_UNIS_VERSION(1);
public:
ObSyncPartitionTableFinishArg() : server_(), version_(0)
{}
inline bool is_valid() const
{
return server_.is_valid() && version_ > 0;
}
TO_STRING_KV(K_(server), K_(version));
common::ObAddr server_;
int64_t version_;
};
struct ObSyncPGPartitionMTFinishArg {
OB_UNIS_VERSION(1);
public:
ObSyncPGPartitionMTFinishArg() : server_(), version_(0)
{}
inline bool is_valid() const
{
return server_.is_valid() && version_ > 0;
}
TO_STRING_KV(K_(server), K_(version));
common::ObAddr server_;
int64_t version_;
};
struct ObCheckDanglingReplicaFinishArg {
OB_UNIS_VERSION(1);
public:
ObCheckDanglingReplicaFinishArg() : server_(), version_(0), dangling_count_(common::OB_INVALID_ID)
{}
inline bool is_valid() const
{
return server_.is_valid() && version_ > 0;
}
TO_STRING_KV(K_(server), K_(version), K_(dangling_count));
common::ObAddr server_;
int64_t version_;
int64_t dangling_count_;
};
struct ObGetMemberListAndLeaderResult final {
OB_UNIS_VERSION(1);
public:
ObGetMemberListAndLeaderResult()
: member_list_(), leader_(), self_(), lower_list_(), replica_type_(common::REPLICA_TYPE_MAX), property_()
{}
void reset();
inline bool is_valid() const
{
return member_list_.count() > 0 && self_.is_valid() && common::REPLICA_TYPE_MAX != replica_type_ &&
property_.is_valid();
}
int assign(const ObGetMemberListAndLeaderResult& other);
TO_STRING_KV(K_(member_list), K_(leader), K_(self), K_(lower_list), K_(replica_type), K_(property));
common::ObSEArray<common::ObMember, common::OB_MAX_MEMBER_NUMBER, common::ObNullAllocator, false>
member_list_; // copy won't fail
common::ObAddr leader_;
common::ObAddr self_;
common::ObSEArray<common::ObReplicaMember, common::OB_MAX_CHILD_MEMBER_NUMBER> lower_list_; // Cascaded downstream
// information
common::ObReplicaType replica_type_; // The type of copy actually stored in the local copy
common::ObReplicaProperty property_;
};
struct ObMemberListAndLeaderArg {
OB_UNIS_VERSION(1);
public:
ObMemberListAndLeaderArg()
: member_list_(),
leader_(),
self_(),
lower_list_(),
replica_type_(common::REPLICA_TYPE_MAX),
property_(),
role_(common::INVALID_ROLE)
{}
void reset();
bool is_valid() const;
bool check_leader_is_valid() const;
int assign(const ObMemberListAndLeaderArg& other);
TO_STRING_KV(K_(member_list), K_(leader), K_(self), K_(lower_list), K_(replica_type), K_(property), K_(role));
common::ObSEArray<common::ObAddr, common::OB_MAX_MEMBER_NUMBER, common::ObNullAllocator, false>
member_list_; // copy won't fail
common::ObAddr leader_;
common::ObAddr self_;
common::ObSEArray<common::ObReplicaMember, common::OB_MAX_CHILD_MEMBER_NUMBER> lower_list_; // Cascaded downstream
// information
common::ObReplicaType replica_type_; // The type of copy actually stored in the local copy
common::ObReplicaProperty property_;
common::ObRole role_;
};
struct ObBatchGetRoleArg {
OB_UNIS_VERSION(1);
public:
ObBatchGetRoleArg() : keys_()
{}
virtual ~ObBatchGetRoleArg()
{}
void reset();
bool is_valid() const;
TO_STRING_KV(K_(keys));
common::ObSArray<common::ObPartitionKey> keys_;
};
struct ObBatchGetRoleResult {
OB_UNIS_VERSION(1);
public:
ObBatchGetRoleResult() : results_()
{}
virtual ~ObBatchGetRoleResult()
{}
void reset();
bool is_valid() const;
TO_STRING_KV(K_(results));
common::ObSArray<int> results_;
};
struct ObSwitchLeaderListArg {
OB_UNIS_VERSION(1);
public:
ObSwitchLeaderListArg() : partition_key_list_(), leader_addr_()
{}
~ObSwitchLeaderListArg()
{}
inline void reset()
{
partition_key_list_.reset();
leader_addr_.reset();
}
bool is_valid() const
{
return partition_key_list_.count() > 0 && leader_addr_.is_valid();
}
TO_STRING_KV(K_(leader_addr), K_(partition_key_list));
;
common::ObSArray<common::ObPartitionKey> partition_key_list_;
common::ObAddr leader_addr_;
};
struct ObCheckFlashbackInfoArg {
OB_UNIS_VERSION(1);
public:
ObCheckFlashbackInfoArg() : min_weak_read_timestamp_(common::OB_INVALID_TIMESTAMP)
{}
~ObCheckFlashbackInfoArg()
{}
int assign(const ObCheckFlashbackInfoArg& other);
bool is_valid() const
{
return min_weak_read_timestamp_ != common::OB_INVALID_TIMESTAMP;
}
TO_STRING_KV(K_(min_weak_read_timestamp))
int64_t min_weak_read_timestamp_;
};
struct ObCheckFlashbackInfoResult {
OB_UNIS_VERSION(1);
public:
ObCheckFlashbackInfoResult()
: addr_(),
pkey_(),
result_(false),
switchover_timestamp_(common::OB_INVALID_TIMESTAMP),
ret_code_(common::OB_SUCCESS)
{}
~ObCheckFlashbackInfoResult()
{}
int assign(const ObCheckFlashbackInfoResult& other);
TO_STRING_KV(K_(addr), K_(pkey), K_(result), K_(switchover_timestamp), K_(ret_code))
common::ObAddr addr_; // Addr of current obs
common::ObPartitionKey pkey_; // Unfinished partition_key
bool result_; // Current obs query result
int64_t switchover_timestamp_; // The current switchover_timestap of the bottom layer to prevent the wrong return
// packet
int ret_code_;
};
struct ObGetPartitionCountResult {
OB_UNIS_VERSION(1);
public:
ObGetPartitionCountResult() : partition_count_(0)
{}
void reset()
{
partition_count_ = 0;
}
TO_STRING_KV(K_(partition_count));
int64_t partition_count_;
};
inline void Int64::reset()
{
v_ = common::OB_INVALID_ID;
}
inline void ObCreatePartitionArg::reset()
{
zone_.reset();
partition_key_.reset();
schema_version_ = 0;
memstore_version_ = 0;
replica_num_ = 0;
member_list_.reset();
leader_.reset();
lease_start_ = 0;
logonly_replica_num_ = 0;
backup_replica_num_ = 0;
readonly_replica_num_ = 0;
replica_type_ = common::REPLICA_TYPE_MAX;
last_submit_timestamp_ = 0;
restore_ = share::REPLICA_NOT_RESTORE;
table_schemas_.reset();
source_partition_key_.reset();
frozen_timestamp_ = 0;
non_paxos_replica_num_ = 0;
last_replay_log_id_ = 0;
pg_key_.reset();
replica_property_.reset();
split_info_.reset();
ignore_member_list_ = false;
}
inline void ObCreatePartitionStorageArg::reset()
{
rgkey_.reset();
partition_key_.reset();
schema_version_ = 0;
memstore_version_ = 0;
last_submit_timestamp_ = 0;
restore_ = share::REPLICA_NOT_RESTORE;
table_schemas_.reset();
}
inline void ObCreatePartitionBatchArg::reset()
{
args_.reset();
}
inline void ObMajorFreezeArg::reset()
{
frozen_version_ = 0;
schema_version_ = 0;
frozen_timestamp_ = 0;
}
inline void ObMajorFreezeArg::reuse()
{
frozen_version_ = 0;
schema_version_ = 0;
frozen_timestamp_ = 0;
}
inline void ObSetParentArg::reset()
{
partition_key_.reset();
parent_addr_.reset();
}
inline void ObSwitchLeaderArg::reset()
{
partition_key_.reset();
leader_addr_.reset();
}
inline void ObRootMajorFreezeArg::reset()
{
try_frozen_version_ = 0;
launch_new_round_ = false;
force_launch_ = false;
}
struct ObCreateUserDefinedFunctionArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateUserDefinedFunctionArg() : ObDDLArg(), udf_()
{}
virtual ~ObCreateUserDefinedFunctionArg()
{}
bool is_valid() const
{
return !udf_.get_name_str().empty();
}
TO_STRING_KV(K_(udf));
share::schema::ObUDF udf_;
};
struct ObDropUserDefinedFunctionArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropUserDefinedFunctionArg() : tenant_id_(common::OB_INVALID_ID), name_(), if_exist_(false)
{}
virtual ~ObDropUserDefinedFunctionArg()
{}
bool is_valid() const
{
return !name_.empty();
}
virtual bool is_allow_when_upgrade() const
{
return true;
}
TO_STRING_KV(K_(tenant_id), K_(name));
uint64_t tenant_id_;
common::ObString name_;
bool if_exist_;
};
struct ObCreateOutlineArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateOutlineArg() : ObDDLArg(), or_replace_(false), outline_info_(), db_name_()
{}
virtual ~ObCreateOutlineArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(or_replace), K_(outline_info), K_(db_name));
bool or_replace_;
share::schema::ObOutlineInfo outline_info_;
common::ObString db_name_;
};
struct ObAlterOutlineArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
enum AlterOutlineOptions { ADD_OUTLINE_CONTENT = 1, ADD_CONCURRENT_LIMIT, MAX_OPTION };
ObAlterOutlineArg() : ObDDLArg(), alter_outline_info_(), db_name_()
{}
virtual ~ObAlterOutlineArg()
{}
bool is_valid() const
{
return (!db_name_.empty() && !alter_outline_info_.get_signature_str().empty() &&
(!alter_outline_info_.get_outline_content_str().empty() || alter_outline_info_.has_outline_params()));
}
TO_STRING_KV(K_(alter_outline_info), K_(db_name));
share::schema::ObAlterOutlineInfo alter_outline_info_;
common::ObString db_name_;
};
struct ObDropOutlineArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropOutlineArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), db_name_(), outline_name_()
{}
virtual ~ObDropOutlineArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
TO_STRING_KV(K_(tenant_id), K_(db_name), K_(outline_name));
uint64_t tenant_id_;
common::ObString db_name_;
common::ObString outline_name_;
};
struct ObCreateDbLinkArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObCreateDbLinkArg() : ObDDLArg(), dblink_info_()
{}
virtual ~ObCreateDbLinkArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(dblink_info));
share::schema::ObDbLinkInfo dblink_info_;
};
struct ObDropDbLinkArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDropDbLinkArg() : ObDDLArg(), tenant_id_(common::OB_INVALID_ID), dblink_name_()
{}
virtual ~ObDropDbLinkArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(dblink_name));
uint64_t tenant_id_;
common::ObString dblink_name_;
};
struct ObUseDatabaseArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObUseDatabaseArg() : ObDDLArg()
{}
};
struct ObFetchAliveServerArg {
OB_UNIS_VERSION(1);
public:
ObFetchAliveServerArg() : cluster_id_(0)
{}
TO_STRING_KV(K_(cluster_id));
bool is_valid() const
{
return cluster_id_ >= 0;
}
int64_t cluster_id_;
};
struct ObFetchAliveServerResult {
OB_UNIS_VERSION(1);
public:
TO_STRING_KV(K_(active_server_list));
bool is_valid() const
{
return !active_server_list_.empty();
}
ObServerList active_server_list_;
ObServerList inactive_server_list_;
};
struct ObLoadBaselineArg {
OB_UNIS_VERSION(1);
public:
ObLoadBaselineArg()
: is_all_tenant_(false),
tenant_id_(common::OB_INVALID_TENANT_ID),
sql_id_(),
plan_hash_value_(common::OB_INVALID_ID),
fixed_(false),
enabled_(false)
{}
virtual ~ObLoadBaselineArg()
{}
TO_STRING_KV(K(is_all_tenant_), K_(tenant_id), K_(sql_id), K_(plan_hash_value), K_(fixed), K_(enabled));
bool is_all_tenant_;
uint64_t tenant_id_;
common::ObString sql_id_;
uint64_t plan_hash_value_;
bool fixed_;
bool enabled_;
};
struct ObFlushCacheArg {
OB_UNIS_VERSION(1);
public:
ObFlushCacheArg() :
is_all_tenant_(false),
tenant_id_(common::OB_INVALID_TENANT_ID),
cache_type_(CACHE_TYPE_INVALID),
is_fine_grained_(false){};
virtual ~ObFlushCacheArg()
{}
bool is_valid() const
{
return cache_type_ > CACHE_TYPE_INVALID && cache_type_ < CACHE_TYPE_MAX;
}
int push_database(uint64_t db_id) { return db_ids_.push_back(db_id); }
TO_STRING_KV(K(is_all_tenant_), K_(tenant_id), K_(cache_type), K_(db_ids), K_(sql_id), K_(is_fine_grained));
bool is_all_tenant_;
uint64_t tenant_id_;
ObCacheType cache_type_;
common::ObSEArray<uint64_t, 8> db_ids_;
common::ObString sql_id_;
bool is_fine_grained_;
};
struct ObGetAllSchemaArg {
OB_UNIS_VERSION(1);
public:
ObGetAllSchemaArg() : schema_version_(common::OB_INVALID_VERSION)
{}
TO_STRING_KV(K_(schema_version), K_(tenant_name));
int64_t schema_version_;
common::ObString tenant_name_;
};
struct ObAdminSetTPArg : public ObServerZoneArg {
OB_UNIS_VERSION(1);
public:
ObAdminSetTPArg() : event_no_(0), occur_(0), trigger_freq_(1), error_code_(0)
{}
inline bool is_valid() const
{
return (error_code_ <= 0 && (trigger_freq_ >= 0));
}
TO_STRING_KV(K_(event_no), K_(event_name), K_(occur), K_(trigger_freq), K_(error_code), K_(server), K_(zone));
int64_t event_no_; // tracepoint no
common::ObString event_name_; // tracepoint name
int64_t occur_; // number of occurrences
int64_t trigger_freq_; // trigger frequency
int64_t error_code_; // error code to return
};
struct ObCancelTaskArg : public ObServerZoneArg {
OB_UNIS_VERSION(2);
public:
ObCancelTaskArg() : task_id_()
{}
TO_STRING_KV(K_(task_id));
share::ObTaskId task_id_;
};
struct ObReportSingleReplicaArg {
OB_UNIS_VERSION(1);
public:
ObReportSingleReplicaArg() : partition_key_()
{}
bool is_valid() const
{
return partition_key_.is_valid();
}
TO_STRING_KV(K_(partition_key));
common::ObPartitionKey partition_key_;
};
struct ObSetDiskValidArg {
OB_UNIS_VERSION(1);
public:
ObSetDiskValidArg()
{}
bool is_valid() const
{
return true;
}
};
struct ObAdminClearBalanceTaskArg {
OB_UNIS_VERSION(1);
public:
enum TaskType { AUTO = 0, MANUAL, ALL, MAX_TYPE };
ObAdminClearBalanceTaskArg() : tenant_ids_(), type_(ALL), zone_names_()
{}
~ObAdminClearBalanceTaskArg()
{}
TO_STRING_KV(K_(tenant_ids), K_(type), K_(zone_names));
common::ObSEArray<uint64_t, common::OB_PREALLOCATED_NUM> tenant_ids_;
TaskType type_;
common::ObSEArray<common::ObZone, common::OB_PREALLOCATED_NUM> zone_names_;
};
class ObMCLogInfo {
OB_UNIS_VERSION(1);
public:
ObMCLogInfo() : log_id_(common::OB_INVALID_ID), timestamp_(common::OB_INVALID_TIMESTAMP)
{}
~ObMCLogInfo(){};
bool is_valid() const
{
return common::OB_INVALID_ID != log_id_ && common::OB_INVALID_TIMESTAMP != timestamp_;
}
public:
uint64_t log_id_;
int64_t timestamp_;
TO_STRING_KV(K_(log_id), K_(timestamp));
};
struct ObChangeMemberArg {
OB_UNIS_VERSION(1);
public:
ObChangeMemberArg() : partition_key_(), member_(), quorum_(), switch_epoch_(common::OB_INVALID_VERSION)
{}
common::ObPartitionKey partition_key_;
common::ObMember member_;
int64_t quorum_;
int64_t switch_epoch_;
TO_STRING_KV(K_(partition_key), K_(member), K_(quorum), K_(switch_epoch));
};
struct ObChangeMemberCtx {
OB_UNIS_VERSION(1);
public:
ObChangeMemberCtx() : partition_key_(), ret_value_(common::OB_SUCCESS), log_info_()
{}
common::ObPartitionKey partition_key_;
int32_t ret_value_;
ObMCLogInfo log_info_;
TO_STRING_KV(K_(partition_key), K_(ret_value), K_(log_info));
};
typedef common::ObSArray<ObChangeMemberArg> ObChangeMemberArgs;
typedef common::ObSArray<ObChangeMemberCtx> ObChangeMemberCtxs;
struct ObChangeMemberCtxsWrapper {
OB_UNIS_VERSION(1);
public:
ObChangeMemberCtxsWrapper() : result_code_(common::OB_SUCCESS), ctxs_()
{}
int32_t result_code_;
ObChangeMemberCtxs ctxs_;
TO_STRING_KV(K_(result_code), K_(ctxs));
};
struct ObMemberMajorSSTableCheckArg {
OB_UNIS_VERSION(1);
public:
ObMemberMajorSSTableCheckArg() : pkey_(), table_ids_()
{}
TO_STRING_KV(K_(pkey), K_(table_ids));
common::ObPartitionKey pkey_;
common::ObSArray<uint64_t> table_ids_;
};
struct ObForceSwitchILogFileArg {
OB_UNIS_VERSION(1);
public:
ObForceSwitchILogFileArg() : force_(true)
{}
~ObForceSwitchILogFileArg()
{}
DECLARE_TO_STRING;
bool force_;
};
struct ObForceSetAllAsSingleReplicaArg {
OB_UNIS_VERSION(1);
public:
ObForceSetAllAsSingleReplicaArg() : force_(true)
{}
~ObForceSetAllAsSingleReplicaArg()
{}
DECLARE_TO_STRING;
bool force_;
};
struct ObForceSetServerListArg {
OB_UNIS_VERSION(1);
public:
ObForceSetServerListArg() : server_list_(), replica_num_(0)
{}
~ObForceSetServerListArg()
{}
DECLARE_TO_STRING;
obrpc::ObServerList server_list_;
int64_t replica_num_;
};
struct ObForceCreateSysTableArg {
OB_UNIS_VERSION(1);
public:
ObForceCreateSysTableArg()
: tenant_id_(common::OB_INVALID_TENANT_ID),
table_id_(common::OB_INVALID_ID),
last_replay_log_id_(common::OB_INVALID_ID)
{}
~ObForceCreateSysTableArg()
{}
bool is_valid() const;
DECLARE_TO_STRING;
uint64_t tenant_id_;
uint64_t table_id_;
uint64_t last_replay_log_id_;
};
struct ObForceSetLocalityArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObForceSetLocalityArg() : ObDDLArg(), locality_()
{}
virtual ~ObForceSetLocalityArg()
{}
bool is_valid() const;
int assign(const ObForceSetLocalityArg& other);
virtual bool is_allow_when_upgrade() const
{
return true;
}
common::ObString locality_;
TO_STRING_KV(K_(exec_tenant_id), K_(locality));
};
struct ObRootSplitPartitionArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObRootSplitPartitionArg() : ObDDLArg(), table_id_(common::OB_INVALID_ID)
{}
virtual ~ObRootSplitPartitionArg()
{}
bool is_valid() const
{
return table_id_ != common::OB_INVALID_ID;
}
int assign(const ObRootSplitPartitionArg& other);
virtual bool is_allow_when_upgrade() const
{
return true;
}
DECLARE_TO_STRING;
uint64_t table_id_;
};
struct ObSplitPartitionArg {
OB_UNIS_VERSION(1);
public:
ObSplitPartitionArg() : split_info_()
{}
~ObSplitPartitionArg()
{}
TO_STRING_KV(K_(split_info));
bool is_valid() const
{
return split_info_.is_valid();
}
void reset()
{
split_info_.reset();
}
public:
share::ObSplitPartition split_info_;
};
struct ObSplitPartitionResult {
OB_UNIS_VERSION(1);
public:
ObSplitPartitionResult() : results_()
{}
~ObSplitPartitionResult()
{}
void reset()
{
results_.reuse();
}
common::ObSArray<share::ObPartitionSplitProgress>& get_result()
{
return results_;
}
const common::ObSArray<share::ObPartitionSplitProgress>& get_result() const
{
return results_;
}
TO_STRING_KV(K_(results));
private:
common::ObSArray<share::ObPartitionSplitProgress> results_;
};
struct ObSplitPartitionBatchArg {
OB_UNIS_VERSION(1);
public:
ObSplitPartitionBatchArg()
{}
~ObSplitPartitionBatchArg()
{}
bool is_valid() const;
int assign(const ObSplitPartitionBatchArg& other);
void reset()
{
return split_info_.reset();
}
DECLARE_TO_STRING;
share::ObSplitPartition split_info_;
private:
DISALLOW_COPY_AND_ASSIGN(ObSplitPartitionBatchArg);
};
struct ObSplitPartitionBatchRes {
OB_UNIS_VERSION(1);
public:
ObSplitPartitionBatchRes() : ret_list_()
{}
~ObSplitPartitionBatchRes()
{}
inline void reset()
{
ret_list_.reset();
}
int assign(const ObSplitPartitionBatchRes& other);
inline void reuse();
DECLARE_TO_STRING;
// response includes all rets
common::ObSArray<common::ObPartitionKey> ret_list_;
private:
DISALLOW_COPY_AND_ASSIGN(ObSplitPartitionBatchRes);
};
struct ObQueryMaxDecidedTransVersionRequest {
OB_UNIS_VERSION(1);
public:
ObQueryMaxDecidedTransVersionRequest() : partition_array_(), last_max_decided_trans_version_(0)
{}
~ObQueryMaxDecidedTransVersionRequest()
{}
void reset()
{
partition_array_.reset();
last_max_decided_trans_version_ = 0;
}
common::ObPartitionArray partition_array_;
int64_t last_max_decided_trans_version_;
TO_STRING_KV(K(partition_array_), K_(last_max_decided_trans_version));
};
struct ObQueryMaxDecidedTransVersionResponse {
OB_UNIS_VERSION(1);
public:
ObQueryMaxDecidedTransVersionResponse() : ret_value_(common::OB_SUCCESS), trans_version_(0)
{}
~ObQueryMaxDecidedTransVersionResponse()
{}
void reset()
{
ret_value_ = common::OB_SUCCESS;
trans_version_ = 0;
}
int ret_value_;
int64_t trans_version_;
common::ObPartitionKey pkey_;
TO_STRING_KV(K(ret_value_), K(trans_version_), K_(pkey));
};
struct ObQueryIsValidMemberRequest {
OB_UNIS_VERSION(1);
public:
ObQueryIsValidMemberRequest() : self_addr_(), partition_array_()
{}
~ObQueryIsValidMemberRequest()
{}
void reset()
{
self_addr_.reset();
partition_array_.reset();
}
common::ObAddr self_addr_;
common::ObPartitionArray partition_array_;
TO_STRING_KV(K(self_addr_), K(partition_array_));
};
struct ObQueryIsValidMemberResponse {
OB_UNIS_VERSION(1);
public:
ObQueryIsValidMemberResponse()
: ret_value_(common::OB_SUCCESS), partition_array_(), candidates_status_(), ret_array_()
{}
~ObQueryIsValidMemberResponse()
{}
void reset()
{
ret_value_ = common::OB_SUCCESS;
partition_array_.reset();
candidates_status_.reset();
ret_array_.reset();
}
int ret_value_;
common::ObPartitionArray partition_array_;
common::ObSEArray<bool, 16> candidates_status_;
common::ObSEArray<int, 16> ret_array_;
TO_STRING_KV(K(ret_value_), K(partition_array_), K(candidates_status_), K(ret_array_));
};
struct ObQueryMaxFlushedILogIdRequest {
OB_UNIS_VERSION(1);
public:
ObQueryMaxFlushedILogIdRequest() : partition_array_()
{}
~ObQueryMaxFlushedILogIdRequest()
{}
void reset()
{
partition_array_.reset();
}
common::ObPartitionArray partition_array_;
TO_STRING_KV(K(partition_array_));
};
struct ObQueryMaxFlushedILogIdResponse {
OB_UNIS_VERSION(1);
public:
ObQueryMaxFlushedILogIdResponse() : err_code_(common::OB_SUCCESS), partition_array_(), max_flushed_ilog_ids_()
{}
~ObQueryMaxFlushedILogIdResponse()
{}
void reset()
{
err_code_ = common::OB_SUCCESS;
partition_array_.reset();
max_flushed_ilog_ids_.reset();
}
int err_code_;
common::ObPartitionArray partition_array_;
common::ObSEArray<uint64_t, 16> max_flushed_ilog_ids_;
TO_STRING_KV(K_(err_code), K_(partition_array), K_(max_flushed_ilog_ids));
};
struct ObBootstrapArg {
OB_UNIS_VERSION(1);
public:
ObBootstrapArg()
: server_list_(),
cluster_type_(common::PRIMARY_CLUSTER),
initial_frozen_version_(0),
initial_schema_version_(0),
primary_cluster_id_(common::OB_INVALID_ID),
primary_rs_list_(),
freeze_schemas_(),
frozen_status_()
{}
~ObBootstrapArg()
{}
TO_STRING_KV(K_(server_list), K_(cluster_type), K_(initial_frozen_version), K_(initial_schema_version),
K_(primary_cluster_id), K_(primary_rs_list), K_(freeze_schemas), K_(frozen_status));
int assign(const ObBootstrapArg& arg);
ObServerInfoList server_list_;
common::ObClusterType cluster_type_;
int64_t initial_frozen_version_;
int64_t initial_schema_version_;
int64_t primary_cluster_id_;
common::ObSArray<common::ObAddr> primary_rs_list_;
common::ObSArray<share::TenantIdAndSchemaVersion> freeze_schemas_;
common::ObSArray<storage::ObFrozenStatus> frozen_status_;
};
struct ObBatchStartElectionArg {
OB_UNIS_VERSION(1);
public:
enum SwitchType {
INVALID_TYPE = -1,
SWITCHOVER,
FAILOVER,
};
ObBatchStartElectionArg()
: pkeys_(),
lease_start_time_(0),
leader_(),
member_list_(),
switch_timestamp_(0),
switch_type_(INVALID_TYPE),
quorum_(-1),
trace_id_()
{}
~ObBatchStartElectionArg()
{}
int add_partition_key(const common::ObPartitionKey& pkey);
const ObPkeyArray& get_pkey_array() const
{
return pkeys_;
}
int set_leader(const common::ObAddr& leader)
{
leader_ = leader;
return common::OB_SUCCESS;
}
const common::ObAddr get_leader() const
{
return leader_;
}
void set_switch_timestamp(const int64_t switch_timestamp)
{
switch_timestamp_ = switch_timestamp;
}
int64_t get_switch_timestamp() const
{
return switch_timestamp_;
}
int set_member_list(const common::ObMemberList& member_list)
{
return member_list_.deep_copy(member_list);
}
const common::ObMemberList& get_member_list() const
{
return member_list_;
}
void set_quorum(const int64_t quorum)
{
quorum_ = quorum;
}
int64_t get_quorum() const
{
return quorum_;
}
int assign(const ObBatchStartElectionArg& other);
int64_t count() const
{
return pkeys_.count();
}
bool reach_concurrency_limit() const
{
return pkeys_.count() >= MAX_COUNT;
}
bool has_task() const
{
return pkeys_.count() > 0;
}
void set_lease_timestamp()
{
lease_start_time_ = common::ObTimeUtility::current_time();
}
int64_t get_lease_start() const
{
return lease_start_time_;
}
void set_trace_id(const common::ObCurTraceId::TraceId& trace_id)
{
trace_id_ = trace_id;
}
void reset();
bool is_valid() const;
void set_switch_type(const SwitchType& switch_type)
{
switch_type_ = switch_type;
}
SwitchType get_switch_type() const
{
return switch_type_;
}
TO_STRING_KV(K_(trace_id), "count", pkeys_.count(), K_(member_list), K_(lease_start_time), K_(leader),
K_(switch_timestamp), K_(switch_type), K_(pkeys), K_(quorum));
public:
static bool is_valid_switch_type(const int32_t switch_type)
{
return (switch_type >= SWITCHOVER && switch_type <= FAILOVER);
}
ObPkeyArray pkeys_;
private:
int64_t lease_start_time_;
common::ObAddr leader_;
common::ObMemberList member_list_;
int64_t switch_timestamp_;
SwitchType switch_type_;
int64_t quorum_; // In the failover process, there may be a single copy, so quorum needs to be specified by rs
common::ObCurTraceId::TraceId trace_id_;
private:
DISALLOW_COPY_AND_ASSIGN(ObBatchStartElectionArg);
};
struct ObBatchFlashbackArg {
OB_UNIS_VERSION(1);
public:
static const int64_t MAX_COUNT = 128;
ObBatchFlashbackArg()
: switchover_timestamp_(0),
flashback_to_ts_(0),
leader_(),
pkeys_(),
flashback_from_ts_(0),
frozen_timestamp_(0),
is_logical_flashback_(false),
query_end_time_(0),
schema_version_(0)
{}
~ObBatchFlashbackArg()
{}
void set_leader(const common::ObAddr& addr)
{
leader_ = addr;
}
void reset();
void set_switchover_timestamp(const int64_t switchover_timestamp)
{
switchover_timestamp_ = switchover_timestamp;
}
void set_flashback_ts(const int64_t flashback_from_ts, const int64_t flashback_to_ts)
{
flashback_from_ts_ = flashback_from_ts;
flashback_to_ts_ = flashback_to_ts;
}
void set_frozen_timestamp(const int64_t frozen_timestamp)
{
frozen_timestamp_ = frozen_timestamp;
}
int64_t get_frozen_timestamp() const
{
return frozen_timestamp_;
}
void set_is_logical_flashback(const bool is_logical_flashback)
{
is_logical_flashback_ = is_logical_flashback;
}
bool is_logical_flashback() const
{
return is_logical_flashback_;
}
void set_query_end_time(const int64_t query_end_time)
{
query_end_time_ = query_end_time;
}
int64_t get_query_end_time() const
{
return query_end_time_;
}
void set_schema_version(const int64_t schema_version)
{
schema_version_ = schema_version;
}
int64_t get_schema_version() const
{
return schema_version_;
}
bool reach_concurrency_limit() const
{
return pkeys_.count() >= MAX_COUNT;
}
int add_pkey(const common::ObPartitionKey& pkey);
const ObPkeyArray& get_pkey_array() const
{
return pkeys_;
}
common::ObAddr get_server() const
{
return leader_;
}
int64_t get_flashback_to_ts() const
{
return flashback_to_ts_;
}
int64_t get_flashback_from_ts() const
{
return flashback_from_ts_;
}
int64_t get_switchover_timestamp() const
{
return switchover_timestamp_;
}
bool is_valid() const;
bool has_task() const
{
return pkeys_.count() > 0;
}
TO_STRING_KV(K_(switchover_timestamp), K_(flashback_to_ts), K_(flashback_from_ts), K_(leader),
K_(is_logical_flashback), K_(pkeys), K_(frozen_timestamp), K_(query_end_time), K_(schema_version));
public:
int64_t switchover_timestamp_;
int64_t flashback_to_ts_;
common::ObAddr leader_;
ObPkeyArray pkeys_;
int64_t flashback_from_ts_;
int64_t frozen_timestamp_;
bool is_logical_flashback_; // failover use
int64_t query_end_time_;
int64_t schema_version_;
};
struct ObAlterClusterInfoArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
enum OpType {
INVALID_TYPE = -1,
SWITCH_TO_STANDBY = 0,
SWITCH_TO_PRIMARY = 1,
FAILOVER_TO_PRIMARY = 2,
CONVERT_TO_STANDBY = 3,
INTACT_FAILOVER = 4,
SET_PROTECTION_MODE = 5,
UPDATE_PROTECTION_LEVEL = 6,
UPDATE_SYNC_STANDBY_PROTECTION_LEVEL = 7,
};
ObAlterClusterInfoArg()
: op_type_(INVALID_TYPE),
mode_(common::MAXIMUM_PERFORMANCE_MODE),
is_force_(false),
level_(common::MAXIMUM_PERFORMANCE_LEVEL)
{}
TO_STRING_KV(K_(op_type), K_(ddl_stmt_str), K_(mode), K_(level), K_(is_force));
int assign(ObAlterClusterInfoArg& arg);
~ObAlterClusterInfoArg()
{}
const char* get_alter_type_str() const
{
const char* cstr = "invalid";
switch (op_type_) {
case SWITCH_TO_STANDBY:
cstr = "switchover to physical standby";
break;
case SWITCH_TO_PRIMARY:
cstr = "switchover to primary";
break;
case FAILOVER_TO_PRIMARY:
cstr = "failover to primary";
break;
case CONVERT_TO_STANDBY:
cstr = "convert to physical standby";
break;
case INTACT_FAILOVER:
cstr = "intact failover to primary";
break;
case SET_PROTECTION_MODE:
cstr = "set cluster protection mode";
break;
case UPDATE_PROTECTION_LEVEL:
cstr = "update protection level in maximum availability mode";
break;
case UPDATE_SYNC_STANDBY_PROTECTION_LEVEL:
cstr = "update sync standby protection level";
break;
default:
cstr = "invalid";
break;
}
return cstr;
}
public:
OpType op_type_;
common::ObProtectionMode mode_;
bool is_force_;
common::ObProtectionLevel level_;
};
struct ObAdminClusterArg {
OB_UNIS_VERSION(1);
public:
enum AlterClusterType {
INVALID_TYPE = -1,
ADD_CLUSTER = 0,
REMOVE_CLUSTER,
ENABLE_CLUSTER,
DISABLE_CLUSTER,
ALTER_CLUSTER,
};
public:
ObAdminClusterArg()
: cluster_name_(),
cluster_id_(common::OB_INVALID_ID),
alter_type_(INVALID_TYPE),
is_force_(false),
ddl_stmt_str_(),
rootservice_list_(),
redo_transport_options_()
{}
~ObAdminClusterArg()
{}
void set_cluster_name(const common::ObString& cluster_name)
{
cluster_name_ = cluster_name;
}
void set_cluster_id(const int64_t cluster_id)
{
cluster_id_ = cluster_id;
}
void set_alter_cluster_type(const AlterClusterType type)
{
alter_type_ = type;
}
void set_is_force(const bool is_force)
{
is_force_ = is_force;
}
bool is_valid() const
{
return !cluster_name_.empty() && common::OB_INVALID_ID != cluster_id_ && INVALID_TYPE != alter_type_;
}
void set_ddl_stmt_str(const common::ObString& ddl_stmt_str)
{
ddl_stmt_str_ = ddl_stmt_str;
}
int set_rootservice_list(const common::ObIArray<common::ObAddr>& rs_list)
{
return rootservice_list_.assign(rs_list);
}
void set_redo_transport_options_str(const common::ObString& redo_transport_options_str)
{
redo_transport_options_ = redo_transport_options_str;
}
const char* get_cluster_admin_type_cstr() const
{
const char* cstr = "invalid";
switch (alter_type_) {
case ADD_CLUSTER:
cstr = "add cluster";
break;
case REMOVE_CLUSTER:
cstr = "remove cluster";
break;
case ENABLE_CLUSTER:
cstr = "enable cluster synchronization";
break;
case DISABLE_CLUSTER:
cstr = "disable cluster synchronization";
break;
case ALTER_CLUSTER:
cstr = "alter cluster";
break;
default:
cstr = "invalid";
break;
}
return cstr;
}
TO_STRING_KV(K_(cluster_name), K_(cluster_id), K_(alter_type), K_(is_force), K_(ddl_stmt_str), K_(rootservice_list),
K_(redo_transport_options));
common::ObString cluster_name_;
int64_t cluster_id_;
AlterClusterType alter_type_;
bool is_force_;
common::ObString ddl_stmt_str_;
common::ObSArray<common::ObAddr> rootservice_list_;
common::ObString redo_transport_options_;
};
struct ObClusterActionVerifyArg {
OB_UNIS_VERSION(1);
public:
enum VerifyType {
INVALID_TYPE = -1,
ADD_CLUSTER_VERIFY = 0,
};
public:
ObClusterActionVerifyArg() : verify_type_(INVALID_TYPE)
{}
~ObClusterActionVerifyArg()
{}
void set_verify_type(const VerifyType type)
{
verify_type_ = type;
}
bool is_valid() const
{
return INVALID_TYPE != verify_type_;
}
TO_STRING_KV(K_(verify_type));
VerifyType verify_type_;
};
struct ObDDLNopOpreatorArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObDDLNopOpreatorArg() : schema_operation_()
{}
~ObDDLNopOpreatorArg()
{}
public:
share::schema::ObSchemaOperation schema_operation_;
bool is_valid() const
{
return schema_operation_.is_valid();
}
virtual bool is_allow_when_upgrade() const
{
return true;
}
void reset()
{
schema_operation_.reset();
}
TO_STRING_KV(K_(schema_operation));
private:
DISALLOW_COPY_AND_ASSIGN(ObDDLNopOpreatorArg);
};
// end for ddl arg
//////////////////////////////////////////////////
struct ObEstPartArgElement {
ObEstPartArgElement() : index_id_(common::OB_INVALID_ID), range_columns_count_(0)
{}
// Essentially, we can use ObIArray<ObNewRange> here
// For compatibility reason, we still use ObSimpleBatch
common::ObSimpleBatch batch_;
common::ObQueryFlag scan_flag_;
int64_t index_id_;
int64_t range_columns_count_;
TO_STRING_KV(K(scan_flag_), K(index_id_), K(batch_), K(range_columns_count_));
int64_t get_serialize_size(void) const;
int serialize(char* buf, const int64_t buf_len, int64_t& pos) const;
int deserialize(common::ObIAllocator& allocator, const char* buf, const int64_t data_len, int64_t& pos);
};
struct ObEstPartArg {
// Deserialization use
common::ObArenaAllocator allocator_;
//***** Parameters involved in obtaining master table information
common::ObPartitionKey pkey_;
int64_t schema_version_;
common::ObSEArray<uint64_t, 8, common::ModulePageAllocator, true> column_ids_;
// Estimated table row length parameter
common::ObSEArray<common::ObPartitionKey, 4, common::ModulePageAllocator, true> partition_keys_;
// Estimate the number of rows in the entire table parameter
ObEstPartArgElement scan_param_;
//***** end
// Get statistics specific variables for each index
common::ObSEArray<ObEstPartArgElement, 4, common::ModulePageAllocator, true> index_params_;
// best estimation partition key for each index
common::ObSEArray<common::ObPartitionKey, 4, common::ModulePageAllocator, true> index_pkeys_;
ObEstPartArg()
: allocator_(common::ObModIds::OB_SQL_QUERY_RANGE),
pkey_(),
schema_version_(0),
column_ids_(),
partition_keys_(),
scan_param_(),
index_params_(),
index_pkeys_()
{}
~ObEstPartArg()
{}
bool is_valid_table_pkey() const
{
return pkey_.is_valid();
}
TO_STRING_KV(K_(column_ids), K_(pkey), K_(schema_version), K_(partition_keys), K_(scan_param), K_(index_params),
K_(index_pkeys));
OB_UNIS_VERSION(1);
};
struct ObEstPartResElement {
int64_t logical_row_count_;
int64_t physical_row_count_;
/**
* @brief reliable_
* storage estimation is not successfully called,
* we use ndv to estimate row count in the following
*/
bool reliable_;
common::ObSEArray<common::ObEstRowCountRecord, common::MAX_SSTABLE_CNT_IN_STORAGE, common::ModulePageAllocator, true>
est_records_;
ObEstPartResElement()
{
reset();
}
void reset()
{
logical_row_count_ = common::OB_INVALID_COUNT;
physical_row_count_ = common::OB_INVALID_COUNT;
reliable_ = false;
est_records_.reset();
}
TO_STRING_KV(K(logical_row_count_), K(physical_row_count_), K(reliable_), K(est_records_));
OB_UNIS_VERSION(1);
};
struct ObEstPartRowCountSizeRes {
int64_t row_count_;
int64_t part_size_;
double avg_row_size_;
/**
* @brief reliable_
* reliable = true if the table is empty,
* we will use default row count in the following
*/
bool reliable_;
ObEstPartRowCountSizeRes()
{
reset();
}
void reset()
{
row_count_ = common::OB_INVALID_COUNT;
part_size_ = common::OB_INVALID_COUNT;
avg_row_size_ = -1;
reliable_ = false;
}
TO_STRING_KV(K(row_count_), K(part_size_), K(avg_row_size_), K(reliable_));
OB_UNIS_VERSION(1);
};
struct ObEstPartRes {
ObEstPartRowCountSizeRes part_rowcount_size_res_;
common::ObSEArray<ObEstPartResElement, 4, common::ModulePageAllocator, true> index_param_res_;
ObEstPartRes() : part_rowcount_size_res_(), index_param_res_()
{}
TO_STRING_KV(K(part_rowcount_size_res_), K(index_param_res_));
OB_UNIS_VERSION(1);
};
struct TenantServerUnitConfig {
public:
TenantServerUnitConfig()
: tenant_id_(common::OB_INVALID_ID),
compat_mode_(share::ObWorker::CompatMode::INVALID),
unit_config_(),
replica_type_(common::ObReplicaType::REPLICA_TYPE_MAX),
if_not_grant_(false),
is_delete_(false)
{}
int 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);
uint64_t tenant_id_;
share::ObWorker::CompatMode compat_mode_;
share::ObUnitConfig unit_config_;
common::ObReplicaType replica_type_;
bool if_not_grant_;
bool is_delete_;
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(unit_config), K_(compat_mode), K_(replica_type), K_(if_not_grant), K_(is_delete));
OB_UNIS_VERSION(1);
};
struct ObGetWRSArg {
OB_UNIS_VERSION(1);
public:
enum Scope { INVALID_RANGE = 0, INNER_TABLE, USER_TABLE, ALL_TABLE };
TO_STRING_KV(K_(tenant_id), K_(scope), K_(need_filter));
bool is_valid() const;
int64_t tenant_id_;
Scope scope_; // The machine-readable timestamp can be calculated separately for the timestamp of the system table or
// user table, or collectively calculated together
bool need_filter_;
ObGetWRSArg()
: tenant_id_(common::OB_INVALID_TENANT_ID),
scope_(ALL_TABLE), // Statistics of all types of tables by default
need_filter_(false) // Unreadable partitions are not filtered by default
{}
explicit ObGetWRSArg(const int64_t tenant_id)
: tenant_id_(tenant_id),
scope_(ALL_TABLE), // Statistics of all types of tables by default
need_filter_(false) // Unreadable partitions are not filtered by default
{}
};
struct ObGetWRSResult {
OB_UNIS_VERSION(1);
public:
ObGetWRSResult() : self_addr_(), err_code_(0), replica_wrs_info_list_()
{}
void reset()
{
self_addr_.reset();
err_code_ = 0;
replica_wrs_info_list_.reset();
}
public:
common::ObAddr self_addr_;
int err_code_; // error code
// According to the ObGetWRSArg::need_filter_ field to determine whether to filter the copies with invalid
// machine-readable timestamps
share::ObReplicaWrsInfoList replica_wrs_info_list_; // Standby machine-readable timestamp of each copy of this server
TO_STRING_KV(K_(err_code), K_(self_addr), "replica_count", replica_wrs_info_list_.count(), K_(replica_wrs_info_list));
};
struct ObTenantSchemaVersions {
OB_UNIS_VERSION(1);
public:
ObTenantSchemaVersions() : tenant_schema_versions_()
{}
common::ObSArray<share::TenantIdAndSchemaVersion> tenant_schema_versions_;
int add(const int64_t tenant_id, const int64_t schema_version);
void reset()
{
return tenant_schema_versions_.reset();
}
bool is_valid() const
{
return 0 < tenant_schema_versions_.count();
}
int assign(const ObTenantSchemaVersions& arg)
{
int ret = common::OB_SUCCESS;
if (OB_FAIL(tenant_schema_versions_.assign(arg.tenant_schema_versions_))) {
SHARE_LOG(WARN, "failed to assign tenant schema version", KR(ret), K(arg));
}
return ret;
}
TO_STRING_KV(K_(tenant_schema_versions));
};
struct ObGetSchemaArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObGetSchemaArg() : reserve_(0), ignore_fail_(false)
{}
virtual bool is_allow_when_upgrade() const
{
return true;
}
int64_t reserve_;
bool ignore_fail_;
};
struct TenantIdAndStats {
OB_UNIS_VERSION(1);
public:
TenantIdAndStats()
: tenant_id_(common::OB_INVALID_TENANT_ID),
refreshed_schema_version_(0),
ddl_lag_(0),
min_sys_table_scn_(0),
min_user_table_scn_(0)
{}
TenantIdAndStats(const uint64_t tenant_id, const int64_t refreshed_schema_version, const int64_t ddl_lag,
const int64_t min_sys_table_scn, const int64_t min_user_table_scn)
: tenant_id_(tenant_id),
refreshed_schema_version_(refreshed_schema_version),
ddl_lag_(ddl_lag),
min_sys_table_scn_(min_sys_table_scn),
min_user_table_scn_(min_user_table_scn)
{}
TO_STRING_KV(K_(tenant_id), K_(refreshed_schema_version), K_(ddl_lag), K_(min_sys_table_scn), K_(min_user_table_scn));
void reset()
{
tenant_id_ = common::OB_INVALID_TENANT_ID;
refreshed_schema_version_ = 0;
ddl_lag_ = 0;
min_sys_table_scn_ = 0;
min_user_table_scn_ = 0;
}
uint64_t tenant_id_;
int64_t refreshed_schema_version_;
int64_t ddl_lag_;
int64_t min_sys_table_scn_;
int64_t min_user_table_scn_;
};
struct ObClusterTenantStats {
OB_UNIS_VERSION(1);
public:
void reset()
{
return tenant_stats_array_.reset();
}
int assign(const ObClusterTenantStats& other)
{
int ret = common::OB_SUCCESS;
if (OB_FAIL(tenant_stats_array_.assign(other.tenant_stats_array_))) {
SHARE_LOG(WARN, "fail to assign partition ids", K(ret));
}
return ret;
}
TO_STRING_KV(K_(tenant_stats_array));
common::ObSArray<obrpc::TenantIdAndStats> tenant_stats_array_;
};
struct ObFinishSchemaSplitArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObFinishSchemaSplitArg()
: tenant_id_(common::OB_INVALID_TENANT_ID), type_(rootserver::ObRsJobType::JOB_TYPE_SCHEMA_SPLIT_V2)
{}
virtual ~ObFinishSchemaSplitArg()
{}
bool is_valid() const;
int assign(const ObFinishSchemaSplitArg& other);
virtual bool is_allow_when_upgrade() const
{
return true;
}
TO_STRING_KV(K_(tenant_id), K_(type));
public:
uint64_t tenant_id_;
rootserver::ObRsJobType type_;
};
struct ObBroadcastSchemaArg {
OB_UNIS_VERSION(1);
public:
ObBroadcastSchemaArg() : tenant_id_(common::OB_INVALID_TENANT_ID), schema_version_(common::OB_INVALID_VERSION)
{}
void reset();
public:
uint64_t tenant_id_;
int64_t schema_version_;
TO_STRING_KV(K_(tenant_id), K_(schema_version));
};
struct ObCheckMergeFinishArg {
OB_UNIS_VERSION(1);
public:
ObCheckMergeFinishArg() : frozen_version_(0)
{}
bool is_valid() const;
public:
int64_t frozen_version_;
TO_STRING_KV(K_(frozen_version));
};
struct ObGetRecycleSchemaVersionsArg {
OB_UNIS_VERSION(1);
public:
ObGetRecycleSchemaVersionsArg() : tenant_ids_()
{}
virtual ~ObGetRecycleSchemaVersionsArg()
{}
bool is_valid() const;
void reset();
int assign(const ObGetRecycleSchemaVersionsArg& other);
public:
common::ObSArray<uint64_t> tenant_ids_;
TO_STRING_KV(K_(tenant_ids));
};
struct ObGetRecycleSchemaVersionsResult {
OB_UNIS_VERSION(1);
public:
ObGetRecycleSchemaVersionsResult() : recycle_schema_versions_()
{}
virtual ~ObGetRecycleSchemaVersionsResult()
{}
bool is_valid() const;
void reset();
int assign(const ObGetRecycleSchemaVersionsResult& other);
public:
common::ObSArray<share::TenantIdAndSchemaVersion> recycle_schema_versions_;
TO_STRING_KV(K_(recycle_schema_versions));
};
struct ObGetClusterInfoArg {
OB_UNIS_VERSION(1);
public:
ObGetClusterInfoArg()
: need_check_sync_(false),
max_primary_schema_version_(common::OB_INVALID_VERSION),
primary_schema_versions_(),
cluster_version_(common::OB_INVALID_ID),
standby_became_primary_scn_(common::OB_INVALID_VERSION)
{}
bool is_valid() const;
void reset();
TO_STRING_KV(K_(need_check_sync), K_(max_primary_schema_version), K_(primary_schema_versions), K_(cluster_version),
K_(standby_became_primary_scn));
public:
bool need_check_sync_;
int64_t max_primary_schema_version_; // The largest schema version of the main library system tenant
ObTenantSchemaVersions primary_schema_versions_; // The schema version of all tenants of the main library, used to
// check user_tenant_schema_sync
uint64_t cluster_version_;
int64_t standby_became_primary_scn_;
};
struct ObCheckAddStandbyArg {
OB_UNIS_VERSION(1);
public:
ObCheckAddStandbyArg() : cluster_version_(common::OB_INVALID_ID)
{}
bool is_valid() const
{
return common::OB_INVALID_ID != cluster_version_;
}
void reset()
{
cluster_version_ = common::OB_INVALID_ID;
}
TO_STRING_KV(K_(cluster_version));
public:
uint64_t cluster_version_;
};
class ObHaGtsPingRequest {
OB_UNIS_VERSION(1);
public:
ObHaGtsPingRequest()
: gts_id_(common::OB_INVALID_ID),
req_id_(common::OB_INVALID_ID),
epoch_id_(common::OB_INVALID_TIMESTAMP),
request_ts_(common::OB_INVALID_TIMESTAMP)
{}
~ObHaGtsPingRequest()
{}
public:
void reset()
{
gts_id_ = common::OB_INVALID_ID;
req_id_ = common::OB_INVALID_ID;
epoch_id_ = common::OB_INVALID_TIMESTAMP;
request_ts_ = common::OB_INVALID_TIMESTAMP;
}
bool is_valid() const
{
return common::is_valid_gts_id(gts_id_) && common::OB_INVALID_ID != req_id_ && epoch_id_ > 0 && request_ts_ > 0;
}
void set(const uint64_t gts_id, const uint64_t req_id, const int64_t epoch_id, const int64_t request_ts)
{
gts_id_ = gts_id;
req_id_ = req_id;
epoch_id_ = epoch_id;
request_ts_ = request_ts;
}
uint64_t get_gts_id() const
{
return gts_id_;
}
uint64_t get_req_id() const
{
return req_id_;
}
int64_t get_epoch_id() const
{
return epoch_id_;
}
int64_t get_request_ts() const
{
return request_ts_;
}
TO_STRING_KV(K(gts_id_), K(req_id_), K(epoch_id_), K(request_ts_));
private:
uint64_t gts_id_;
uint64_t req_id_;
int64_t epoch_id_;
int64_t request_ts_;
};
class ObHaGtsPingResponse {
OB_UNIS_VERSION(1);
public:
ObHaGtsPingResponse()
: gts_id_(common::OB_INVALID_ID),
req_id_(common::OB_INVALID_ID),
epoch_id_(common::OB_INVALID_TIMESTAMP),
response_ts_(common::OB_INVALID_TIMESTAMP)
{}
~ObHaGtsPingResponse()
{}
public:
void reset()
{
gts_id_ = common::OB_INVALID_ID;
req_id_ = common::OB_INVALID_ID;
epoch_id_ = common::OB_INVALID_TIMESTAMP;
response_ts_ = common::OB_INVALID_TIMESTAMP;
}
bool is_valid() const
{
return common::is_valid_gts_id(gts_id_) && common::OB_INVALID_ID != req_id_ && epoch_id_ > 0 && response_ts_ > 0;
}
void set(const uint64_t gts_id, const uint64_t req_id, const int64_t epoch_id, const int64_t response_ts)
{
gts_id_ = gts_id;
req_id_ = req_id;
epoch_id_ = epoch_id;
response_ts_ = response_ts;
}
uint64_t get_gts_id() const
{
return gts_id_;
}
uint64_t get_req_id() const
{
return req_id_;
}
int64_t get_epoch_id() const
{
return epoch_id_;
}
int64_t get_response_ts() const
{
return response_ts_;
}
TO_STRING_KV(K(gts_id_), K(req_id_), K(epoch_id_), K(response_ts_));
private:
uint64_t gts_id_;
uint64_t req_id_;
int64_t epoch_id_;
int64_t response_ts_;
};
class ObHaGtsGetRequest {
OB_UNIS_VERSION(1);
public:
ObHaGtsGetRequest()
: gts_id_(common::OB_INVALID_ID),
self_addr_(),
tenant_id_(common::OB_INVALID_TENANT_ID),
srr_(common::OB_INVALID_TIMESTAMP)
{}
~ObHaGtsGetRequest()
{}
public:
void reset()
{
gts_id_ = common::OB_INVALID_ID;
self_addr_.reset();
tenant_id_ = common::OB_INVALID_TENANT_ID;
srr_.reset();
}
bool is_valid() const
{
return common::is_valid_gts_id(gts_id_) && self_addr_.is_valid() && srr_.is_valid();
}
void set(const uint64_t gts_id, const common::ObAddr& self_addr, const uint64_t tenant_id,
const transaction::MonotonicTs srr)
{
gts_id_ = gts_id;
self_addr_ = self_addr;
tenant_id_ = tenant_id;
srr_ = srr;
}
uint64_t get_gts_id() const
{
return gts_id_;
}
const common::ObAddr& get_self_addr() const
{
return self_addr_;
}
uint64_t get_tenant_id() const
{
return tenant_id_;
}
transaction::MonotonicTs get_srr() const
{
return srr_;
}
TO_STRING_KV(K(gts_id_), K(self_addr_), K(tenant_id_), K(srr_));
private:
uint64_t gts_id_;
common::ObAddr self_addr_;
// TODO: To be deleted
uint64_t tenant_id_;
transaction::MonotonicTs srr_;
};
class ObHaGtsGetResponse {
OB_UNIS_VERSION(1);
public:
ObHaGtsGetResponse()
: gts_id_(common::OB_INVALID_ID),
tenant_id_(common::OB_INVALID_TENANT_ID),
srr_(common::OB_INVALID_TIMESTAMP),
gts_(common::OB_INVALID_TIMESTAMP)
{}
~ObHaGtsGetResponse()
{}
public:
void reset()
{
gts_id_ = common::OB_INVALID_ID;
tenant_id_ = common::OB_INVALID_TENANT_ID;
srr_.reset();
gts_ = common::OB_INVALID_TIMESTAMP;
}
bool is_valid() const
{
return common::is_valid_gts_id(gts_id_) && srr_.is_valid() && gts_ > 0;
}
void set(const uint64_t gts_id, const uint64_t tenant_id, const transaction::MonotonicTs srr, const int64_t gts)
{
gts_id_ = gts_id;
tenant_id_ = tenant_id;
srr_ = srr;
gts_ = gts;
}
int64_t get_gts_id() const
{
return gts_id_;
}
uint64_t get_tenant_id() const
{
return tenant_id_;
}
transaction::MonotonicTs get_srr() const
{
return srr_;
}
int64_t get_gts() const
{
return gts_;
}
TO_STRING_KV(K(gts_id_), K(tenant_id_), K(srr_), K(gts_));
private:
uint64_t gts_id_;
// TODO: To be deleted
uint64_t tenant_id_;
transaction::MonotonicTs srr_;
int64_t gts_;
};
class ObHaGtsHeartbeat {
OB_UNIS_VERSION(1);
public:
ObHaGtsHeartbeat() : gts_id_(common::OB_INVALID_ID), addr_()
{}
~ObHaGtsHeartbeat()
{}
public:
bool is_valid() const
{
return common::is_valid_gts_id(gts_id_) && addr_.is_valid();
}
void set(const uint64_t gts_id, const common::ObAddr& addr)
{
gts_id_ = gts_id;
addr_ = addr;
}
uint64_t get_gts_id() const
{
return gts_id_;
}
const common::ObAddr& get_addr() const
{
return addr_;
}
TO_STRING_KV(K(gts_id_), K(addr_));
private:
uint64_t gts_id_;
common::ObAddr addr_;
};
class ObHaGtsUpdateMetaRequest {
OB_UNIS_VERSION(1);
public:
ObHaGtsUpdateMetaRequest()
: gts_id_(common::OB_INVALID_ID),
epoch_id_(common::OB_INVALID_TIMESTAMP),
member_list_(),
local_ts_(common::OB_INVALID_TIMESTAMP)
{}
~ObHaGtsUpdateMetaRequest()
{}
public:
bool is_valid() const
{
return common::is_valid_gts_id(gts_id_) && epoch_id_ > 0 && member_list_.get_member_number() > 0 &&
member_list_.get_member_number() <= 3 && local_ts_ > 0;
}
void set(
const uint64_t gts_id, const int64_t epoch_id, const common::ObMemberList& member_list, const int64_t local_ts)
{
gts_id_ = gts_id;
epoch_id_ = epoch_id;
member_list_ = member_list;
local_ts_ = local_ts;
}
uint64_t get_gts_id() const
{
return gts_id_;
}
int64_t get_epoch_id() const
{
return epoch_id_;
}
const common::ObMemberList& get_member_list() const
{
return member_list_;
}
int64_t get_local_ts() const
{
return local_ts_;
}
TO_STRING_KV(K(gts_id_), K(epoch_id_), K(member_list_), K(local_ts_));
private:
uint64_t gts_id_;
int64_t epoch_id_;
common::ObMemberList member_list_;
int64_t local_ts_;
};
class ObHaGtsUpdateMetaResponse {
OB_UNIS_VERSION(1);
public:
ObHaGtsUpdateMetaResponse() : local_ts_(common::OB_INVALID_TIMESTAMP)
{}
~ObHaGtsUpdateMetaResponse()
{}
public:
bool is_valid() const
{
return local_ts_ > 0;
}
void set(const int64_t local_ts)
{
local_ts_ = local_ts;
}
int64_t get_local_ts() const
{
return local_ts_;
}
TO_STRING_KV(K(local_ts_));
private:
int64_t local_ts_;
};
class ObHaGtsChangeMemberRequest {
OB_UNIS_VERSION(1);
public:
ObHaGtsChangeMemberRequest() : gts_id_(common::OB_INVALID_ID), offline_replica_()
{}
~ObHaGtsChangeMemberRequest()
{}
public:
bool is_valid() const
{
return common::is_valid_gts_id(gts_id_) && offline_replica_.is_valid();
}
void set(const uint64_t gts_id, const common::ObAddr& offline_replica)
{
gts_id_ = gts_id;
offline_replica_ = offline_replica;
}
uint64_t get_gts_id() const
{
return gts_id_;
}
const common::ObAddr& get_offline_replica() const
{
return offline_replica_;
}
TO_STRING_KV(K(gts_id_), K(offline_replica_));
private:
uint64_t gts_id_;
common::ObAddr offline_replica_;
};
class ObHaGtsChangeMemberResponse {
OB_UNIS_VERSION(1);
public:
ObHaGtsChangeMemberResponse() : ret_value_(common::OB_SUCCESS)
{}
~ObHaGtsChangeMemberResponse()
{}
public:
void set(const int ret_value)
{
ret_value_ = ret_value;
}
int get_ret_value() const
{
return ret_value_;
}
TO_STRING_KV(K(ret_value_));
private:
int ret_value_;
};
struct ObClusterInfoArg {
OB_UNIS_VERSION(1);
public:
ObClusterInfoArg()
: cluster_info_(), server_status_(share::OBSERVER_INVALID_STATUS), sync_cluster_ids_(), redo_options_()
{}
bool is_valid() const;
TO_STRING_KV(K_(cluster_info), K_(server_status), K_(sync_cluster_ids), K_(redo_options));
int assign(const ObClusterInfoArg& other);
public:
share::ObClusterInfo cluster_info_;
share::ServerServiceStatus server_status_;
common::ObSEArray<int64_t, 1> sync_cluster_ids_;
share::ObRedoTransportOption redo_options_;
};
struct ObSchemaSnapshotArg {
OB_UNIS_VERSION(1);
public:
ObSchemaSnapshotArg() : schema_version_(0), frozen_version_(0)
{}
bool is_valid() const
{
return schema_version_ >= 0 && frozen_version_ >= 0;
}
void reset()
{
schema_version_ = 0;
}
TO_STRING_KV(K_(schema_version), K_(frozen_version));
public:
int64_t schema_version_;
int64_t frozen_version_;
};
// The maximum size of the RPC packet is 64M, and it can store about 2W schemas. The streaming interface is not used for
// the time being
struct ObSchemaSnapshotRes {
OB_UNIS_VERSION(1);
public:
ObSchemaSnapshotRes();
bool is_valid() const;
void reset();
TO_STRING_KV(K_(schema_version), K_(frozen_version), "table_count", table_schemas_.count(), "tenant_count",
tenant_schemas_.count(), "user_count", user_infos_.count(), "freeze_schema", freeze_schemas_,
K_(tenant_flashback_scn), K_(failover_timestamp), K_(frozen_status), K_(cluster_name));
int assign(const ObSchemaSnapshotRes& res);
public:
int64_t schema_version_;
int64_t frozen_version_;
common::ObSArray<share::schema::ObTableSchema> table_schemas_;
common::ObSArray<share::schema::ObTenantSchema> tenant_schemas_;
common::ObSArray<share::schema::ObUserInfo> user_infos_;
common::ObSArray<share::schema::ObDBPriv> db_privs_;
common::ObSArray<share::schema::ObTablePriv> table_privs_;
common::ObSArray<share::TenantIdAndSchemaVersion> freeze_schemas_; // Record the schema_version corresponding to the
// frozen_version_ + 2 version;
int64_t failover_timestamp_;
common::ObSArray<share::ObTenantFlashbackSCN> tenant_flashback_scn_;
common::ObSArray<storage::ObFrozenStatus> frozen_status_;
bool sys_schema_changed_;
// Used to verify that the primary and standby cluster names are consistent
common::ObFixedLengthString<common::OB_MAX_CONFIG_VALUE_LEN> cluster_name_;
};
struct ObRegistClusterArg {
OB_UNIS_VERSION(1);
public:
ObRegistClusterArg() : cluster_name_(), cluster_id_(common::OB_INVALID_ID), pre_regist_(false), cluster_addr_()
{}
bool is_valid() const
{
return cluster_id_ > 0 && !cluster_name_.empty();
}
public:
common::ObString cluster_name_;
uint64_t cluster_id_;
bool pre_regist_;
share::ObClusterAddr cluster_addr_;
TO_STRING_KV(K_(cluster_id), K_(cluster_name), K_(pre_regist), K_(cluster_addr));
};
struct ObAlterTableResArg {
OB_UNIS_VERSION(1);
public:
ObAlterTableResArg()
: schema_type_(share::schema::OB_MAX_SCHEMA),
schema_id_(common::OB_INVALID_ID),
schema_version_(common::OB_INVALID_VERSION)
{}
ObAlterTableResArg(
const share::schema::ObSchemaType schema_type, const uint64_t schema_id, const int64_t schema_version)
: schema_type_(schema_type), schema_id_(schema_id), schema_version_(schema_version)
{}
void reset();
public:
TO_STRING_KV(K_(schema_type), K_(schema_id), K_(schema_version));
share::schema::ObSchemaType schema_type_;
uint64_t schema_id_;
int64_t schema_version_;
};
struct ObAlterTableRes {
OB_UNIS_VERSION(1);
public:
ObAlterTableRes()
: index_table_id_(common::OB_INVALID_ID),
constriant_id_(common::OB_INVALID_ID),
schema_version_(common::OB_INVALID_VERSION),
res_arg_array_()
{}
void reset();
public:
TO_STRING_KV(K_(index_table_id), K_(constriant_id), K_(schema_version), K_(res_arg_array));
uint64_t index_table_id_;
uint64_t constriant_id_;
int64_t schema_version_;
common::ObSArray<ObAlterTableResArg> res_arg_array_;
};
struct ObRegistClusterRes {
OB_UNIS_VERSION(1);
public:
ObRegistClusterRes() : cluster_idx_(common::OB_INVALID_INDEX)
{}
bool is_valid() const
{
return cluster_idx_ >= 0;
}
int set_login_name(const char* login_name)
{
return login_name_.assign(login_name);
}
int set_login_passwd(const char* login_passwd)
{
return login_passwd_.assign(login_passwd);
}
int set_primary_cluster(const share::ObClusterAddr& primary_cluster);
void reset();
public:
TO_STRING_KV(K_(cluster_idx), K_(login_name));
int64_t cluster_idx_;
share::ObClusterInfo::UserNameString login_name_;
share::ObClusterInfo::PassWdString login_passwd_;
share::ObClusterAddr primary_cluster_;
};
struct ObStandbyHeartBeatRes {
OB_UNIS_VERSION(1);
public:
ObStandbyHeartBeatRes()
: primary_addr_(),
standby_addr_(),
primary_schema_info_(),
protection_mode_(common::MAXIMUM_PROTECTION_MODE),
tenant_schema_vers_()
{}
~ObStandbyHeartBeatRes()
{}
void set_refreshed_schema_version(const int64_t refreshed_schema_version)
{
primary_schema_info_.primary_broadcasted_schema_version_ = refreshed_schema_version;
}
void set_next_schema_version(const int64_t next_schema_version)
{
primary_schema_info_.primary_next_schema_version_ = next_schema_version;
}
int set_primary_addr(const share::ObClusterAddr& primary_addr);
int set_standby_addr(const share::ObClusterAddr& standby_addr);
void set_protection_mode(common::ObProtectionMode mode)
{
protection_mode_ = mode;
}
void reset()
{
primary_addr_.reset();
standby_addr_.reset();
primary_schema_info_.reset();
tenant_schema_vers_.reset();
protection_mode_ = common::MAXIMUM_PROTECTION_MODE;
}
public:
TO_STRING_KV(K_(primary_addr), K_(standby_addr), K_(primary_schema_info), K_(protection_mode));
share::ObClusterAddr primary_addr_;
share::ObClusterAddr standby_addr_;
share::schema::ObPrimarySchemaInfo primary_schema_info_;
common::ObProtectionMode protection_mode_;
ObTenantSchemaVersions tenant_schema_vers_;
};
struct ObGetSwitchoverStatusRes {
OB_UNIS_VERSION(1);
public:
ObGetSwitchoverStatusRes() : switchover_status_(share::ObClusterInfo::I_INVALID), switchover_info_()
{}
~ObGetSwitchoverStatusRes()
{}
public:
TO_STRING_KV(K_(switchover_status), K_(switchover_info));
share::ObClusterInfo::InMemorySwitchOverStatus switchover_status_;
share::ObClusterSwitchoverInfoWrap switchover_info_;
};
struct ObGetTenantSchemaVersionArg {
OB_UNIS_VERSION(1);
public:
ObGetTenantSchemaVersionArg() : tenant_id_(common::OB_INVALID_TENANT_ID)
{}
bool is_valid() const
{
return common::OB_INVALID_TENANT_ID != tenant_id_;
}
TO_STRING_KV(K_(tenant_id));
uint64_t tenant_id_;
};
struct ObGetTenantSchemaVersionResult {
OB_UNIS_VERSION(1);
public:
ObGetTenantSchemaVersionResult() : schema_version_(common::OB_INVALID_VERSION)
{}
bool is_valid() const
{
return schema_version_ > 0;
}
TO_STRING_KV(K_(schema_version));
int64_t schema_version_;
};
struct ObFinishReplayArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObFinishReplayArg() : schema_version_(common::OB_INVALID_VERSION)
{}
bool is_valid() const
{
return schema_version_ > 0;
}
virtual bool is_allow_when_upgrade() const
{
return true;
}
TO_STRING_KV(K_(schema_version));
int64_t schema_version_;
};
struct ObTenantMemoryArg {
OB_UNIS_VERSION(1);
public:
ObTenantMemoryArg() : tenant_id_(0), memory_size_(0), refresh_interval_(0)
{}
bool is_valid() const
{
return tenant_id_ > 0 && memory_size_ > 0 && refresh_interval_ >= 0;
}
TO_STRING_KV(K_(tenant_id), K_(memory_size));
int64_t tenant_id_;
int64_t memory_size_;
int64_t refresh_interval_;
};
struct ObProfileDDLArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObProfileDDLArg() : ObDDLArg(), schema_(), ddl_type_(), is_cascade_(false)
{}
virtual bool is_allow_when_upgrade() const
{
return share::schema::OB_DDL_DROP_PROFILE == ddl_type_;
}
share::schema::ObProfileSchema schema_;
share::schema::ObSchemaOperationType ddl_type_;
bool is_cascade_;
TO_STRING_KV(K_(schema), K_(ddl_type), K_(is_cascade));
};
struct ObCheckServerEmptyArg {
OB_UNIS_VERSION(1);
public:
enum Mode { BOOTSTRAP, ADD_SERVER };
ObCheckServerEmptyArg() : mode_(BOOTSTRAP)
{}
TO_STRING_KV(K_(mode));
Mode mode_;
};
struct ObForceDropSchemaArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObForceDropSchemaArg()
: ObDDLArg(),
recycle_schema_version_(common::OB_INVALID_VERSION),
schema_id_(common::OB_INVALID_ID),
partition_ids_(),
type_(share::schema::OB_MAX_SCHEMA),
subpartition_ids_()
{}
virtual ~ObForceDropSchemaArg()
{}
bool is_valid() const;
int assign(const ObForceDropSchemaArg& other);
virtual bool is_allow_when_upgrade() const
{
return true;
}
TO_STRING_KV(K_(exec_tenant_id), K_(schema_id), K_(type), "partition_cnt", partition_ids_.count(), "subpartition_cnt",
subpartition_ids_.count());
int64_t recycle_schema_version_; // The backed up schema_version is used for verification
uint64_t schema_id_; // table_id/tablegroup_id
common::ObSArray<int64_t> partition_ids_; // Non-empty means to delete the partition (including the delayed deletion
// object of the second-level partition table and the first-level
// partition)
share::schema::ObSchemaType type_;
common::ObSArray<int64_t> subpartition_ids_; // Non-empty means delete subpartition (only non-templated secondary
// partition table)
};
struct ObArchiveLogArg {
OB_UNIS_VERSION(1);
public:
ObArchiveLogArg() : enable_(true)
{}
TO_STRING_KV(K_(enable));
bool enable_;
};
struct ObBackupDatabaseArg {
OB_UNIS_VERSION(1);
public:
ObBackupDatabaseArg();
bool is_valid() const;
TO_STRING_KV(K_(tenant_id), K_(is_incremental), K_(passwd), K_(encryption_mode));
uint64_t tenant_id_;
bool is_incremental_;
share::ObBackupEncryptionMode::EncryptionMode encryption_mode_;
common::ObFixedLengthString<common::OB_MAX_PASSWORD_LENGTH> passwd_;
};
struct ObTableTTLArg {
OB_UNIS_VERSION(1);
public:
ObTableTTLArg();
int assign(const ObTableTTLArg& other);
TO_STRING_KV(K_(cmd_code));
int64_t cmd_code_;
};
struct ObBackupManageArg {
OB_UNIS_VERSION(1);
public:
enum Type {
CANCEL_BACKUP = 0,
SUSPEND_BACKUP = 1,
RESUME_BACKUP = 2,
// DELETE_EXPIRED_BACKUP = 3,
DELETE_BACKUP = 4,
VALIDATE_DATABASE = 5,
VALIDATE_BACKUPSET = 6,
CANCEL_VALIDATE = 7,
DELETE_OBSOLETE_BACKUP = 8,
CANCEL_BACKUP_BACKUPSET = 9,
CANCEL_DELETE_BACKUP = 10,
DELETE_BACKUPPIECE = 11,
DELETE_OBSOLETE_BACKUP_BACKUP = 12,
CANCEL_BACKUP_BACKUPPIECE = 13,
DELETE_BACKUPROUND = 14,
CANCEL_ALL_BACKUP_FORCE = 15,
MAX_TYPE
};
ObBackupManageArg() : tenant_id_(OB_INVALID_TENANT_ID), type_(MAX_TYPE), value_(0), copy_id_(0)
{}
TO_STRING_KV(K_(type), K_(value), K_(copy_id));
uint64_t tenant_id_;
Type type_;
int64_t value_;
int64_t copy_id_;
};
struct ObBackupBackupsetArg {
OB_UNIS_VERSION(1);
public:
ObBackupBackupsetArg();
bool is_valid() const;
int assign(const ObBackupBackupsetArg& o);
TO_STRING_KV(K_(tenant_id), K_(backup_set_id), K_(tenant_name), K_(backup_backup_dest), K_(max_backup_times));
uint64_t tenant_id_;
int64_t backup_set_id_;
common::ObString tenant_name_;
char backup_backup_dest_[share::OB_MAX_BACKUP_DEST_LENGTH];
int64_t max_backup_times_;
};
struct ObBackupArchiveLogArg {
OB_UNIS_VERSION(1);
public:
ObBackupArchiveLogArg() : enable_(false)
{}
int assign(const ObBackupArchiveLogArg& o);
TO_STRING_KV(K_(enable));
bool enable_;
};
struct ObBackupBackupPieceArg {
OB_UNIS_VERSION(1);
public:
ObBackupBackupPieceArg();
~ObBackupBackupPieceArg()
{}
bool is_valid() const
{
return OB_INVALID_ID != tenant_id_ && piece_id_ != -1;
}
int assign(const ObBackupBackupPieceArg& o);
TO_STRING_KV(K_(tenant_id), K_(piece_id), K_(max_backup_times), K_(backup_all), K_(backup_backup_dest));
uint64_t tenant_id_;
int64_t piece_id_;
common::ObString tenant_name_;
char backup_backup_dest_[share::OB_MAX_BACKUP_DEST_LENGTH];
int64_t max_backup_times_;
bool backup_all_;
bool with_active_piece_;
};
struct ObCheckStandbyCanAccessArg {
OB_UNIS_VERSION(1);
public:
ObCheckStandbyCanAccessArg()
: failover_epoch_(common::OB_INVALID_VERSION),
last_merged_version_(common::OB_INVALID_VERSION),
cluster_status_(),
tenant_flashback_scn_()
{}
~ObCheckStandbyCanAccessArg()
{}
TO_STRING_KV(K_(failover_epoch), K_(last_merged_version), K_(cluster_status), K_(tenant_flashback_scn));
bool is_valid() const
{
return common::OB_INVALID_VERSION != failover_epoch_ && common::OB_INVALID_VERSION != last_merged_version_ &&
0 < cluster_status_.count() && 0 < tenant_flashback_scn_.count();
}
int64_t failover_epoch_;
int64_t last_merged_version_;
common::ObSArray<share::ObClusterAddr> cluster_status_;
common::ObSArray<share::ObTenantFlashbackSCN> tenant_flashback_scn_;
};
struct ObPhysicalFlashbackResultArg {
OB_UNIS_VERSION(1);
public:
ObPhysicalFlashbackResultArg()
: min_version_(common::OB_INVALID_VERSION), max_version_(common::OB_INVALID_VERSION), enable_result_(false)
{}
~ObPhysicalFlashbackResultArg()
{}
TO_STRING_KV(K_(min_version), K_(max_version), K_(enable_result));
int64_t min_version_;
int64_t max_version_;
bool enable_result_;
};
struct ObCheckPhysicalFlashbackArg {
OB_UNIS_VERSION(1);
public:
ObCheckPhysicalFlashbackArg()
: merged_version_(common::OB_INVALID_VERSION), flashback_scn_(common::OB_INVALID_VERSION)
{}
~ObCheckPhysicalFlashbackArg()
{}
TO_STRING_KV(K_(merged_version), K_(flashback_scn));
public:
int64_t merged_version_;
int64_t flashback_scn_;
};
struct CheckLeaderRpcIndex {
OB_UNIS_VERSION(1);
public:
int64_t switchover_timestamp_; // Switch logo
int64_t epoch_; //(switchover_timestamp, epoch) uniquely identifies a statistical information during a switching
// process
int64_t tenant_id_;
int64_t ml_pk_index_; // Position the coordinates of pkey
int64_t pkey_info_start_index_; // Position the coordinates of pkey
CheckLeaderRpcIndex()
: switchover_timestamp_(0),
epoch_(0),
tenant_id_(common::OB_INVALID_TENANT_ID),
ml_pk_index_(0),
pkey_info_start_index_(0){};
~CheckLeaderRpcIndex()
{
reset();
}
bool is_valid() const;
void reset();
TO_STRING_KV(K_(switchover_timestamp), K_(epoch), K_(tenant_id), K_(ml_pk_index), K_(pkey_info_start_index));
};
struct ObBatchWriteCutdataClogArg {
OB_UNIS_VERSION(1);
public:
ObBatchWriteCutdataClogArg()
{
reset();
}
~ObBatchWriteCutdataClogArg()
{}
void build_arg(const int64_t schema_version, const int64_t switchover_timestamp, const int64_t flashback_ts,
const int64_t query_end_time)
{
schema_version_ = schema_version;
switchover_timestamp_ = switchover_timestamp;
flashback_ts_ = flashback_ts;
query_end_time_ = query_end_time;
}
void set_switchover_timestamp(const int64_t switchover_timestamp)
{
switchover_timestamp_ = switchover_timestamp;
}
void set_flashback_ts(const int64_t flashback_ts)
{
flashback_ts_ = flashback_ts;
}
void set_schema_version(const int64_t schema_version)
{
schema_version_ = schema_version;
}
int64_t get_schema_version() const
{
return schema_version_;
}
void set_query_end_time(const int64_t query_end_time)
{
query_end_time_ = query_end_time;
}
int64_t get_query_end_time() const
{
return query_end_time_;
}
bool reach_concurrency_limit() const
{
return pkeys_.count() >= MAX_COUNT;
}
int add_pkey(const common::ObPartitionKey& pkey);
const ObPkeyArray& get_pkey_array() const
{
return pkeys_;
}
int64_t get_flashback_ts() const
{
return flashback_ts_;
}
int64_t get_switchover_timestamp() const
{
return switchover_timestamp_;
}
bool is_valid() const;
bool has_task() const
{
return pkeys_.count() > 0;
}
void reset();
void set_trace_id(const common::ObCurTraceId::TraceId& trace_id)
{
trace_id_ = trace_id;
}
TO_STRING_KV(
K_(switchover_timestamp), K_(pkeys), K_(flashback_ts), K_(schema_version), K_(trace_id), K_(query_end_time));
public:
static const int64_t MAX_COUNT = 1024;
int64_t switchover_timestamp_;
ObPkeyArray pkeys_;
int64_t flashback_ts_;
int64_t schema_version_;
CheckLeaderRpcIndex index_;
common::ObCurTraceId::TraceId trace_id_;
int64_t query_end_time_;
};
struct ObBatchCheckLeaderArg {
OB_UNIS_VERSION(1);
public:
ObPkeyArray pkeys_;
CheckLeaderRpcIndex index_;
common::ObCurTraceId::TraceId trace_id_; // TODO: set trace to facilitate tracking
ObBatchCheckLeaderArg()
{
reset();
}
~ObBatchCheckLeaderArg()
{}
bool is_valid() const;
void reset();
bool reach_concurrency_limit() const
{
return pkeys_.count() >= MAX_COUNT;
}
bool has_task() const
{
return pkeys_.count() > 0;
}
void set_trace_id(const common::ObCurTraceId::TraceId& trace_id)
{
trace_id_ = trace_id;
}
TO_STRING_KV(K_(index), K_(pkeys));
};
struct ObBatchCheckRes {
OB_UNIS_VERSION(1);
public:
common::ObSArray<bool> results_; // Corresponding to the above pkeys--, true means there is a master, false means no
// master
CheckLeaderRpcIndex index_; // Same value as ObBatchCheckLeaderArg
ObBatchCheckRes()
{
reset();
}
~ObBatchCheckRes()
{}
bool is_valid() const;
void reset();
TO_STRING_KV(K_(index), K_(results));
};
struct ObRebuildIndexInRestoreArg {
OB_UNIS_VERSION(1);
public:
ObRebuildIndexInRestoreArg() : tenant_id_(common::OB_INVALID_TENANT_ID)
{}
~ObRebuildIndexInRestoreArg()
{}
bool is_valid() const
{
return common::OB_INVALID_TENANT_ID != tenant_id_;
}
void reset()
{
tenant_id_ = common::OB_INVALID_TENANT_ID;
}
public:
uint64_t tenant_id_;
TO_STRING_KV(K_(tenant_id));
};
struct ObUpdateTableSchemaVersionArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
enum Action {
INVALID = 0,
UPDATE_SYS_ALL_INNER_TABLE,
UPDATE_SYS_INNER_TABLE,
UPDATE_SYS_TABLE_IN_TENANT_SPACE,
};
ObUpdateTableSchemaVersionArg()
: tenant_id_(common::OB_INVALID_TENANT_ID),
table_id_(OB_INVALID_ID),
schema_version_(share::OB_INVALID_SCHEMA_VERSION),
action_(Action::INVALID)
{}
~ObUpdateTableSchemaVersionArg()
{
reset();
}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const;
TO_STRING_KV(K_(tenant_id), K_(table_id), K_(schema_version));
void reset();
void init(const int64_t tenant_id, const int64_t table_id, const int64_t schema_version, const bool is_replay_schema,
const Action action);
int assign(const ObUpdateTableSchemaVersionArg &other);
public:
uint64_t tenant_id_;
uint64_t table_id_;
int64_t schema_version_;
Action action_;
};
struct ObRestoreModifySchemaArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
enum TYPE {
INVALID_TYPE,
RESET_DATABASE_PRIMARY_ZONE,
RESET_TABLEGROUP_PRIMARY_ZONE,
RESET_TABLEGROUP_LOCALITY,
RESET_TABLEGROUP_PREVIOUS_LOCALITY,
RESET_TABLE_PRIMARY_ZONE,
RESET_TABLE_LOCALITY,
RESET_TABLE_PREVIOUS_LOCALITY,
MAX_TYPE,
};
public:
ObRestoreModifySchemaArg() : type_(INVALID_TYPE), schema_id_(common::OB_INVALID_ID)
{}
~ObRestoreModifySchemaArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(type), K_(schema_id));
public:
TYPE type_;
uint64_t schema_id_;
};
struct ObCheckDeploymentModeArg {
OB_UNIS_VERSION(1);
public:
ObCheckDeploymentModeArg() : single_zone_deployment_on_(false)
{}
TO_STRING_KV(K_(single_zone_deployment_on));
bool single_zone_deployment_on_;
};
struct ObPreProcessServerArg {
OB_UNIS_VERSION(1);
public:
ObPreProcessServerArg() : server_(), rescue_server_()
{}
TO_STRING_KV(K_(server));
bool is_valid() const
{
return server_.is_valid() && rescue_server_.is_valid();
}
int init(const common::ObAddr& server, const common::ObAddr& rescue_server);
public:
common::ObAddr server_;
common::ObAddr rescue_server_;
};
struct ObAdminRollingUpgradeArg {
OB_UNIS_VERSION(1);
public:
ObAdminRollingUpgradeArg() : stage_(OB_UPGRADE_STAGE_MAX)
{}
~ObAdminRollingUpgradeArg()
{}
bool is_valid() const;
TO_STRING_KV(K_(stage));
ObUpgradeStage stage_;
};
struct ObPreProcessServerReplyArg {
OB_UNIS_VERSION(1);
public:
ObPreProcessServerReplyArg() : server_(), rescue_server_(), ret_code_(common::OB_SUCCESS)
{}
TO_STRING_KV(K_(server), K_(rescue_server), K_(ret_code));
bool is_valid() const
{
return server_.is_valid() && rescue_server_.is_valid();
}
int init(const common::ObAddr& server, const common::ObAddr& rescue_server, const int ret_code);
public:
common::ObAddr server_;
common::ObAddr rescue_server_;
int ret_code_;
};
struct ObRsListArg {
OB_UNIS_VERSION(1);
public:
ObRsListArg() : rs_list_(), master_rs_()
{}
~ObRsListArg()
{}
bool is_valid() const
{
return rs_list_.count() > 0 && master_rs_.is_valid();
}
TO_STRING_KV(K_(rs_list), K_(master_rs));
ObServerList rs_list_;
common::ObAddr master_rs_;
};
struct ObLocationRpcRenewArg {
OB_UNIS_VERSION(1);
public:
ObLocationRpcRenewArg() : keys_()
{}
ObLocationRpcRenewArg(common::ObIAllocator& allocator);
~ObLocationRpcRenewArg()
{}
bool is_valid() const
{
return keys_.count() > 0;
}
TO_STRING_KV(K_(keys));
common::ObSArray<common::ObPartitionKey> keys_;
};
struct ObLocationRpcRenewResult {
OB_UNIS_VERSION(1);
public:
ObLocationRpcRenewResult() : results_()
{}
~ObLocationRpcRenewResult()
{}
bool is_valid() const
{
return results_.count() > 0;
}
TO_STRING_KV(K_(results));
common::ObSArray<ObMemberListAndLeaderArg> results_;
};
struct ObGetMasterKeyResultArg {
OB_UNIS_VERSION(1);
public:
ObGetMasterKeyResultArg() : str_(share::OB_CLOG_ENCRYPT_MASTER_KEY_LEN, 0, buf_)
{}
~ObGetMasterKeyResultArg()
{}
bool is_valid() const
{
return true;
}
TO_STRING_KV(K_(str));
char buf_[share::OB_CLOG_ENCRYPT_MASTER_KEY_LEN];
common::ObString str_;
};
struct ObKillPartTransCtxArg {
OB_UNIS_VERSION(1);
public:
ObKillPartTransCtxArg()
{}
~ObKillPartTransCtxArg()
{}
bool is_valid() const
{
return partition_key_.is_valid();
}
TO_STRING_KV(K_(partition_key), K_(trans_id));
common::ObPartitionKey partition_key_;
transaction::ObTransID trans_id_;
};
struct ObPhysicalRestoreResult {
OB_UNIS_VERSION(1);
public:
ObPhysicalRestoreResult();
virtual ~ObPhysicalRestoreResult()
{}
bool is_valid() const;
int assign(const ObPhysicalRestoreResult& other);
TO_STRING_KV(K_(job_id), K_(return_ret), K_(mod), K_(tenant_id), K_(trace_id), K_(addr));
int64_t job_id_;
int32_t return_ret_;
share::PhysicalRestoreMod mod_;
uint64_t tenant_id_;
common::ObCurTraceId::TraceId trace_id_;
common::ObAddr addr_;
};
struct ObExecuteRangePartSplitArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObExecuteRangePartSplitArg() : ObDDLArg(), partition_key_(), rowkey_()
{}
virtual ~ObExecuteRangePartSplitArg()
{}
bool is_valid() const;
virtual bool is_allow_when_upgrade() const
{
return true;
}
virtual int assign(const ObExecuteRangePartSplitArg& other);
common::ObPartitionKey partition_key_;
common::ObRowkey rowkey_;
TO_STRING_KV(K(partition_key_), K(rowkey_));
};
struct ObRefreshTimezoneArg {
OB_UNIS_VERSION(1);
public:
ObRefreshTimezoneArg() : tenant_id_(common::OB_INVALID_TENANT_ID)
{}
ObRefreshTimezoneArg(uint64_t tenant_id) : tenant_id_(tenant_id)
{}
~ObRefreshTimezoneArg()
{}
bool is_valid() const
{
return common::OB_INVALID_TENANT_ID != tenant_id_;
}
TO_STRING_KV(K_(tenant_id));
uint64_t tenant_id_;
};
struct ObCreateRestorePointArg {
OB_UNIS_VERSION(1);
public:
ObCreateRestorePointArg() : tenant_id_(0), name_()
{}
int assign(const ObCreateRestorePointArg& arg)
{
int ret = common::OB_SUCCESS;
tenant_id_ = arg.tenant_id_;
name_ = arg.name_;
return ret;
}
bool is_valid() const
{
return tenant_id_ > 0 && !name_.empty();
}
int64_t tenant_id_;
common::ObString name_;
TO_STRING_KV(K(tenant_id_), K(name_));
};
struct ObDropRestorePointArg {
OB_UNIS_VERSION(1);
public:
ObDropRestorePointArg() : tenant_id_(0), name_()
{}
int assign(const ObDropRestorePointArg& arg)
{
int ret = common::OB_SUCCESS;
tenant_id_ = arg.tenant_id_;
name_ = arg.name_;
return ret;
}
bool is_valid() const
{
return tenant_id_ > 0 && !name_.empty();
}
int64_t tenant_id_;
common::ObString name_;
TO_STRING_KV(K(tenant_id_), K(name_));
};
struct ObCheckBuildIndexTaskExistArg {
OB_UNIS_VERSION(1);
public:
ObCheckBuildIndexTaskExistArg() : tenant_id_(0), task_id_(), scheduler_id_(0)
{}
int assign(const ObCheckBuildIndexTaskExistArg& arg)
{
tenant_id_ = arg.tenant_id_;
task_id_ = arg.task_id_;
scheduler_id_ = arg.scheduler_id_;
return common::OB_SUCCESS;
}
bool is_valid() const
{
return tenant_id_ > 0 && task_id_.is_valid();
}
int64_t tenant_id_;
sql::ObTaskID task_id_;
uint64_t scheduler_id_;
TO_STRING_KV(K_(tenant_id), K_(task_id), K_(scheduler_id));
};
struct ObPartitionBroadcastArg {
OB_UNIS_VERSION(1);
public:
ObPartitionBroadcastArg() : keys_()
{}
~ObPartitionBroadcastArg()
{}
bool is_valid() const;
int assign(const ObPartitionBroadcastArg& other);
TO_STRING_KV(K_(keys));
private:
DISALLOW_COPY_AND_ASSIGN(ObPartitionBroadcastArg);
public:
common::ObSEArray<share::ObPartitionBroadcastTask, common::UNIQ_TASK_QUEUE_BATCH_EXECUTE_NUM> keys_;
};
struct ObPartitionBroadcastResult {
OB_UNIS_VERSION(1);
public:
ObPartitionBroadcastResult() : ret_(common::OB_SUCCESS)
{}
~ObPartitionBroadcastResult()
{}
bool is_valid() const;
int assign(const ObPartitionBroadcastResult& other);
TO_STRING_KV(K_(ret));
private:
DISALLOW_COPY_AND_ASSIGN(ObPartitionBroadcastResult);
public:
int ret_;
};
struct ObSubmitBuildIndexTaskArg : public ObDDLArg {
OB_UNIS_VERSION(1);
public:
ObSubmitBuildIndexTaskArg() : ObDDLArg(), index_tid_(0)
{}
~ObSubmitBuildIndexTaskArg()
{}
bool is_valid() const
{
return index_tid_ > 0;
}
virtual int assign(const ObSubmitBuildIndexTaskArg &other);
TO_STRING_KV(K_(index_tid));
private:
DISALLOW_COPY_AND_ASSIGN(ObSubmitBuildIndexTaskArg);
public:
uint64_t index_tid_;
};
struct ObFetchSstableSizeArg final {
OB_UNIS_VERSION(1);
public:
ObFetchSstableSizeArg() : pkey_(), index_id_(-1)
{}
~ObFetchSstableSizeArg()
{}
bool is_valid() const
{
return pkey_.is_valid() && index_id_ > 0;
}
int assign(const ObFetchSstableSizeArg &other);
TO_STRING_KV(K_(pkey), K_(index_id));
public:
common::ObPartitionKey pkey_;
int64_t index_id_;
private:
DISALLOW_COPY_AND_ASSIGN(ObFetchSstableSizeArg);
};
struct ObFetchSstableSizeRes final {
OB_UNIS_VERSION(1);
public:
ObFetchSstableSizeRes() : size_(0)
{}
~ObFetchSstableSizeRes()
{}
int assign(const ObFetchSstableSizeRes &other);
TO_STRING_KV(K_(size));
public:
int64_t size_;
private:
DISALLOW_COPY_AND_ASSIGN(ObFetchSstableSizeRes);
};
struct ObTTLRequestArg final
{
OB_UNIS_VERSION(1);
public:
enum TTLRequestType {
TTL_TRIGGER_TYPE = 0,
TTL_SUSPEND_TYPE = 1,
TTL_RESUME_TYPE = 2,
TTL_CANCEL_TYPE = 3,
TTL_MOVE_TYPE = 4,
TTL_INVALID_TYPE = 5
};
enum TTLTriggerType {
SYS_TRIGGER_TYPE = 1,
USER_TRIGGER_TYPE,
INVALID_TRIGGER_TYPE,
};
ObTTLRequestArg()
: cmd_code_(-1), trigger_type_(-1), task_id_(OB_INVALID_ID), tenant_id_(OB_INVALID_ID)
{}
~ObTTLRequestArg() = default;
bool is_valid() const {
return cmd_code_ != -1 && OB_INVALID_ID != task_id_ && trigger_type_ != -1 && tenant_id_ != OB_INVALID_ID;
}
int assign(const ObTTLRequestArg &other);
TO_STRING_KV(K_(cmd_code), K_(trigger_type), K_(task_id), K_(tenant_id));
public:
int32_t cmd_code_; // enum TTLCmdType
int32_t trigger_type_; // system or user
int64_t task_id_; // task id
uint64_t tenant_id_; // tenand_id array
};
struct ObTTLResult final
{
OB_UNIS_VERSION(1);
public:
ObTTLResult()
: ret_code_(-1)
{}
~ObTTLResult() = default;
bool is_valid() const { return OB_INVALID_ID != ret_code_; }
int assign(const ObTTLResult &other) {
ret_code_ = other.ret_code_;
return OB_SUCCESS;
}
TO_STRING_KV(K_(ret_code));
public:
int32_t ret_code_; // SUCCESS or error code
};
struct ObTTLResponseArg {
OB_UNIS_VERSION(1);
public:
ObTTLResponseArg();
TO_STRING_KV(K_(tenant_id), K_(task_id), K_(server_addr), K_(task_status));
public:
uint64_t tenant_id_;
int64_t task_id_;
ObAddr server_addr_;
uint8_t task_status_;
};
} // end namespace obrpc
} // end namespace oceanbase
#endif