前提:一份万年不变的代码,居然报了错
我们公司也算是个电商公司,网站自然支持支付宝和微信支付,支付网关完成后,使用一直没啥大问题,直到uat环境有一天突然基本不能支付,所有支付方式回调都失败,于是开始了漫漫bug长路。。。
1.看堆栈
root cause: caused by OptimisticLockingFailureException.....
乐观锁异常,是在根据id查询订单时报出来的,于是去看代码,没有发现代码上有啥问题,over
2.该bug并非每次都出,有很小的概率会成功,并且debug时不会抛异常,于是怀疑是多线程问题
由于uat环境最近网络不是很稳定,于是初步怀疑是支付宝或微信支付多次通知,多个线程同时查询(查询前有update hibernate托管的订单对象的操作),于是update--query交错执行,导致报错。
然后把线程池改成1,部署重启,依然报错。。。。over
3.看起来应该是多线程,但貌似又不是多线程问题,绞尽脑汁,看了两天的bug,无果而终。。。
4.寻找原因失败,那就对比吧,此时发现另外一个自测的test环境没有此问题。既然代码是一样的,那就只能怀疑是数据库了,虽然很牵强。。。
于是把test数据库copy到uat环境,重启服务器,bug神奇消失,好吧,虽然没找到原因,但总算解决了。
由于还要忙其他事,没那么多时间耗在这上面,所以勉强放过它吧,哦也~
5.平静的度过了一周,直到一天下午,测试妹纸又跑来说粗大事啦支付不起啦。堆栈一样,错误一样,阴魂不散啊,这要怎么玩?!于是强烈怀疑运维对数据库做了什么(因为这段时间运维确实动过环境,不太稳定),so尝试甩锅给运维,直到。。。。
另一个妹纸跑来说了另一个问题,心想既然支付不了暂时解决不了,不如换个脑筋。于是开始看新问题,发现怎么特么数据库里一条记录存的id不对呢,根本和订单上的id不一样啊,就特么不知道是哪儿来的id,这什么鬼,彻底懵逼。。。
此时正好另一个娃听到了,说他遇到过这种情况,是因为我们的另一个服务在通知我们这边时,配置了多个不同端但url相同的记录,即不同端的通知全特么都会通知到我们这边,但我们这边不需要其他端的啊,我只要我们端的啊,你把其他端的数据发给我我能找到神马。。。于是屏蔽了其他端的通知,问题解决,总算心情好点了,但特么支付问题还是要解决啊,测试都催了好久了,这么大的问题啊,继续抠脑袋。。。
抱着一丝侥幸心理,又支付了一把,居然神奇的成功了,不敢相信,又来了几发,没有异常,完美支付!难道和这个配置有关?!
于是又去梳理了一遍,发现:我们的服务在查询时,发现记录被更新了,但不是我们自己更新的,而是接收通知的服务更新的,而更新它的就是这些莫名配置出来的端发来的通知(其实根本不需要其他端啊,我们暂时只有一个端啊),所以乐观锁异常,这真是得来全不费工夫啊。。。
于是挨个去问,果然有人在支付出问题之前添加了好几个没用的通知地址配置,你手贱啊,没事添加没用的配置干啥啊?!我滴哥啊,既然找到原因,接下来就好办了:
1.接收通知的服务添加校验,丢弃非本端的通知
2.目前暂无配置多端的需求,配置模块添加唯一性校验,禁止添加多个端
看了2天的bug,硬是卵都没看出来,就这样解决了。。。。码农桑不起啊,心塞。。。。
不过排查bug也学到了很多东西,这也许也算码农的苦与乐吧
2017 fighting
相关推荐
【标题】:“记一次灵异般的 Bug 调试经历1” 【描述】:这篇文章讲述了作者在Quora上的一个热门经历,他受雇于一位心理学家修复一款输出异常的软件,该软件由其前任研究生编写。软件会在用户交互时显示不友好的潜...
根据提供的标题、描述以及部分无法正常解析的内容,我们可以推断这篇文章是关于一次特别的编程错误(bug)经历。虽然原始内容包含大量无法识别的字符,但通过标题和描述,我们可以构建一篇关于处理复杂或罕见编程...
团队成员小心翼翼地取出了这只飞蛾,并将其贴在了当天的工作日志上,旁边写着:“First actual case of bug being found”(第一次真实发生的bug案例)。 这个事件不仅解决了当时的技术问题,更重要的是它创造了一...
假设在一次功能测试中发现了一个BUG,具体表现为某个功能在特定条件下无法正常工作。经过初步分析,确定此BUG为“严重级”。接下来的处理流程如下: 1. **记录**:记录下BUG的详细信息,包括出现的环境、复现步骤等...
本文将深入探讨“软件测试BUG清单分析”,旨在提供一种有效的评估方法,以便测试人员和开发人员能够更好地理解和处理这些问题。 首先,BUG的重现度是评估其严重性的基础。如果一个BUG可以轻松地被重现,这表明问题...
专柜通软件测试BUG记录详述了在专柜通管理系统中发现的一系列问题,这些问题主要集中在软件的功能性和稳定性上,涵盖了多个关键模块。以下是这些测试缺陷的详细分析: 1. **人员基本资料增加所属网点时记录数显示不...
"《程序人生》记一次敖丙的线上P2事故1" knowledge points: 1. 程序 BUG 的处理:文章中提到 P2 级别的 BUG,是指系统中出现的严重错误,需要立即修复,以避免更大的损失。 2. 线上事故处理:文章中提到线上事故...
【BUGFREE功能扩展脚本】是一种自动化工具,用于增强BUGFREE软件的功能,特别是在管理与跟踪问题(BUG)的效率上。BUGFREE是一款广泛使用的缺陷跟踪系统,它允许团队记录、分配和跟踪软件开发过程中的错误和问题。...
- **批量运行**(仅限Test Case模式):一次性为多个Test Case创建Test Result,最多100个。 通过以上介绍,初学者可以对BugFree的基本操作和工作流程有初步了解,从而更好地进行缺陷管理和测试工作。在实际使用...
- 示例:第一次修改是因为代码逻辑错误导致,第二次是因为数据库连接配置不当,第三次是因为前端界面未同步更新等问题。 **3. BUG解决优先级** - 开发人员根据BUG的优先级来调整自己的工作计划。 - **重要且紧急*...
"Bug-Free Bug管理系统"是一款基于MySQL和PHP开发的轻量级缺陷跟踪工具,适用于各种规模的项目,尤其适合小型到中型项目。该系统的主要功能是帮助开发者和测试人员有效地管理软件开发过程中的bug报告、修复和跟踪。...
标题《捉虫历险记--常见的C++ Bug大围剿.pdf》涉及了软件开发中一个非常重要的环节——调试和修复Bug。C++作为一种广泛使用的编程语言,由于其灵活性和功能强大,在开发中出现的Bug也更为复杂多样。本书的内容旨在...
标题:“内核208天bug分析”描述:“腾讯大神写的内核timer调试笔记,典型的208天才重现一次的bug调试技巧” 知识点: 1. 内核bug现象:从描述中提到这是一个典型的内核bug,该bug表现形式为每208天重现一次,这种...
3. **Java**: Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的特性闻名。它具有丰富的类库和强大的跨平台能力,是构建复杂应用的理想选择。 4. **开源**: 开源软件意味着其源代码对公众开放...
- **日志和历史记录**:系统记录每一次bug状态的变更,便于追溯和分析。 3. **IIS配置**:IIS(Internet Information Services)是Windows操作系统上的Web服务器,用户可以直接在IIS上配置Bugfree,无需其他Web...
我们在2.x 版本的兼容和升级上做了大量的工作,但毕竟是一次完全的技术重构,系统稳定性和用户体验还需要在后续版本不断完善。提醒大家在对BugFree进行升级之前,对原有数据进行备份。也非常欢迎大家就使用过程中的...
它借鉴了微软的研发流程和Bug管理理念,提供了一种简单实用的解决方案,尤其适合中小IT企业和技术开发团队。 **1. Bugfree的核心特点** 1. **先进理念**:Bugfree采用了微软的成熟研发流程和管理理念,使得问题...
在这款游戏中,玩家将与一个不断学习和适应的AI系统进行互动,这使得每一次的游戏过程都有可能带来全新的挑战和策略。下面,我们将详细探讨这款游戏的各个组成部分以及相关的知识点。 首先,游戏攻略文档提供了玩家...
在软件测试过程中,BUG数据分析是一项至关重要的工作,它涉及到对软件缺陷的全面理解和管理,以提升软件质量和用户体验。首先,我们需要明确缺陷的定义,包括软件未达到产品说明书的功能、表现与说明书不一致、超出...