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_)) {
 | 
					  if (OB_ISNULL(root_service = GCTX.root_service_)) {
 | 
				
			||||||
    ret = OB_ERR_UNEXPECTED;
 | 
					    ret = OB_ERR_UNEXPECTED;
 | 
				
			||||||
    LOG_WARN("error unexpected, root service must not be nullptr", K(ret));
 | 
					    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))) {
 | 
					  } else if (OB_FAIL(ObDDLUtil::check_tenant_status_normal(&root_service->get_sql_proxy(), dst_tenant_id_))
 | 
				
			||||||
    LOG_WARN("check if tenant has been dropped failed", K(ret), K(dst_tenant_id_));
 | 
					          || OB_FAIL(ObDDLUtil::check_tenant_status_normal(&root_service->get_sql_proxy(), tenant_id_))) {
 | 
				
			||||||
  } else if (is_tenant_dropped) {
 | 
					    if (OB_TENANT_HAS_BEEN_DROPPED == ret || OB_STANDBY_READ_ONLY == ret) {
 | 
				
			||||||
      need_retry_ = false;
 | 
					      need_retry_ = false;
 | 
				
			||||||
    LOG_INFO("tenant has been dropped, 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 (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_));
 | 
					 | 
				
			||||||
  } else if (OB_FAIL(trans.start(&root_service->get_sql_proxy(), dst_tenant_id_))) {
 | 
					  } else if (OB_FAIL(trans.start(&root_service->get_sql_proxy(), dst_tenant_id_))) {
 | 
				
			||||||
    LOG_WARN("start transaction failed", K(ret));
 | 
					    LOG_WARN("start transaction failed", K(ret));
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
 | 
				
			|||||||
@ -1347,6 +1347,42 @@ int ObDDLUtil::get_tenant_schema_guard(
 | 
				
			|||||||
  return ret;
 | 
					  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         *************/
 | 
					/******************           ObCheckTabletDataComplementOp         *************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ObCheckTabletDataComplementOp::check_task_inner_sql_session_status(
 | 
					int ObCheckTabletDataComplementOp::check_task_inner_sql_session_status(
 | 
				
			||||||
 | 
				
			|||||||
@ -491,6 +491,9 @@ public:
 | 
				
			|||||||
      share::schema::ObSchemaGetterGuard *&src_tenant_schema_guard,
 | 
					      share::schema::ObSchemaGetterGuard *&src_tenant_schema_guard,
 | 
				
			||||||
      share::schema::ObSchemaGetterGuard *&dst_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:
 | 
					private:
 | 
				
			||||||
  static int generate_order_by_str(
 | 
					  static int generate_order_by_str(
 | 
				
			||||||
      const ObIArray<int64_t> &select_column_ids,
 | 
					      const ObIArray<int64_t> &select_column_ids,
 | 
				
			||||||
 | 
				
			|||||||
@ -75,22 +75,16 @@ int ObDDLExecutorUtil::wait_ddl_finish(
 | 
				
			|||||||
        break;
 | 
					        break;
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        if (OB_FAIL(ret)) {
 | 
					        if (OB_FAIL(ret)) {
 | 
				
			||||||
        } else if (OB_TMP_FAIL(GSCHEMASERVICE.check_if_tenant_has_been_dropped(
 | 
					        } else if (OB_TMP_FAIL(ObDDLUtil::check_tenant_status_normal(GCTX.sql_proxy_, tenant_id))) {
 | 
				
			||||||
                               tenant_id, is_tenant_dropped))) {
 | 
					          if (OB_TENANT_HAS_BEEN_DROPPED == tmp_ret) {
 | 
				
			||||||
          LOG_WARN("check if tenant has been dropped failed", K(tmp_ret), K(tenant_id));
 | 
					 | 
				
			||||||
        } else if (is_tenant_dropped) {
 | 
					 | 
				
			||||||
            ret = OB_TENANT_HAS_BEEN_DROPPED;
 | 
					            ret = OB_TENANT_HAS_BEEN_DROPPED;
 | 
				
			||||||
            LOG_WARN("tenant has been dropped", K(ret), K(tenant_id));
 | 
					            LOG_WARN("tenant has been dropped", K(ret), K(tenant_id));
 | 
				
			||||||
        }
 | 
					          } else if (OB_STANDBY_READ_ONLY == tmp_ret) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            ret = OB_STANDBY_READ_ONLY;
 | 
					            ret = OB_STANDBY_READ_ONLY;
 | 
				
			||||||
            FORWARD_USER_ERROR(ret, "DDL execution status is undecided, please check later if it finishes successfully or not.");
 | 
					            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));
 | 
					            LOG_WARN("tenant is standby now, stop wait", K(ret), K(tenant_id));
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (OB_FAIL(ret)) {
 | 
					        if (OB_FAIL(ret)) {
 | 
				
			||||||
        } else if (nullptr != session && OB_FAIL(handle_session_exception(*session))) {
 | 
					        } 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;
 | 
					    is_finish = true;
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    if (OB_FAIL(ret)) {
 | 
					    if (OB_FAIL(ret)) {
 | 
				
			||||||
    } else if (OB_TMP_FAIL(GSCHEMASERVICE.check_if_tenant_has_been_dropped(
 | 
					    } else if (OB_TMP_FAIL(ObDDLUtil::check_tenant_status_normal(GCTX.sql_proxy_, tenant_id))) {
 | 
				
			||||||
                  tenant_id, is_tenant_dropped))) {
 | 
					      if (OB_TENANT_HAS_BEEN_DROPPED == tmp_ret) {
 | 
				
			||||||
      LOG_WARN("check if tenant has been dropped failed", K(tmp_ret), K(tenant_id));
 | 
					 | 
				
			||||||
    } else if (is_tenant_dropped) {
 | 
					 | 
				
			||||||
        ret = OB_TENANT_HAS_BEEN_DROPPED;
 | 
					        ret = OB_TENANT_HAS_BEEN_DROPPED;
 | 
				
			||||||
        LOG_WARN("tenant has been dropped", K(ret), K(tenant_id));
 | 
					        LOG_WARN("tenant has been dropped", K(ret), K(tenant_id));
 | 
				
			||||||
    }
 | 
					      } else if (OB_STANDBY_READ_ONLY == tmp_ret) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
    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) {
 | 
					 | 
				
			||||||
        ret = OB_STANDBY_READ_ONLY;
 | 
					        ret = OB_STANDBY_READ_ONLY;
 | 
				
			||||||
        FORWARD_USER_ERROR(ret, "DDL execution status is undecided, please check later if it finishes successfully or not.");
 | 
					        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));
 | 
					        LOG_WARN("tenant is standby now, stop wait", K(ret), K(tenant_id));
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (OB_FAIL(ret)) {
 | 
					    if (OB_FAIL(ret)) {
 | 
				
			||||||
    } else if (is_server_stopped()) {
 | 
					    } 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_dropped = false;
 | 
				
			||||||
  bool is_tenant_standby = false;
 | 
					  bool is_tenant_standby = false;
 | 
				
			||||||
  if (OB_FAIL(ret)) {
 | 
					  if (OB_FAIL(ret)) {
 | 
				
			||||||
  } else if (OB_TMP_FAIL(GSCHEMASERVICE.check_if_tenant_has_been_dropped(tenant_id, is_tenant_dropped))) {
 | 
					  } else if (OB_TMP_FAIL(ObDDLUtil::check_tenant_status_normal(GCTX.sql_proxy_, tenant_id))) {
 | 
				
			||||||
    LOG_WARN("check if tenant has been droopped failed", K(tmp_ret), K(tenant_id));
 | 
					    if (OB_TENANT_HAS_BEEN_DROPPED == tmp_ret) {
 | 
				
			||||||
  } else if (is_tenant_dropped) {
 | 
					 | 
				
			||||||
      ret = OB_TENANT_HAS_BEEN_DROPPED;
 | 
					      ret = OB_TENANT_HAS_BEEN_DROPPED;
 | 
				
			||||||
      LOG_WARN("tenant has been dropped", K(ret), K(tenant_id));
 | 
					      LOG_WARN("tenant has been dropped", K(ret), K(tenant_id));
 | 
				
			||||||
  }
 | 
					    } else if (OB_STANDBY_READ_ONLY == tmp_ret) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
  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) {
 | 
					 | 
				
			||||||
      ret = OB_STANDBY_READ_ONLY;
 | 
					      ret = OB_STANDBY_READ_ONLY;
 | 
				
			||||||
      LOG_WARN("tenant is standby now, stop wait", K(ret), K(tenant_id));
 | 
					      LOG_WARN("tenant is standby now, stop wait", K(ret), K(tenant_id));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (OB_FAIL(ret)) {
 | 
					  if (OB_FAIL(ret)) {
 | 
				
			||||||
  } else if (observer::ObServer::get_instance().is_stopped()) {
 | 
					  } else if (observer::ObServer::get_instance().is_stopped()) {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user