调用点
- DataNode.getReplicaVisibleLength(ExtendedBlock) (org.apache.hadoop.hdfs.server.datanode) // ClientDataNodeProtocol
- BlockChecksumComputer in BlockChecksumHelper.BlockChecksumComputer(DataNode, ExtendedBlock, BlockChecksumOptions) (org.apache.hadoop.hdfs.server.datanode)
- DataNode.transferReplicaForPipelineRecovery(ExtendedBlock, DatanodeInfo[], StorageType[], String[], String) (org.apache.hadoop.hdfs.server.datanode)
下图是第一个分支的完整调用链。
可以看到,在openInfo方法里,调用了getLastBlockLength用来获取最后一个block的长度,那获取最后一个block的长度理所当然会调用getReplicaVisibleLength方法去获取副本的可见长度了。
我们关注一下openInfo的具体实现:
/**
* Grab the open-file info from namenode
* @param refreshLocatedBlocks whether to re-fetch locatedblocks
*/