<FSNamesystem>LeaseManager用来管理租约，那么，FSNamesystem用来协调租约，其主要功能特性有： * FSNamesystem中和租约相关最核心的一个方法是recoverLeaseInternal，startFile方法、appendFile方法和recoverLease方法都会调用该方法，该方法主要功能有： > 验证ReCreate 如果待操作的文件path已经存在于该DFSClient的Lease的paths列表中，则抛AlreadyBeingCreatedException， 提示 "current leaseholder is trying to recreate file" > 验证OtherCreate 如果待操作的文件path已经存在于其它DFSClient的Lease的paths列表中，此时有两种策略：如果那个DFSClient的Lease的softLimit已经过期， 系统会尝试进行Lease-Recovery，然后把path从那个DFSClient的Lease的paths中remove掉，这样新的Client便获取了该path的占有权限； 如果那个DFSClient的Lease的softLimit还未过期，则抛AlreadyBeingCreatedException，提示 "because this file is already being created by ... on ..." > 验证Recovery 这个比较简单，如果待操作的文件还处于租约的Recovery状态，则抛异常RecoveryInProgressException，提示稍后重试 > ForceRecovery recoverLeaseInternal方法提供了force参数，如果force为true，系统会强制进行Lease-Recovery，具体功能见recoverLease方法的注释即可，如下： * Immediately revoke the lease of the current lease holder and start lease * recovery so that the file can be forced to be closed.force recovery的使用场景下文会有介绍