2. Datanode存储

Datanode 升级 #

升级操作 #

回滚操作 #

Datanode 磁盘存储机构 #

<property>
  <name>dfs.data.dir</name>
  <value> /dfs/data,/dfs/data2</value>
</property>

磁盘上结构 #

DataStorage 实现 #

加锁/解锁 #

StorageDirectory中真正进行加锁操作的是tryLock()方法。tryLock()方法会首先构造锁文 件,然后调用file.getChannel.lock()方法尝试获得存储目录的独占锁,如果已经有进程占有锁 文件,那么 file.getChannel.lock()就会返回一个null的引用,表明有另一个节点运行在当前的 存储目录上,tryLock0方法会抛出异常并退出执行。如果加锁成功,tryLock0方法会在锁文件 中写入虚拟机信息。 加锁成功后,tryLock()方法会调用deleteOnExit()方法,在Java虚拟机运行结束时删除 in_use.lock文件

构造锁文件 尝试获得存储目录的独占锁 如果已经有进程占有锁文件 返回一个null的引用 如果加锁成功 在锁文件中写入虚拟机信息

DataStorage #

addStorageLocations() #

doTransition() #

doUpgrade() #

doRollback() #

doFinalize() #