Hdfs LeaseManager
了解LeaseManager类必须了解Lease结构:
Lease的基本结构变量有:
1.privatefinalStringholder;持有lease的clientname
2.privatelonglastUpdate;用于检查租约是否过期
3.privatefinalCollection<String>paths=newTreeSet<String>();该client持有的租约的文件
Lease的基本方法有:
1.privateStringfindPath(INodeFileUnderConstructionpendingFile)
查找是否该文件持有租约
2.booleanremovePath(Stringsrc)
将该src的文件的租约
LeaseManager类用来管理文件系统的租约设置,租约是用来对文件系统中并发的文件读写进行加锁机制控制。
1.privatefinalFSNamesystemfsnamesystem;
整个文件系统的操作以及目录树。
2.privateSortedMap<String,Lease>leases=newTreeMap<String,Lease>();
保存了LeaseHolder到Lease的映射。
3.privateSortedSet<Lease>sortedLeases=newTreeSet<Lease>();
保存了所有lease
4.privateSortedMap<String,Lease>sortedLeasesByPath=newTreeMap<String,Lease>();
保存了path到Lease的映射。
重要的方法有:
1.LeasegetLease(Stringholder)
根据holder名称,即client名称,获取其拥有的lease
2.synchronizedLeaseaddLease(Stringholder,Stringsrc)
根据src文件名和holderclientname添加租约
3.publicLeasegetLeaseByPath(Stringsrc)
根据Path名称获取拥有的lease
4.synchronizedLeaseaddLease(Stringholder,Stringsrc)
根据client名称添加lease
5.synchronizedvoidremoveLease(Leaselease,Stringsrc)
根据src路径移除lease
6.synchronizedLeasereassignLease(Leaselease,Stringsrc,StringnewHolder)
重新分配租约,将租约分配给新的client
7.synchronizedStringfindPath(INodeFileUnderConstructionpendingFile)
根据INodeFile获取其租约对应的path路径
另外,LeaseManager内部有一个监听的线程classMonitorimplementsRunnable
用来监听是否lease有效性