一、finalizeBlock
1.1 调用点&调用场景
主要用于完成block的写入。调用点有两处:
① BlockReceiver#receiveBlock方法里:
这个调用场景发生在:datanode在所有的packet都接收完了之后,如果是数据复制、balancer、或者stage是TRANSFER_FINALIZED的情况下,调用finalizeBlock。
② BlockReceiver.PacketResponder#finalizeBlock:
这个场景发生在client写datanode的场景,datanode侧接收到了block里最后一个packet。然后就会去finalize这个块,并且向namenode发送IBR告诉namenode收到了这个块,并且是Block_Received。
1.2 finalizeBlock具体实现逻辑
/**
* Complete the block write!
*/
@Override