采集优化做了5项:
1.全量同步,资源类型支持可配置,默认同步对象存储和快照。
2.任务分片优化,map子任务数最多不超过150。
3.单个任务执行完成后,校验资源删除逻辑,不再使用之前等待所有采集任务执行完成再进行校验资源是否删除的逻辑。
4.CMDB资源表增加区域和区域项目字段,提供升级脚本。
5.全量同步,同步对象存储和快照始终同步。其它配置的资源,如果云账号区域下云厂资源总数和cmdb对应总数相等,不做同步处理。
同步失败,以下几类:
1.安全组规则同步,报错 For input string: "22,2375" 用老的同步job同样报错
2.The API does not exist or has not been published in the environment 华为云api抛出的异常,API不存在或没有发布到环境上
安全组同步,华为区域cn-southwest-2,项目id dbf4212a43aa47b59abc3e96472f7786 用老的同步job同样报错
3.接口限流,老的job同步同样报错
4.连接错误,com.huaweicloud.sdk.core.exception.ConnectionException: DefaultHttpClient ConnectionException
老的job同步同样报错
---华为NAT 已被nat使用的vpc 在创建nat时不应该被选上
在nat创建界面,查询vpc列表时,加过滤条件,过滤掉cmdb中该云账号区域下的nat关联vpc列表
---华为VPC 删除VPC资源时,需要校验VPC资源下是否存在子网
在VPC实现类VpcV3ServiceImpl删除处理时,加校验逻辑:查询子资源,如果有子资源,删除报错,提示错误码
IVpcV3Service checkIfHasSubResources
mysql或redis连接异常,导致资源一直同步中解决方案:
1.在redis中放入task_id的心跳key,5分钟失效。在SubSyncMapExecutor的taskProcess方法里,每次调用接口,判断上次心跳更新时间,超过1分钟就设置续期一次redis心跳key(5分钟)。
2.新加一个定时任务,查询collect_task表里同步中的记录,超过5分钟没有更新的,根据task的id判断redis心跳key在不在,如果不在,更新task为失败。删除redis中心跳key超时时间为-1的记录。
3.保存主任务到collect_task,新增type为MASTER,resourceType为具体资源类型,比如在ECS界面点的同步,就记录ECS,用于查询同步状态的条件。
4.前端查询资源类型或云账号的同步状态,根据资源类型和租户id查询type为MASTER的批次号,再根据批次号查询collect_task表里有没有同步中的,有则返回同步中,有一条同步失败返回同步失败,同步成功返回同步成功。
Connection refused
timed out
华为
ConnectionException
connectionexception
阿里
unreachable