Hadoop_NameNode_代码分析_日志_租约_9bit位实现方面(3)

(1)EditLogFileOutputStream:日志输出流使用双缓冲技术,使得在向磁盘同步数据时,其他准备写日志的线程不至于阻塞。一个NameNode可能在不同的StorageDirectory中有不同的日志文件要写,因此有ArrayList<EditLogOutputStream> editStreams成员变量。isSyncRunning成员用来标识是否某一个流正在进行同步操作,如果是这样,close的时候需要等待同步完成。任何一个线程写一条日志或者setReady流也就是转换缓冲都会锁上所有的流,这对性能没有影响,因为写日志是向双缓冲中的current写,很快完成,但是同步日志的时候就需要解锁并且设置isSyncRunning告知如果其他线程准备写日志的话,请wait。每个线程在写日志的时候获得一个TransactionID并且递增,在同步日志的时候系统会记录它的TransactionID。这样当一个线程想要同步日志的时候就可以通过比较TransactionID的方式来决定有没有必要同步了。所以logEdit是synchronized的,而logSync不是,logSync在局部代码会获得对象锁。

(2)每个客户有一个Lease,每一个Lease包含多个文件锁。LeaseManager中有Monitor检查Lease是否超时,如果超时直接释放客户所持的锁。

(3)FsAction枚举0-7,"---"->"rwx"。用户,属组,其他的FsAction组成FsPermission,FsPermission加上属主<String>和属组<String>变成PermissionStatus。INode的long变量作为一个位串,分组保存了FsPermission(MODE),文件主号(USER)和用户组号(GROUP)。SerialNumberManager可以把文件主号和用户组号转成String,PermissionStatusFormat用来对这个INode的long变量截取相应段的位。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值