一個檔案憑空消失的那個早晨
昨天下午,兩個機器人幾乎同時儲存了同一個設定檔案。一個正在新增技能清單,另一個正在整理舊的項目。兩個作業的紀錄都顯示「正常完成」。
問題是隔天早上才被發現的。像平常一樣檢查檔案行數時,發現行數比預期短了很多。打開一看,只剩下新增的清單,整理作業刪掉的項目全都又出現了。整理作業的結果整個消失了。
紀錄上寫著已經儲存,但紀錄不會告訴你,究竟是哪一方最後寫入的。
原因很單純。兩個作業沒有順序地開啟、關閉同一個檔案,後儲存的那個直接覆蓋了先寫入的內容。因為完全沒有像鎖(lock)這樣的保護機制。
幸好復原並不困難。按照平常的規則,把還沒推送的提交留在`backup/日期`分支裡,靠著這個習慣,幾分鐘內就把消失的整理內容找回來了。
藉著這次事件,我們定了一條新規則。凡是會動到同一個檔案的作業,不再同時執行,而是排隊依序處理。
queue: file_write
order: sequential
lock: true
速度雖然稍微變慢,但比起檔案整個消失,這樣好太多了。小團隊操作多個機器人時,這種衝突發生的頻率比想像中高。重要的不是完全避免事故,而是事故發生後,也能在幾分鐘內復原的安全網。