给定一个用例,你将对象附加到对象存储,并将ref更新为指向新的提交,libgit2是安全的,其中safe被定义为以下结果之一:
关键点在于libgit2在什么时候保证数据被刷新到磁盘。在更新ref之前,我们是否保证将对象数据库中的数据刷新到磁盘?
换句话说:在什么情况下可以更新引用,但是对象存储没有持久化数据?
更新:我发现libgit2现在正在实现对fsync https://github.com/libgit2/libgit2/pull/4030的可选支持,这意味着在ref更新之前,所有松散的对象写入(追加)都应该在磁盘上。
答案 0 :(得分:1)
当你断电时,没有人会保证你能将任何东西写入磁盘。此问题只有两种解决方案:禁用写入缓存或使用UPS。至少用一个电池来刷新RAID控制器缓存。