libgit2在断电期间是否安全?

时间:2017-02-13 13:30:04

标签: libgit2

给定一个用例,你将对象附加到对象存储,并将ref更新为指向新的提交,libgit2是安全的,其中safe被定义为以下结果之一:

  • 更新参考号之前电源丢失,没有"可见"更改存储库的头部。
  • ref更新后电源丢失,head指向新提交,所有数据都可用。

关键点在于libgit2在什么时候保证数据被刷新到磁盘。在更新ref之前,我们是否保证将对象数据库中的数据刷新到磁盘?

换句话说:在什么情况下可以更新引用,但是对象存储没有持久化数据?

更新:我发现libgit2现在正在实现对fsync https://github.com/libgit2/libgit2/pull/4030的可选支持,这意味着在ref更新之前,所有松散的对象写入(追加)都应该在磁盘上。

1 个答案:

答案 0 :(得分:1)

当你断电时,没有人会保证你能将任何东西写入磁盘。此问题只有两种解决方案:禁用写入缓存或使用UPS。至少用一个电池来刷新RAID控制器缓存。