补偿接口中循环一直执行sql的问题

事件:

  项目即将上线,测试,观察日志,发现一sql在dal.xml中一直刷日志,但对应在biz日志却是空的

排查步骤:

  1、查看对应日志的sql,在项目中找到对应代码所在位置,查看入口与代码逻辑

    接口是用作补偿,使用的是简答的controller调用业务,调度配置在任务系统,该sql是在补偿中轮询修改查询符合补偿要求的sql

  1、怀疑测试在压测,dal日志也打在这个文件中

    向对应测试人员提出问题,得到回复无人操作

  2、仔细观察该业务代码,该业务代码如下:

  

根据代码判断出现死循环执行职能是一个原因:

  total>0进入执循环,查询出道的集合却是空的,导致无法执行total--,所以死循环

  观察total的得到代码,发现它是查询sql的count数量,两边应该一致的,因此出现问题的原因感觉是安全性问题,就是进入循环后数据被修改了,后面发现好多操作都会修改同一张表的调度重试次数字段,就是说好多表与该操作有关设计有问题。

  调度重试次数应该存储在调度记录表中而非数据表中。

  这段diamante写的分页查询的结果没问题,却危险,if没有考虑else的情况,改为标准分页形式会更加可靠。

 

 

写代码需要思考,代码的含义,copy然后出问题抛然后甩只能。。。

posted @ 2019-01-18 10:45  guodaxia  阅读(195)  评论(0编辑  收藏  举报