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


    事件:

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

    排查步骤:

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

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

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

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

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

      

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

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

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

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

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

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

  • 相关阅读:
    poj2756
    poj3425
    poj1740
    poj1948
    poj2853
    如何在CRichEditCtrl控件中直接读如RTF格式的文件
    pRichEdit>SetBackgroundColor(FALSE, oldclr); 只能设置一半 的背景色
    Directx报错02
    报错 error C2664: 'CreateWindowExA' : cannot convert parameter 2 from 'unsigned short [10]' to 'const char *'
    Debug/Release Dll报错
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/10286446.html
Copyright © 2020-2023  润新知