一、升级、升级提交和升级回滚

1、升级

为简化实现,HDFS最多保留前一版本的文件系统,没有多版本的升级、回滚机制。
image.png
支持升级回滚,就必须保留升级前的数据,在数据节点,就是保存数据块以及数据块的校验信息文件。在doUpgrade()中,保留升级前数据是通过建立文件的硬链接实现的。

『可是硬连接在文件本体改变时,硬连接的文件也会跟着修改,回滚的话是不会保留新增内容的。所以,HDFS 的操作都是新增?而不会改变原有的文件么?』

2、升级回滚

3、升级提交

二、存储空间状态

上面三个操作中,都创建了临时目录。甚至「升级提交」中,只需要删除previous 文件夹,也先要把previous重命名再删除。是因为什么呢?

简单来说:是为了标记进行到哪一步了。
如果在执行上述操作中突然断电了,那重新启动的时候,就无法判断之前在哪个状态,接下来要如何处理了。

『如果使用一个什么状态保存呢? 可能面临的问题:写入失败了?换一个客户端启动,没有这个状态?』

image.png