Rust组件注册表服务crates.iobug致组件索引更新错误

在2月20日时,Rust组件注册表crates.io用户回应,上传Rust组件Crate十分钟后,仍然在索引中无法使用,Rust官方表示,这是crates.io网页应用程序的bug,但意外地被GitHub服务中断所触发。受影响的三个Crate,分别是kaze、wasmer-runtime-core以及wasmer-win-exception-handler,无法正确地在crates.io中发布新版本,目前Rust官方已经修复该bug,受影响Crate也在重新上传后,已经可以使用。

官方提到,这个bug在部分情况,用户上传新的提交到索引GitHub存储库中,即便推送本身失败,但是系统仍然会回传推送成功消息,而错误的状态使工作调度器误以为上传成功,将该工作从队列中被移除,产生数据遗失的状况。而触发bug的原因,正是因为GitHub服务发生中断,所产生意料之外的回应所导致。

至于为何意外事件发生时,负责人员没有收到通知,官方​​解释,因为监控系统没有办法发现这个错误,虽然系统会监控工作执行失败的状况,但因为在这个案例中,工作被标记为正确,而使监控系统没有发挥应有的功能。官方表示,他们会实施定期检查,以确保索引和数据库间有正确同步。

幸好在事件发生时,有两名团队成员仍在线上工作,因此能马上解决问题,否则这个bug将会对更多Crate造成影响。在事件调查过程中,Rust官方发现目前系统的日志记录,并无法让他们正确地诊断出问题,包括在提交推送到索引或是执行背景工作时,没有任何消息被记录,而且发布Crate的API调用,日志中没有记录Crate名称,因此官方会强化日志记录功能,以便日后能更快地确定意外事件发生原因。