zoukankan      html  css  js  c++  java
  • 补偿接口中循环一直执行sql的问题

    事件:

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

    排查步骤:

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

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

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

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

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

      

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

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

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

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

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

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

  • 相关阅读:
    gdb typeid 详解
    make报错
    期末作业验收
    个人作业——软件工程实践总结作业
    原型设计(结对第一次)
    团队展示(团队)
    第二次作业——个人项目实战(sudoku)
    软件工程实践第一次作业--准备
    C++第一次课堂作业 circle
    第四次作业 计算器第二部分(未完)
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/10286446.html
Copyright © 2011-2022 走看看