首页 > 代码库 > 记一次惨痛的线上bug
记一次惨痛的线上bug
讲述背景,刚入职新公司2个月的时候,接手一个红包系统。资历尚浅,对业务也不是很熟悉。公司开发新的平台,需要使用红包功能来进行推广,按照产品的需求,进行开发。。。然而,问题就出在这里,红包接口比较陈旧,许多代码并有过多注释(甚至多出注释不全,注释出错),接口参数参差不齐,看的很累。
起先,将系统中所有调用红包的地方,都改成调用我的红包系统。和某端联调时,出现各种bug,参数无规约,返回参数不明确,(不知道要返回些啥,无明确需求文档),最后还是某端哥们,将原来的sql提供给我才得以解决此问题。
接着为某端提供接口,内部对接时,新增许多需求,旧接口不支持。于是新增了新的接口,啪啪啪撸完代码,接口提供出去。先是被次端开发吐槽代码参数大小写时大时小(泪奔,我不能因为你们一个端去乱动历史代码啊,这接口我们也不清楚多少人在使用,历史参数问题请吐槽以前的前辈吧),其次接口提供完,大概半个月之后,开始联调,出现几个不知名的bug,经过定位,发现代码中处理逻辑太多,好多都过不去,于是为此端另辟新接口方法。刷刷刷,测试通过了,没有问题了。准备上线了,Duang!!!重点来了,产品零时提出需求,要求用户第一次登陆时,提示用户领取红包,每台设备每用户只能领取一次。需求很合理,我看了下代码,代码中原来就用这种逻辑判断,内心狂喜,直接拿来使用,BOOM!!!BOOM!!!BOOM!!!问题来了,原来的代码逻辑上有问题,有漏洞,当用户使用玩次红包之后,是可以再次领取的。天哪,当时自己也没注意到这个细节,自测的时候完全没问题。而测试去测试的时候,并没有考虑这种场景,结果测试通过,程序没问题~~~上线。。。
平稳度过一个星期,接着瞬间爆炸,700多个10元红包,被同一个人刷走了,炸了,真炸了,我整个人都蒙逼了,wtf!!!,赶紧查代码,一查果然,这个旧的逻辑里面状态漏了一种,玩完。按理说,红包还有各种使用限制,好家伙,这家伙利用我们另外一个平台,未校验红包的bug,刷了个精光。我的天,欲哭无泪啊。。
然后呢,通过这件事情呢,我想说的是,对旧代码,一定要仔细看!!!要仔细看!!!仔细看!!!关于钱的项目一定要仔细,认真。任何代码不论它已经上线多久了,也不论多稳定,都不要相信它,你一定要好好扒开它的,仔细看每一个细节,思考每一个逻辑。不是不出问题,只是时候未到。拿我这件事来说,此代码发布于2015年3月,以稳定运行1年多,然后他依旧出了问题,而代价就是7000多元的损失,这简直就是致命的。
最后,愿每个程序员都能处理好代码,协调好工作,大家多抽出点时间,来讨论方案,而不是让一个人,两眼摸瞎,改个代码,怕这受影响,哪里受影响,简直了~
记一次惨痛的线上bug