• 功能奇数次执行和偶数次执行时的结果不同的故障复盘


    场景:
    将数据库查询到的数据,写入一个xls文件。
    完成后,多点几次,发现一个问题,偶数次生成的文件比较小,打开一看,里面只有一行,只有标题,没有内容。
    分析日志,发现偶数次执行时预期的执行进程中没有相关的日志打印

    分析:
    奇数次执行与预期一致,就不再分析了;
    偶数次执行时虽没有找到日志,但生成的文件名与文件格式均与预期一致,唯独缺少文件内容。
    重启进程打开调试,果然在偶数次执行时,Eclipse中相关代码并没有触发,这与预期进程中没有找到相关日志打印是一致的。
    (事后分析:有与代码逻辑相现的结果文件名及标题,说明代码执行了,但在预期的进程日志没有找到打印,只能说明没有在预期进程中执行,但的确是执行了)
    问题:
    既然除缺少文件内容外,其它均与预期一致,说明相关代码肯定执行了。日志去哪了呢。
    解决办法(在这个环节出了乌龙):
    没有找到日志,说不定在其它地方有。然后使用NotePad++对整个目录搜索,最后得到的结论是没找到。
    这个乌龙结论的原因忘了,不知正在搜索时,远程主机被其它人占用,然后再登陆时状态丢失,还是当时Notepad++卡死,重启了。

    反思:
    对可能的疑点或一个猜想一定要严谨的验证,大胆架设,小心求证,一定要小心求证。
    这个乌龙,导致后面浪费自己和其它同事不少时间。

    使用Notepad++搜索很大的目录时,一定要限定扩展名,不然搜到大文件或二进制文件,会导致Notepad++卡死后重启。

    求助:
    求助相关模块的同事,对方验证了下均表示他们的模块无异常,让我这边排查代码逻辑。
    这就无解了,如果逻辑有问题肯定会抛异常,怎么可能找不到相关日志,报错或正常打印。

    在求助的过程中,有一个同事在帮助分析偶数次执行时,给一个提示,让确定下偶数次执行时,执行功能的path,应该是进程吧(猜的,这块对我是黑盒)

    由于当时一直纠结于为什么没有日志的事,把这个重要线索给忽略了。

    转机:
    正好遇到双休日,忽然想到这个故障,path中的root节点与另一个进程名很像,看看这个进程下有没有相关日志,
    一查,果然有!!!!!!!!!!!!!!!!!!!!!!!!!!
    日志的事有着落了,说明偶数次执行时,功能在另一个进程中执行了。

    问题:为什么没有内容呢,标题都有
    远程调试开一下,跟了代码,ResultSet中的确没有数据。
    为什么呢????????
    无解。。。。
    在干其它事时,忽然想到,是不是数据库连接有问题,把断点打在获取Connection之后,一看dbUser不是预期的那个,打开PL/SQL,使用Connection中使用的帐户登陆Oracle,把日志中的sql在这个用户下执行一下,果然查询结果为空。
    世界澄清了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    功能使用其它模块提供的获取数据库API,在不同进程下,这个API使用的dbUser是不一样的,这次比较巧的是,这个非预期dbUser中居然有表结构了。

    解决:
    与其它模块的同事协调处理办法。


    反思:
    故障出现了,肯定有其符合逻辑的原因,目标是根据已知的信息,大胆架设,小心求证,一定要求证。

    一定不能陷在,看似矛盾的已知信息上,而让自己陷入死循环。要根据已知,架设可能导致这种结果的可能性,再来一一验证,最终找到真正的原因。

    tips:
    Notepad++文件件查找功能的help:

  • 相关阅读:
    关于each()、find()、filter()遍历节点的操作方法
    Jquery中的事件与动画
    JavaScript对象
    jquery选择器
    2018-8-16JWTtoken用户登录认证思路分析9502751
    2018-8-10爬虫第四天内容
    JWTtoken的原理以及在django中的应用
    rest_framework中视图相关
    Django REST framework 中的序列化器
    Django REST framework API开发
  • 原文地址:https://www.cnblogs.com/softidea/p/4700524.html
Copyright © 2020-2023  润新知