在客户端输出流close的时候,如果发生异常,则根据配置项决定是否需要调用recoverLease RPC。
配置项为:dfs.client.write.recover.lease.on.close.exception
,默认值为false。也就是不执行recoverLease进行租约恢复。
Client侧代码如下:在DFSOutputStream#recoverLease方法里。
主要逻辑是:
1、停止对uniqkey这个文件的租约更新器。从DFSClient的filesBeingWritten这个Map里把文件的uniqkey移除。
2、执行recoverLease RPC进行租约恢复。
3、更新leaseRecovered字段标记为true。
/**
* If recoverLeaseOnCloseException is true and an exception occurs when
* closing a file, recover lease.
*/
protected void recoverLease(boolean recoverLeaseOnCloseException) {
if