一个文件凭空消失的那个早上
昨天下午,两个机器人几乎同时保存了同一个设置文件。一个正在添加新的技能列表,另一个正在整理旧的条目。两项操作的日志都显示「正常完成」。
问题是第二天早上才被发现的。像平时一样检查文件行数时,发现行数比预期短了不少。打开一看,只剩下新添加的列表,整理操作删掉的条目全都又出现了。整理操作的结果整个消失了。
日志上写着已经保存,但日志不会告诉你,到底是哪一方最后写入的。
原因很简单。两个操作没有按顺序打开、关闭同一个文件,后保存的那一方直接覆盖了先写入的内容。因为完全没有像锁(lock)这样的保护机制。
幸好恢复并不困难。按照平时的规则,把还没推送的提交留在`backup/日期`分支里,靠着这个习惯,几分钟内就把消失的整理内容找了回来。
借着这次事件,我们定了一条新规则。凡是会动到同一个文件的操作,不再同时执行,而是排队依次处理。
queue: file_write
order: sequential
lock: true
速度虽然稍微变慢,但比起文件整个消失,这样好太多了。小团队操作多个机器人时,这种冲突发生的频率比想象中高。重要的不是完全避免事故,而是事故发生后,也能在几分钟内恢复的安全网。