[FEAT MERGE] support restore encrypted tenant

This commit is contained in:
yinyj17
2023-04-28 15:15:31 +00:00
committed by ob-robot
parent b41dc0ebdd
commit 34a9edf738
39 changed files with 455 additions and 57 deletions

View File

@ -2470,7 +2470,7 @@ int ObPhysicalRestoreTenantResolver::resolve(const ParseNode &parse_tree)
} else if (OB_UNLIKELY(NULL == parse_tree.children_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("children should not be null");
} else if (OB_UNLIKELY(6 != parse_tree.num_child_)) {
} else if (OB_UNLIKELY(8 != parse_tree.num_child_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("num of children not match", K(ret), "child_num", parse_tree.num_child_);
} else {
@ -2495,7 +2495,31 @@ int ObPhysicalRestoreTenantResolver::resolve(const ParseNode &parse_tree)
}
}
}
ParseNode *description_node = parse_tree.children_[4];
if (OB_FAIL(ret)) {
// do nothing
} else if (OB_NOT_NULL(parse_tree.children_[4])
&& OB_FAIL(Util::resolve_string(parse_tree.children_[4],
stmt->get_rpc_arg().encrypt_key_))) {
LOG_WARN("failed to resolve encrypt key", K(ret));
} else if (OB_NOT_NULL(parse_tree.children_[5])) {
ParseNode *kms_node = parse_tree.children_[5];
if (2 != kms_node->num_child_) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("num of children not match", K(ret), "child_num", kms_node->num_child_);
} else if (OB_ISNULL(kms_node->children_[0])) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("kms uri should not be NULL", K(ret));
} else if (OB_FAIL(Util::resolve_string(kms_node->children_[0],
stmt->get_rpc_arg().kms_uri_))) {
LOG_WARN("failed to resolve kms uri", K(ret));
} else if (OB_NOT_NULL(kms_node->children_[1])
&& OB_FAIL(Util::resolve_string(kms_node->children_[1],
stmt->get_rpc_arg().kms_encrypt_key_))) {
LOG_WARN("failed to resolve kms encrypt key", K(ret));
}
}
ParseNode *description_node = parse_tree.children_[6];
if (OB_FAIL(ret)) {
// do nothing
} else if (OB_FAIL(Util::resolve_string(parse_tree.children_[3],
@ -2520,8 +2544,8 @@ int ObPhysicalRestoreTenantResolver::resolve(const ParseNode &parse_tree)
}
if (OB_SUCC(ret)) {
if (6 == parse_tree.num_child_) { // resolve table_list
const ParseNode *node = parse_tree.children_[5];
if (8 == parse_tree.num_child_) { // resolve table_list
const ParseNode *node = parse_tree.children_[7];
if (OB_ISNULL(node)) {
stmt->set_is_preview(false);
} else {
@ -4046,6 +4070,12 @@ int ObDeletePolicyResolver::resolve(const ParseNode &parse_tree)
return ret;
}
int ObBackupKeyResolver::resolve(const ParseNode &parse_tree)
{
int ret = OB_ERR_PARSE_SQL;
return ret;
}
int ObBackupArchiveLogResolver::resolve(const ParseNode &parse_tree)
{
int ret = OB_SUCCESS;

View File

@ -228,6 +228,7 @@ DEF_SIMPLE_CMD_RESOLVER(ObBackupDatabaseResolver);
DEF_SIMPLE_CMD_RESOLVER(ObBackupManageResolver);
DEF_SIMPLE_CMD_RESOLVER(ObBackupCleanResolver);
DEF_SIMPLE_CMD_RESOLVER(ObDeletePolicyResolver);
DEF_SIMPLE_CMD_RESOLVER(ObBackupKeyResolver);
DEF_SIMPLE_CMD_RESOLVER(ObEnableSqlThrottleResolver);
DEF_SIMPLE_CMD_RESOLVER(ObDisableSqlThrottleResolver);
DEF_SIMPLE_CMD_RESOLVER(ObSetRegionBandwidthResolver);

View File

@ -1093,6 +1093,45 @@ private:
DISALLOW_COPY_AND_ASSIGN(ObDeletePolicyStmt);
};
class ObBackupKeyStmt : public ObSystemCmdStmt
{
public:
ObBackupKeyStmt()
: ObSystemCmdStmt(stmt::T_BACKUP_KEY),
tenant_id_(OB_INVALID_TENANT_ID),
backup_dest_()
{
}
virtual ~ObBackupKeyStmt() {}
uint64 get_tenant_id() const { return tenant_id_; }
const share::ObBackupPathString &get_backup_dest() const { return backup_dest_; }
const ObString &get_encrypt_key() const { return encrypt_key_; }
int set_param(const uint64_t tenant_id,
const share::ObBackupPathString &backup_dest,
const ObString &encrypt_key)
{
int ret = common::OB_SUCCESS;
if (OB_INVALID_ID == tenant_id) {
ret = OB_INVALID_ARGUMENT;
COMMON_LOG(WARN, "invalid args", K(tenant_id));
} else if (OB_FAIL(backup_dest_.assign(backup_dest))) {
COMMON_LOG(WARN, "set backup dest failed", K(backup_dest));
} else {
tenant_id_ = tenant_id;
encrypt_key_ = encrypt_key;
}
return ret;
}
TO_STRING_KV(N_STMT_TYPE, ((int)stmt_type_), K_(tenant_id), K_(backup_dest));
private:
uint64_t tenant_id_;
share::ObBackupPathString backup_dest_;
ObString encrypt_key_;
};
class ObBackupSetEncryptionStmt : public ObSystemCmdStmt
{
public:

View File

@ -986,6 +986,10 @@ int ObResolver::resolve(IsPrepared if_prepared, const ParseNode &parse_tree, ObS
REGISTER_STMT_RESOLVER(BackupDatabase);
break;
}
case T_BACKUP_KEY: {
REGISTER_STMT_RESOLVER(BackupKey);
break;
}
case T_BACKUP_MANAGE: {
REGISTER_STMT_RESOLVER(BackupManage);
break;

View File

@ -280,6 +280,7 @@ OB_STMT_TYPE_DEF_UNKNOWN_AT(T_ADD_ARBITRATION_SERVICE, get_sys_tenant_alter_syst
OB_STMT_TYPE_DEF_UNKNOWN_AT(T_REMOVE_ARBITRATION_SERVICE, get_sys_tenant_alter_system_priv, 281)
OB_STMT_TYPE_DEF_UNKNOWN_AT(T_REPLACE_ARBITRATION_SERVICE, get_sys_tenant_alter_system_priv, 282)
OB_STMT_TYPE_DEF_UNKNOWN_AT(T_SHOW_SEQUENCES, err_stmt_type_priv, 283)
OB_STMT_TYPE_DEF_UNKNOWN_AT(T_BACKUP_KEY, get_sys_tenant_alter_system_priv, 284)
OB_STMT_TYPE_DEF_UNKNOWN_AT(T_MAX, err_stmt_type_priv, 500)
#endif