问题描述
早上一到公司,接到运维部门同事报的一个高优先级问题工单,描述如下:
“报销单号关联单子的审批记录没有了,但财务已做帐,导致相关审批人员需要重新审批。”
在正规大型互联网,数据丢失可算是严重级别为最高级0的问题了吧。
分析原因
这种问题从产品上线6个月前到现在都没出现过,突然出现了,肯定是什么原因导致的。
事出一定有原因,找出原因是重中之重。数据丢失铁定是由于在代码中有删除数据的行为。
于是优先锁定所有有删除操作的地方,由于整个项目仓储层是Dapper来实现的,所以通过表关键词全局搜索,根据肉眼逐条排查包含Delete的语句的方法,记录下来作为嫌疑对象。于是从200多个搜索结果中,得到一组7个方法的嫌疑清单,接下来分两手行动。
主线1.日志中查找出蛛丝马迹。看是否是在某种特殊情况下, 用户非常规操作造成。由于系统有记录所有操作的日志功能,但数据量无疑是巨大的,可以以时间为主线,根据单号,主键,嫌疑方法等关键词来过滤记录。
主线2. 逐个代码审查删除逻辑前后上下文的相关代码,看是否存在漏洞造成误删的情况。
经过几小时的排查,得到的结果令人沮丧。