[FEAT MERGE] support restore encrypted tenant
This commit is contained in:
		@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
@ -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:
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user