排程失靈Bug事件
今天的事件發生在獎學金系統
用排程發送獎勵失敗
但是用API單筆發送就成功
又是一起不科學事件
公司有許多獎勵活動
只要客戶上完指定的課程
就會用排程送出獎勵
一樣在某個風和日麗的午後
運維工程師回報
有客戶反映沒有領到獎勵
原本以為客戶自己計算錯誤
結果使用API打單筆資料
還真的符合資格
查看排程Log也都有正常啟動
以為是偶發事件
打完API,客戶領到獎勵後
我就置之腦後了
沒想到短短兩天
又遇到了一次
再用API戳了一次客戶的合約
一樣判定合格
真的是讓我看傻了眼
雖然一個是排程一個是API
不過程式內其實是同一個方法
差別只在於合約筆數的多寡
白話翻譯就是
打多筆可能失敗
打單筆必定成功
這真是太神奇了,傑克
因為牽涉到真實的上課資料
無法在測試或是local 環境模擬
只能乖乖一行一行看程式碼Debug
程式邏輯也不複雜
- 撈出參加活動的合約
- 找出合約上的課程
- 判斷是否符合資格
一開始懷疑是打外部API有錯
但我看也沒有error log
實在不懂為啥會有問題
看了最近的commit
發現有一個distinct
再仔細看一下Code
大概長這樣
因為兩個list一個Distinct過
一個沒有
導致部分客戶的上課資料會沒有拿到
所以這個Bug才會發生在多筆的狀況
再看一下兇手
原來也是我自己
當初是為了解決另外一個Bug
才加了Distinct去重複
果然解鈴還需繫鈴人
自己造的孽還是得自己收拾
下回預告
測試了一個月的功能
上線後依然發生Bug
VPN也無法模擬客戶情況
到底發生什麼事了
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Frank's Talk!