我正在阅读Google文件系统文件,我不确定它是如何处理副本上的写入(而不是原子记录追加)失败的。如果它返回成功,那么它将等到主服务器的下一个心跳获取世界的更新状态并检测损坏/陈旧的块版本并删除该块。我想主人可以在客户端请求副本位置时验证所有副本的有效性,以防止客户端获得过时/损坏的数据。这是它处理副本写入失败的方式吗?
答案 0 :(得分:0)
无效块可以分为两类:陈旧和损坏的校验和。它们以两种不同的方式进行检查。
陈旧的块。块的版本不是最新的。主服务器在常规心跳期间使用块服务器检查过时的块。
校验和损坏。由于不同的副本可能是合法的,因此不保证整个GFS的副本是相同的。此外,出于性能考虑,校验和是在块服务器本身而不是在主服务器上独立执行的。
可以分两个阶段检查校验和:
如果校验和已损坏,则块服务器会向主服务器报告问题。主服务器从具有健康副本的其他服务器服务器克隆副本。之后,主服务器指示报告问题的块服务器删除块。
回到你的问题,GFS如何处理副本写入失败?
如果在复制期间遇到任何错误,则会向客户端报告突变失败。客户端必须处理错误并重试突变。在块服务器的常规扫描期间,不一致的块将被垃圾收集。