作者:Sanjay Ghemawat
          Howard Gobioff
          Shun-Tak Leung
翻译:tinyfool

4.5 过期副本检测

如果块服务器失效,或者块服务器当机的时候错过了一些操作,块副本会过期。对于每个块,主服务器保存一个块版本号,用来分辨当前副本和过期副本。

无论何时主服务器获得一个块的新租约,它增加块的版本号,然后通知当前副本。主服务器和这些副本都把新的版本号记录在它们的持久化存储的状态中。这发生在任何客户机得到通知以前,发生在它写入块之前。如果另外一个块服务器正好不可用,那么它的块版本号就不会被更新。当这个块服务器重新启动,向主服务器报告它拥有的块的集合以及相应的版本号的时候,主服务器就会检测出来块服务器包含过期的块。当主服务器看到一个比它们的记录更高的版本号,主服务器假定那些块服务器在获取租约的时候失效了,所以选择更高的版本作为当前的版本。

主服务器在周期的垃圾回收中移除所有的过期副本。在这之前,当回复客户机的块信息请求的时候,主服务器只是高效的当作那些过期的块不存在而已。作为另外的保护措施,主服务器通知客户机哪个块服务器持有租约的时候,当主服务器指示块服务器从哪个块服务器读取数据进行克隆操作的时候,主服务器的信息都包含了块的版本号。客户机或者块服务器执行操作时会验证版本号,这样它们就可以总是访问当前版本的数据了。


<< 4.4.2 讨论 | 5. 容错和诊断