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有效性

相关推荐