問(wèn)題描述

早上一到公司,接到運(yùn)維部門(mén)同事報(bào)的一個(gè)高優(yōu)先級(jí)問(wèn)題工單,描述如下:

“報(bào)銷(xiāo)單號(hào)關(guān)聯(lián)單子的審批記錄沒(méi)有了,但財(cái)務(wù)已做帳,導(dǎo)致相關(guān)審批人員需要重新審批?!?/p>

在正規(guī)大型互聯(lián)網(wǎng),數(shù)據(jù)丟失可算是嚴(yán)重級(jí)別為最高級(jí)0的問(wèn)題了吧。

分析原因

這種問(wèn)題從產(chǎn)品上線6個(gè)月前到現(xiàn)在都沒(méi)出現(xiàn)過(guò),突然出現(xiàn)了,肯定是什么原因?qū)е碌摹?br/>事出一定有原因,找出原因是重中之重。數(shù)據(jù)丟失鐵定是由于在代碼中有刪除數(shù)據(jù)的行為。
于是優(yōu)先鎖定所有有刪除操作的地方,由于整個(gè)項(xiàng)目倉(cāng)儲(chǔ)層是Dapper來(lái)實(shí)現(xiàn)的,所以通過(guò)表關(guān)鍵詞全局搜索,根據(jù)肉眼逐條排查包含Delete的語(yǔ)句的方法,記錄下來(lái)作為嫌疑對(duì)象。于是從200多個(gè)搜索結(jié)果中,得到一組7個(gè)方法的嫌疑清單,接下來(lái)分兩手行動(dòng)。

  • 主線1.日志中查找出蛛絲馬跡。看是否是在某種特殊情況下, 用戶非常規(guī)操作造成。由于系統(tǒng)有記錄所有操作的日志功能,但數(shù)據(jù)量無(wú)疑是巨大的,可以以時(shí)間為主線,根據(jù)單號(hào),主鍵,嫌疑方法等關(guān)鍵詞來(lái)過(guò)濾記錄。

  • 主線2. 逐個(gè)代碼審查刪除邏輯前后上下文的相關(guān)代碼,看是否存在漏洞造成誤刪的情況。

經(jīng)過(guò)幾小時(shí)的排查,得到的結(jié)果令人沮喪。