ddl end if tenant is dropped forcedly, delay, to recyclebin.
This commit is contained in:
		| @ -979,22 +979,12 @@ int ObDDLTask::switch_status(const ObDDLTaskStatus new_status, const bool enable | ||||
|   if (OB_ISNULL(root_service = GCTX.root_service_)) { | ||||
|     ret = OB_ERR_UNEXPECTED; | ||||
|     LOG_WARN("error unexpected, root service must not be nullptr", K(ret)); | ||||
|   } else if (OB_FAIL(root_service->get_schema_service().check_if_tenant_has_been_dropped(dst_tenant_id_, is_tenant_dropped))) { | ||||
|     LOG_WARN("check if tenant has been dropped failed", K(ret), K(dst_tenant_id_)); | ||||
|   } else if (is_tenant_dropped) { | ||||
|   } else if (OB_FAIL(ObDDLUtil::check_tenant_status_normal(&root_service->get_sql_proxy(), dst_tenant_id_)) | ||||
|           || OB_FAIL(ObDDLUtil::check_tenant_status_normal(&root_service->get_sql_proxy(), tenant_id_))) { | ||||
|     if (OB_TENANT_HAS_BEEN_DROPPED == ret || OB_STANDBY_READ_ONLY == ret) { | ||||
|       need_retry_ = false; | ||||
|     LOG_INFO("tenant has been dropped, exit anyway", K(ret), K(task_id_), K(parent_task_id_), K(dst_tenant_id_)); | ||||
|   } else if (tenant_id_ != dst_tenant_id_ && | ||||
|       OB_FAIL(root_service->get_schema_service().check_if_tenant_has_been_dropped(tenant_id_, is_tenant_dropped))) { | ||||
|     LOG_WARN("check if tenant has been dropped failed", K(ret), K(tenant_id_)); | ||||
|   } else if (is_tenant_dropped) { | ||||
|     need_retry_ = false; | ||||
|     LOG_INFO("tenant has been dropped, exit anyway", K(ret), K(task_id_), K(parent_task_id_), K(tenant_id_)); | ||||
|   } else if (OB_FAIL(ObAllTenantInfoProxy::is_standby_tenant(&root_service->get_sql_proxy(), dst_tenant_id_, is_standby_tenant))) { | ||||
|     LOG_WARN("check is standby tenant failed", K(ret), K(dst_tenant_id_)); | ||||
|   } else if (is_standby_tenant) { | ||||
|     need_retry_ = false; | ||||
|     LOG_INFO("tenant is standby, exit anyway", K(ret), K(task_id_), K(parent_task_id_), K(dst_tenant_id_)); | ||||
|       LOG_INFO("tenant status is abnormal, exit anyway", K(ret), K(task_id_), K(parent_task_id_), K(tenant_id_), K(dst_tenant_id_)); | ||||
|     } | ||||
|   } else if (OB_FAIL(trans.start(&root_service->get_sql_proxy(), dst_tenant_id_))) { | ||||
|     LOG_WARN("start transaction failed", K(ret)); | ||||
|   } else { | ||||
|  | ||||
| @ -1347,6 +1347,42 @@ int ObDDLUtil::get_tenant_schema_guard( | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| int ObDDLUtil::check_tenant_status_normal( | ||||
|     ObISQLClient *proxy, | ||||
|     const uint64_t check_tenant_id) | ||||
| { | ||||
|   int ret = OB_SUCCESS; | ||||
|   bool is_tenant_dropped = false; | ||||
|   bool is_standby_tenant = false; | ||||
|   const ObSimpleTenantSchema *tenant_schema = nullptr; | ||||
|   ObSchemaGetterGuard schema_guard; | ||||
|   if (OB_ISNULL(proxy)) { | ||||
|     ret = OB_ERR_UNEXPECTED; | ||||
|     LOG_WARN("proxy is null", K(ret)); | ||||
|   } else if (OB_FAIL(GSCHEMASERVICE.get_tenant_schema_guard(OB_SYS_TENANT_ID, schema_guard))) { | ||||
|     LOG_WARN("get sys tenant schema guard failed", K(ret)); | ||||
|   } else if (OB_FAIL(schema_guard.check_if_tenant_has_been_dropped(check_tenant_id, is_tenant_dropped))) { | ||||
|     LOG_WARN("check tenant dropped failed", K(ret), K(check_tenant_id)); | ||||
|   } else if (is_tenant_dropped) { | ||||
|     ret = OB_TENANT_HAS_BEEN_DROPPED; | ||||
|     LOG_INFO("tenant has been dropped", K(ret), K(check_tenant_id)); | ||||
|   } else if (OB_FAIL(schema_guard.get_tenant_info(check_tenant_id, tenant_schema))) { | ||||
|     LOG_WARN("get tenant schema failed", K(ret), K(check_tenant_id)); | ||||
|   } else if (OB_ISNULL(tenant_schema)) { | ||||
|     ret = OB_ERR_UNEXPECTED; | ||||
|     LOG_WARN("unexpected error", K(ret), K(check_tenant_id)); | ||||
|   } else if (tenant_schema->is_dropping() || tenant_schema->is_in_recyclebin()) { | ||||
|     ret = OB_TENANT_HAS_BEEN_DROPPED; | ||||
|     LOG_INFO("tenant in dropping or in recyclebin", K(ret), K(check_tenant_id)); | ||||
|   } else if (OB_FAIL(ObAllTenantInfoProxy::is_standby_tenant(proxy, check_tenant_id, is_standby_tenant))) { | ||||
|     LOG_WARN("check is standby tenant failed", K(ret), K(check_tenant_id)); | ||||
|   } else if (is_standby_tenant) { | ||||
|     ret = OB_STANDBY_READ_ONLY; | ||||
|     LOG_INFO("tenant is standby", K(ret), K(check_tenant_id)); | ||||
|   } | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| /******************           ObCheckTabletDataComplementOp         *************/ | ||||
|  | ||||
| int ObCheckTabletDataComplementOp::check_task_inner_sql_session_status( | ||||
|  | ||||
| @ -491,6 +491,9 @@ public: | ||||
|       share::schema::ObSchemaGetterGuard *&src_tenant_schema_guard, | ||||
|       share::schema::ObSchemaGetterGuard *&dst_tenant_schema_guard); | ||||
|  | ||||
|   static int check_tenant_status_normal( | ||||
|       ObISQLClient *proxy, | ||||
|       const uint64_t check_tenant_id); | ||||
| private: | ||||
|   static int generate_order_by_str( | ||||
|       const ObIArray<int64_t> &select_column_ids, | ||||
|  | ||||
| @ -75,22 +75,16 @@ int ObDDLExecutorUtil::wait_ddl_finish( | ||||
|         break; | ||||
|       } else { | ||||
|         if (OB_FAIL(ret)) { | ||||
|         } else if (OB_TMP_FAIL(GSCHEMASERVICE.check_if_tenant_has_been_dropped( | ||||
|                                tenant_id, is_tenant_dropped))) { | ||||
|           LOG_WARN("check if tenant has been dropped failed", K(tmp_ret), K(tenant_id)); | ||||
|         } else if (is_tenant_dropped) { | ||||
|         } else if (OB_TMP_FAIL(ObDDLUtil::check_tenant_status_normal(GCTX.sql_proxy_, tenant_id))) { | ||||
|           if (OB_TENANT_HAS_BEEN_DROPPED == tmp_ret) { | ||||
|             ret = OB_TENANT_HAS_BEEN_DROPPED; | ||||
|             LOG_WARN("tenant has been dropped", K(ret), K(tenant_id)); | ||||
|         } | ||||
|  | ||||
|         if (OB_FAIL(ret)) { | ||||
|         } else if (OB_TMP_FAIL(ObAllTenantInfoProxy::is_standby_tenant(GCTX.sql_proxy_, tenant_id, is_tenant_standby))) { | ||||
|           LOG_WARN("check is standby tenant failed", K(tmp_ret), K(tenant_id)); | ||||
|         } else if (is_tenant_standby) { | ||||
|           } else if (OB_STANDBY_READ_ONLY == tmp_ret) { | ||||
|             ret = OB_STANDBY_READ_ONLY; | ||||
|             FORWARD_USER_ERROR(ret, "DDL execution status is undecided, please check later if it finishes successfully or not."); | ||||
|             LOG_WARN("tenant is standby now, stop wait", K(ret), K(tenant_id)); | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         if (OB_FAIL(ret)) { | ||||
|         } else if (nullptr != session && OB_FAIL(handle_session_exception(*session))) { | ||||
| @ -141,22 +135,16 @@ int ObDDLExecutorUtil::wait_build_index_finish(const uint64_t tenant_id, const i | ||||
|     is_finish = true; | ||||
|   } else { | ||||
|     if (OB_FAIL(ret)) { | ||||
|     } else if (OB_TMP_FAIL(GSCHEMASERVICE.check_if_tenant_has_been_dropped( | ||||
|                   tenant_id, is_tenant_dropped))) { | ||||
|       LOG_WARN("check if tenant has been dropped failed", K(tmp_ret), K(tenant_id)); | ||||
|     } else if (is_tenant_dropped) { | ||||
|     } else if (OB_TMP_FAIL(ObDDLUtil::check_tenant_status_normal(GCTX.sql_proxy_, tenant_id))) { | ||||
|       if (OB_TENANT_HAS_BEEN_DROPPED == tmp_ret) { | ||||
|         ret = OB_TENANT_HAS_BEEN_DROPPED; | ||||
|         LOG_WARN("tenant has been dropped", K(ret), K(tenant_id)); | ||||
|     } | ||||
|  | ||||
|     if (OB_FAIL(ret)) { | ||||
|     } else if (OB_TMP_FAIL(ObAllTenantInfoProxy::is_standby_tenant(GCTX.sql_proxy_, tenant_id, is_tenant_standby))) { | ||||
|       LOG_WARN("check is standby tenant failed", K(tmp_ret), K(tenant_id)); | ||||
|     } else if (is_tenant_standby) { | ||||
|       } else if (OB_STANDBY_READ_ONLY == tmp_ret) { | ||||
|         ret = OB_STANDBY_READ_ONLY; | ||||
|         FORWARD_USER_ERROR(ret, "DDL execution status is undecided, please check later if it finishes successfully or not."); | ||||
|         LOG_WARN("tenant is standby now, stop wait", K(ret), K(tenant_id)); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (OB_FAIL(ret)) { | ||||
|     } else if (is_server_stopped()) { | ||||
|  | ||||
| @ -400,20 +400,15 @@ int ObDDLServerClient::check_need_stop(const uint64_t tenant_id) | ||||
|   bool is_tenant_dropped = false; | ||||
|   bool is_tenant_standby = false; | ||||
|   if (OB_FAIL(ret)) { | ||||
|   } else if (OB_TMP_FAIL(GSCHEMASERVICE.check_if_tenant_has_been_dropped(tenant_id, is_tenant_dropped))) { | ||||
|     LOG_WARN("check if tenant has been droopped failed", K(tmp_ret), K(tenant_id)); | ||||
|   } else if (is_tenant_dropped) { | ||||
|   } else if (OB_TMP_FAIL(ObDDLUtil::check_tenant_status_normal(GCTX.sql_proxy_, tenant_id))) { | ||||
|     if (OB_TENANT_HAS_BEEN_DROPPED == tmp_ret) { | ||||
|       ret = OB_TENANT_HAS_BEEN_DROPPED; | ||||
|       LOG_WARN("tenant has been dropped", K(ret), K(tenant_id)); | ||||
|   } | ||||
|  | ||||
|   if (OB_FAIL(ret)) { | ||||
|   } else if (OB_TMP_FAIL(ObAllTenantInfoProxy::is_standby_tenant(GCTX.sql_proxy_, tenant_id, is_tenant_standby))) { | ||||
|     LOG_WARN("check is standby tenant failed", K(tmp_ret), K(tenant_id)); | ||||
|   } else if (is_tenant_standby) { | ||||
|     } else if (OB_STANDBY_READ_ONLY == tmp_ret) { | ||||
|       ret = OB_STANDBY_READ_ONLY; | ||||
|       LOG_WARN("tenant is standby now, stop wait", K(ret), K(tenant_id)); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (OB_FAIL(ret)) { | ||||
|   } else if (observer::ObServer::get_instance().is_stopped()) { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 obdev
					obdev