上图给出了最终会调用到complete RPC的客户端侧方法链路(除去Router那条线了)。
org.apache.hadoop.hdfs.DFSOutputStream#completeFile(org.apache.hadoop.hdfs.protocol.ExtendedBlock):
下面这个方法在complete rpc返回true之前,会进行重试,直到超过最大重试次数抛异常。
另外需要注意的是,这个方法在锁里(锁的是当前的流对象)。
// should be called holding (this) lock since setTestFilename() may// be called during unit testsprotected void completeFile(ExtendedBlock last) throws IOException