/** * 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_RESOLVER_CMD_OB_ALTER_SYSTEM_RESOLVER_ #define OCEANBASE_RESOLVER_CMD_OB_ALTER_SYSTEM_RESOLVER_ #include "sql/resolver/cmd/ob_system_cmd_resolver.h" #include "sql/session/ob_sql_session_info.h" // ObSqlSessionInfo #include "share/ls/ob_ls_i_life_manager.h" //OB_LS_MAX_SCN_VALUE namespace oceanbase { namespace common { class ObAddr; } namespace sql { class ObSystemCmdStmt; class ObFreezeStmt; class ObAlterSystemResolverUtil { public: static int sanity_check(const ParseNode *parse_tree, ObItemType item_type); // resolve opt_ip_port static int resolve_server(const ParseNode *parse_tree, common::ObAddr &server); // resolve server string (value part of opt_ip_port) static int resolve_server_value(const ParseNode *parse_tree, common::ObAddr &server); // resolve opt_zone_desc static int resolve_zone(const ParseNode *parse_tree, common::ObZone &zone); // resolve opt_tenant_name static int resolve_tenant(const ParseNode *parse_tree, common::ObFixedLengthString < common::OB_MAX_TENANT_NAME_LENGTH + 1 > &tenant_name); static int resolve_tenant_id(const ParseNode *parse_tree, uint64_t &tenant_id); static int resolve_ls_id(const ParseNode *parse_tree, int64_t &ls_id); static int resolve_replica_type(const ParseNode *parse_tree, common::ObReplicaType &replica_type); static int resolve_memstore_percent(const ParseNode *parse_tree, ObReplicaProperty &replica_property); static int resolve_string(const ParseNode *parse_tree, common::ObString &string); static int resolve_relation_name(const ParseNode *parse_tree, common::ObString &string); static int resolve_force_opt(const ParseNode *parse_tree, bool &force_cmd); // resolve opt_server_or_zone template static int resolve_server_or_zone(const ParseNode *parse_tree, RPC_ARG &arg); // resolve opt_backup_tenant_list static int get_tenant_ids(const ParseNode &t_node, common::ObIArray &tenant_ids); static int resolve_tablet_id(const ParseNode *opt_tablet_id, ObTabletID &tablet_id); static int resolve_tenant(const ParseNode &tenants_node, const uint64_t tenant_id, common::ObSArray &tenant_ids, bool &affect_all, bool &affect_all_user, bool &affect_all_meta); }; #define DEF_SIMPLE_CMD_RESOLVER(name) \ class name : public ObSystemCmdResolver \ { \ public: \ name(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} \ virtual ~name() {} \ virtual int resolve(const ParseNode &parse_tree); \ }; DEF_SIMPLE_CMD_RESOLVER(ObFlushCacheResolver); DEF_SIMPLE_CMD_RESOLVER(ObFlushKVCacheResolver); DEF_SIMPLE_CMD_RESOLVER(ObFlushIlogCacheResolver); DEF_SIMPLE_CMD_RESOLVER(ObFlushDagWarningsResolver); DEF_SIMPLE_CMD_RESOLVER(ObAdminServerResolver); DEF_SIMPLE_CMD_RESOLVER(ObAdminZoneResolver); DEF_SIMPLE_CMD_RESOLVER(ObSwitchReplicaRoleResolver); DEF_SIMPLE_CMD_RESOLVER(ObReportReplicaResolver); DEF_SIMPLE_CMD_RESOLVER(ObRecycleReplicaResolver); DEF_SIMPLE_CMD_RESOLVER(ObAdminMergeResolver); DEF_SIMPLE_CMD_RESOLVER(ObAdminRecoveryResolver); DEF_SIMPLE_CMD_RESOLVER(ObClearRootTableResolver); DEF_SIMPLE_CMD_RESOLVER(ObRefreshSchemaResolver); DEF_SIMPLE_CMD_RESOLVER(ObRefreshMemStatResolver); DEF_SIMPLE_CMD_RESOLVER(ObWashMemFragmentationResolver); DEF_SIMPLE_CMD_RESOLVER(ObRefreshIOCalibrationResolver); DEF_SIMPLE_CMD_RESOLVER(ObSetTPResolver); DEF_SIMPLE_CMD_RESOLVER(ObClearLocationCacheResolver); DEF_SIMPLE_CMD_RESOLVER(ObReloadGtsResolver); DEF_SIMPLE_CMD_RESOLVER(ObReloadUnitResolver); DEF_SIMPLE_CMD_RESOLVER(ObReloadServerResolver); DEF_SIMPLE_CMD_RESOLVER(ObReloadZoneResolver); DEF_SIMPLE_CMD_RESOLVER(ObClearMergeErrorResolver); DEF_SIMPLE_CMD_RESOLVER(ObAddArbitrationServiceResolver); DEF_SIMPLE_CMD_RESOLVER(ObRemoveArbitrationServiceResolver); DEF_SIMPLE_CMD_RESOLVER(ObReplaceArbitrationServiceResolver); DEF_SIMPLE_CMD_RESOLVER(ObMigrateUnitResolver); DEF_SIMPLE_CMD_RESOLVER(ObUpgradeVirtualSchemaResolver); DEF_SIMPLE_CMD_RESOLVER(ObRunJobResolver); DEF_SIMPLE_CMD_RESOLVER(ObRunUpgradeJobResolver); DEF_SIMPLE_CMD_RESOLVER(ObStopUpgradeJobResolver); DEF_SIMPLE_CMD_RESOLVER(ObSwitchRSRoleResolver); DEF_SIMPLE_CMD_RESOLVER(ObAdminUpgradeCmdResolver); DEF_SIMPLE_CMD_RESOLVER(ObAdminRollingUpgradeCmdResolver); DEF_SIMPLE_CMD_RESOLVER(ObRefreshTimeZoneInfoResolver); DEF_SIMPLE_CMD_RESOLVER(ObCancelTaskResolver); DEF_SIMPLE_CMD_RESOLVER(ObSetDiskValidResolver); DEF_SIMPLE_CMD_RESOLVER(ObClearBalanceTaskResolver); DEF_SIMPLE_CMD_RESOLVER(ObChangeTenantResolver); DEF_SIMPLE_CMD_RESOLVER(ObDropTempTableResolver); DEF_SIMPLE_CMD_RESOLVER(ObRefreshTempTableResolver); DEF_SIMPLE_CMD_RESOLVER(ObAlterDiskgroupAddDiskResolver); DEF_SIMPLE_CMD_RESOLVER(ObAlterDiskgroupDropDiskResolver); DEF_SIMPLE_CMD_RESOLVER(ObArchiveLogResolver); DEF_SIMPLE_CMD_RESOLVER(ObBackupArchiveLogResolver); DEF_SIMPLE_CMD_RESOLVER(ObBackupSetEncryptionResolver); DEF_SIMPLE_CMD_RESOLVER(ObBackupSetDecryptionResolver); DEF_SIMPLE_CMD_RESOLVER(ObAddRestoreSourceResolver); DEF_SIMPLE_CMD_RESOLVER(ObClearRestoreSourceResolver); DEF_SIMPLE_CMD_RESOLVER(ObCheckpointSlogResolver); int resolve_restore_until(const ParseNode &time_node, const ObSQLSessionInfo *session_info, share::SCN &recovery_until_scn, bool &with_restore_scn); class ObPhysicalRestoreTenantResolver : public ObSystemCmdResolver { public: ObPhysicalRestoreTenantResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} virtual ~ObPhysicalRestoreTenantResolver() {} virtual int resolve(const ParseNode &parse_tree); private: #ifdef OB_BUILD_TDE_SECURITY int resolve_kms_encrypt_info(common::ObString store_option); int check_kms_info_valid(const common::ObString &kms_info, bool &is_valid); #endif int resolve_decryption_passwd(obrpc::ObPhysicalRestoreTenantArg &arg); int resolve_restore_source_array(obrpc::ObPhysicalRestoreTenantArg &arg); }; class ObRecoverTenantResolver : public ObSystemCmdResolver { public: ObRecoverTenantResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} virtual ~ObRecoverTenantResolver() {} virtual int resolve(const ParseNode &parse_tree); private: }; class ObAlterSystemSetResolver : public ObSystemCmdResolver { public: ObAlterSystemSetResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} virtual ~ObAlterSystemSetResolver() {} virtual int resolve(const ParseNode &parse_tree); private: int check_param_valid(int64_t tenant_id, const common::ObString &name_node, const common::ObString &value_node); }; class ObAlterSystemKillResolver : public ObSystemCmdResolver { public: ObAlterSystemKillResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} virtual ~ObAlterSystemKillResolver() {} virtual int resolve(const ParseNode &parse_tree); private: int check_param_valid(int64_t tenant_id, const common::ObString &name_node, const common::ObString &value_node); }; class ObSetConfigResolver : public ObSystemCmdResolver { public: ObSetConfigResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} virtual ~ObSetConfigResolver() {} virtual int resolve(const ParseNode &parse_tree); private: int check_param_valid(int64_t tenant_id, const common::ObString &name_node, const common::ObString &value_node); }; class ObFreezeResolver : public ObSystemCmdResolver { public: ObFreezeResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} virtual ~ObFreezeResolver() {} virtual int resolve(const ParseNode &parse_tree); private: int resolve_major_freeze_(ObFreezeStmt *freeze_stmt, ParseNode *opt_tenant_list_or_tablet_id, const ParseNode *opt_rebuild_column_group); int resolve_minor_freeze_(ObFreezeStmt *freeze_stmt, ParseNode *opt_tenant_list_or_ls_or_tablet_id, ParseNode *opt_server_list, ParseNode *opt_zone_desc); int resolve_tenant_ls_tablet_(ObFreezeStmt *freeze_stmt, ParseNode *opt_tenant_list_or_ls_or_tablet_id); int resolve_server_list_(ObFreezeStmt *freeze_stmt, ParseNode *opt_server_list); }; class ObResetConfigResolver : public ObSystemCmdResolver { public: ObResetConfigResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} virtual ~ObResetConfigResolver() {} virtual int resolve(const ParseNode &parse_tree); private: int check_param_valid(int64_t tenant_id, const common::ObString &name_node, const common::ObString &value_node); }; class ObAlterSystemResetResolver : public ObSystemCmdResolver { public: ObAlterSystemResetResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} virtual ~ObAlterSystemResetResolver() {} virtual int resolve(const ParseNode &parse_tree); private: int check_param_valid(int64_t tenant_id, const common::ObString &name_node, const common::ObString &value_node); }; 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); DEF_SIMPLE_CMD_RESOLVER(ObCancelRestoreResolver); DEF_SIMPLE_CMD_RESOLVER(ObCancelRecoverTableResolver); class ObRecoverTableResolver : public ObSystemCmdResolver { public: ObRecoverTableResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {} virtual ~ObRecoverTableResolver() {} virtual int resolve(const ParseNode &parse_tree); private: int resolve_tenant_(const ParseNode *node, uint64_t &tenant_id, common::ObString &tenant_name, lib::Worker::CompatMode &compat_mode, ObNameCaseMode &case_mode); int resolve_scn_(const ParseNode *node, obrpc::ObPhysicalRestoreTenantArg &arg); int resolve_recover_tables_( const ParseNode *node, const lib::Worker::CompatMode &compat_mode, const ObNameCaseMode &case_mode, share::ObImportTableArg &import_arg); int resolve_remap_(const ParseNode *node, const lib::Worker::CompatMode &compat_mode, const ObNameCaseMode &case_mode, share::ObImportRemapArg &remap_arg); int resolve_remap_tables_( const ParseNode *node, const lib::Worker::CompatMode &compat_mode, const ObNameCaseMode &case_mode, share::ObImportRemapArg &remap_arg); int resolve_remap_tablegroups_( const ParseNode *node, share::ObImportRemapArg &remap_arg); int resolve_remap_tablespaces_( const ParseNode *node, share::ObImportRemapArg &remap_arg); #ifdef OB_BUILD_TDE_SECURITY int resolve_kms_info_(const common::ObString &restore_option, common::ObString &kms_info); #endif int resolve_backup_set_pwd_(common::ObString &pwd); int resolve_restore_source_(common::ObString &restore_source); }; DEF_SIMPLE_CMD_RESOLVER(ObTableTTLResolver); DEF_SIMPLE_CMD_RESOLVER(ObCancelCloneResolver); #undef DEF_SIMPLE_CMD_RESOLVER } // end namespace sql } // end namespace oceanbase #endif // OCEANBASE_RESOLVER_CMD_OB_ALTER_SYSTEM_RESOLVER_