[FEAT MERGE] enhance_ddl_quality
Co-authored-by: renju96 <fcbrenju@163.com>
This commit is contained in:
		| @ -22,6 +22,7 @@ | ||||
| #include "share/schema/ob_schema_getter_guard.h" | ||||
| #include "share/schema/ob_part_mgr_util.h" | ||||
| #include "share/location_cache/ob_location_service.h" | ||||
| #include "share/ob_ddl_sim_point.h" | ||||
| #include "sql/engine/ob_physical_plan.h" | ||||
| #include "sql/engine/table/ob_table_scan_op.h" | ||||
| #include "storage/tablet/ob_tablet.h" | ||||
| @ -36,6 +37,109 @@ using namespace oceanbase::share::schema; | ||||
| using namespace oceanbase::obrpc; | ||||
| using namespace oceanbase::sql; | ||||
|  | ||||
| const char *oceanbase::share::get_ddl_type(ObDDLType ddl_type) | ||||
| { | ||||
|   const char *ret_name = "UNKNOWN_DDL_TYPE"; | ||||
|   switch (ddl_type) { | ||||
|     case ObDDLType::DDL_INVALID: | ||||
|       ret_name = "DDL_INVALID"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_CHECK_CONSTRAINT: | ||||
|       ret_name = "DDL_CHECK_CONSTRAINT"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_FOREIGN_KEY_CONSTRAINT: | ||||
|       ret_name = "DDL_FOREIGN_KEY_CONSTRAINT"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_ADD_NOT_NULL_COLUMN: | ||||
|       ret_name = "DDL_ADD_NOT_NULL_COLUMN"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_MODIFY_AUTO_INCREMENT: | ||||
|       ret_name = "DDL_MODIFY_AUTO_INCREMENT"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_CREATE_INDEX: | ||||
|       ret_name = "DDL_CREATE_INDEX"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DROP_INDEX: | ||||
|       ret_name = "DDL_DROP_INDEX"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DROP_SCHEMA_AVOID_CONCURRENT_TRANS: | ||||
|       ret_name = "DDL_DROP_SCHEMA_AVOID_CONCURRENT_TRANS"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DROP_DATABASE: | ||||
|       ret_name = "DDL_DROP_DATABASE"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DROP_TABLE: | ||||
|       ret_name = "DDL_DROP_TABLE"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_TRUNCATE_TABLE: | ||||
|       ret_name = "DDL_TRUNCATE_TABLE"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DROP_PARTITION: | ||||
|       ret_name = "DDL_DROP_PARTITION"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DROP_SUB_PARTITION: | ||||
|       ret_name = "DDL_DROP_SUB_PARTITION"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_TRUNCATE_PARTITION: | ||||
|       ret_name = "DDL_TRUNCATE_PARTITION"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_TRUNCATE_SUB_PARTITION: | ||||
|       ret_name = "DDL_TRUNCATE_SUB_PARTITION"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DOUBLE_TABLE_OFFLINE: | ||||
|       ret_name = "DDL_DOUBLE_TABLE_OFFLINE"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_MODIFY_COLUMN: | ||||
|       ret_name = "DDL_MODIFY_COLUMN"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_ADD_PRIMARY_KEY: | ||||
|       ret_name = "DDL_ADD_PRIMARY_KEY"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DROP_PRIMARY_KEY: | ||||
|       ret_name = "DDL_DROP_PRIMARY_KEY"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_ALTER_PRIMARY_KEY: | ||||
|       ret_name = "DDL_ALTER_PRIMARY_KEY"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_ALTER_PARTITION_BY: | ||||
|       ret_name = "DDL_ALTER_PARTITION_BY"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DROP_COLUMN: | ||||
|       ret_name = "DDL_DROP_COLUMN"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_CONVERT_TO_CHARACTER: | ||||
|       ret_name = "DDL_CONVERT_TO_CHARACTER"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_ADD_COLUMN_OFFLINE: | ||||
|       ret_name = "DDL_ADD_COLUMN_OFFLINE"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_COLUMN_REDEFINITION: | ||||
|       ret_name = "DDL_COLUMN_REDEFINITION"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_TABLE_REDEFINITION: | ||||
|       ret_name = "DDL_TABLE_REDEFINITION"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DIRECT_LOAD: | ||||
|       ret_name = "DDL_DIRECT_LOAD"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_DIRECT_LOAD_INSERT: | ||||
|       ret_name = "DDL_DIRECT_LOAD_INSERT"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_NORMAL_TYPE: | ||||
|       ret_name = "DDL_NORMAL_TYPE"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_ADD_COLUMN_ONLINE: | ||||
|       ret_name = "DDL_ADD_COLUMN_ONLINE"; | ||||
|       break; | ||||
|     case ObDDLType::DDL_CHANGE_COLUMN_NAME: | ||||
|       ret_name = "DDL_CHANGE_COLUMN_NAME"; | ||||
|       break; | ||||
|     default: | ||||
|       break; | ||||
|   } | ||||
|   return ret_name; | ||||
| } | ||||
|  | ||||
| int ObColumnNameMap::init(const ObTableSchema &orig_table_schema, | ||||
|                           const AlterTableSchema &alter_table_schema) | ||||
| { | ||||
| @ -560,6 +664,8 @@ int ObDDLUtil::generate_build_replica_sql( | ||||
|     ret = OB_INVALID_ARGUMENT; | ||||
|     LOG_WARN("invalid arguments", K(ret), K(tenant_id), K(data_table_id), K(dest_table_id), K(schema_version), | ||||
|                                   K(snapshot_version), K(execution_id), K(task_id)); | ||||
|   } else if (OB_FAIL(DDL_SIM(tenant_id, task_id, GENERATE_BUILD_REPLICA_SQL))) { | ||||
|     LOG_WARN("ddl sim failure", K(ret), K(tenant_id), K(task_id)); | ||||
|   } else if (OB_FAIL(ObMultiVersionSchemaService::get_instance().get_tenant_schema_guard( | ||||
|       tenant_id, schema_guard, schema_version))) { | ||||
|     LOG_WARN("fail to get tenant schema guard", K(ret), K(data_table_id)); | ||||
| @ -1151,6 +1257,8 @@ int ObDDLUtil::get_data_format_version( | ||||
|       || nullptr == GCTX.sql_proxy_)) { | ||||
|     ret = OB_INVALID_ARGUMENT; | ||||
|     LOG_WARN("invalid arg", K(ret), K(tenant_id), K(task_id), KP(GCTX.sql_proxy_)); | ||||
|   } else if (OB_FAIL(DDL_SIM(tenant_id, task_id, GET_DATA_FORMAT_VERISON_FAILED))) { | ||||
|     LOG_WARN("ddl sim failure", K(ret), K(tenant_id), K(task_id)); | ||||
|   } else { | ||||
|     SMART_VAR(ObMySQLProxy::MySQLResult, res) { | ||||
|       ObSqlString query_string; | ||||
| @ -1874,6 +1982,8 @@ int ObCheckTabletDataComplementOp::check_tablet_checksum_update_status( | ||||
|     ret = OB_INVALID_ARGUMENT; | ||||
|     LOG_WARN("fail to check and wait complement task", | ||||
|       K(ret), K(tenant_id), K(index_table_id), K(tablet_ids), K(execution_id), K(ddl_task_id)); | ||||
|   } else if (OB_FAIL(DDL_SIM(tenant_id, ddl_task_id, CHECK_TABLET_CHECKSUM_STATUS_FAILED))) { | ||||
|     LOG_WARN("ddl sim failure", K(ret), K(tenant_id), K(ddl_task_id)); | ||||
|   } else if (OB_FAIL(tablet_checksum_status_map.create(tablet_count, ObModIds::OB_SSTABLE_CREATE_INDEX))) { | ||||
|     LOG_WARN("fail to create column checksum map", K(ret)); | ||||
|   } else if (OB_FAIL(ObDDLChecksumOperator::get_tablet_checksum_record( | ||||
| @ -1968,7 +2078,11 @@ int ObCheckTabletDataComplementOp::check_finish_report_checksum( | ||||
|   int ret = OB_SUCCESS; | ||||
|   bool is_checksums_all_report = false; | ||||
|   ObArray<ObTabletID> dest_tablet_ids; | ||||
|  | ||||
| #ifdef ERRSIM | ||||
|   if (GCONF.errsim_ddl_major_delay_time.get() > 0) { | ||||
|     return OB_SUCCESS; | ||||
|   } | ||||
| #endif | ||||
|   if (OB_UNLIKELY(OB_INVALID_ID == tenant_id || OB_INVALID_ID == index_table_id || | ||||
|       ddl_task_id == OB_INVALID_ID || execution_id < 0)) { | ||||
|     ret = OB_INVALID_ARGUMENT; | ||||
| @ -2010,6 +2124,8 @@ int ObCheckTabletDataComplementOp::check_and_wait_old_complement_task( | ||||
|   if (OB_UNLIKELY(OB_INVALID_ID == tenant_id || OB_INVALID_ID == table_id)) { | ||||
|     ret = OB_INVALID_ARGUMENT; | ||||
|     LOG_WARN("fail to check and wait complement task", K(ret), K(tenant_id), K(table_id)); | ||||
|   } else if (OB_FAIL(DDL_SIM(tenant_id, ddl_task_id, CHECK_OLD_COMPLEMENT_TASK_FAILED))) { | ||||
|     LOG_WARN("ddl sim failure: check old complement task failed", K(ret), K(tenant_id), K(ddl_task_id)); | ||||
|   } else { | ||||
|     if (OB_FAIL(check_task_inner_sql_session_status(inner_sql_exec_addr, trace_id, tenant_id, ddl_task_id, scn, is_old_task_session_exist))) { | ||||
|       LOG_WARN("fail check task inner sql session status", K(ret), K(trace_id), K(inner_sql_exec_addr)); | ||||
| @ -2049,3 +2165,41 @@ int ObCheckTabletDataComplementOp::check_and_wait_old_complement_task( | ||||
|   } | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| //record trace_id | ||||
| ObDDLEventInfo::ObDDLEventInfo() | ||||
|   : addr_(GCTX.self_addr()), | ||||
|     sub_id_(0), | ||||
|     event_ts_(ObTimeUtility::fast_current_time()) | ||||
| { | ||||
|   init_sub_trace_id(sub_id_); | ||||
| } | ||||
|  | ||||
| //modify trace_id | ||||
| ObDDLEventInfo::ObDDLEventInfo(const int32_t sub_id) | ||||
|   : addr_(GCTX.self_addr()), | ||||
|     sub_id_(sub_id), | ||||
|     event_ts_(ObTimeUtility::fast_current_time()) | ||||
| { | ||||
|   init_sub_trace_id(sub_id_); | ||||
| } | ||||
|  | ||||
| void ObDDLEventInfo::init_sub_trace_id(const int32_t sub_id) | ||||
| { | ||||
|   parent_trace_id_ = *ObCurTraceId::get_trace_id(); | ||||
|   if (sub_id == 0) { | ||||
|     // ignore | ||||
|   } else { | ||||
|     ObCurTraceId::set_sub_id(sub_id); | ||||
|   } | ||||
|   trace_id_ = *ObCurTraceId::get_trace_id(); | ||||
| } | ||||
|  | ||||
| void ObDDLEventInfo::copy_event(const ObDDLEventInfo &other) | ||||
| { | ||||
|   addr_ = other.addr_; | ||||
|   sub_id_ = other.sub_id_; | ||||
|   parent_trace_id_ = other.parent_trace_id_; | ||||
|   trace_id_ = other.trace_id_; | ||||
|   event_ts_ = other.event_ts_; | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 simonjoylet
					simonjoylet