Hadoop中针对文件xattr的构想

① 规则

  • 支持文件夹级别的xattr设置,文件夹内部递归继承父目录xattr。
  • 若文件自身xattr与父目录xattr冲突,则以文件自身xattr为准。

② 具体的理解

  • 文件夹内部递归继承父目录xattr:如果/test目录压缩的xattr对应为true,/test目录下所有的文件和子文件夹下的文件,都应该被压缩?

  • 在create文件时,文件本身是不存在xattr的,这时需要查找父目录是否具有xattr。**疑问:**查找父目录的xattr查找到哪一级,是一直遍历找到具有xattr的那级目录,还是只需遍历直接父目录

  • 文件被创建后,原本存在的目录为/test,该文件所在路径为/test/mkdir/1.txt,这样的话/test/mkdir是一个新建的目录。如果/test文件夹具有xattr,设置/test/mkdir/test/mkdir/1.txt的的xattr与/test一致,还是只需设置/test/mkdir/1.txt的xattr?如果/test/mkdir和/test/mkdir/1.txt是级联创建的,在创建/test/mkdir时,他就继承/test的xattr,到/test/mkdir/1.txt时,他就只需遍历父目录即可。

③ 目前的构想

  • 文件夹内部递归继承父目录xattr:如果/test目录压缩的xattr对应为true,/test目录下所有的文件和子文件夹下的文件,都应该被压缩。

  • 在create文件时,文件本身是不存在xattr的,这时需要查找父目录是否具有xattr。查找父目录的xatt时,是一直遍历找到具有xattr的那级目录

  • create时,文件直接遍历获取父目录的xattr,一旦设定xattr以后,文件的xattr不允许被修改。不支持文件级别的xattr设置

  • 文件被创建后,原本存在的目录为/test,该文件所在路径为/test/mkdir/1.txt,这样的话/test/mkdir是一个新建的目录。如果/test文件夹具有xattr,只需设置/test/mkdir/1.txt的xattr。

  • 向上(朝着根目录)遍历文件夹xattr时,一旦遇到具有xattr,不管xattr的值是true还是false,停止遍历。将这个目录的xattr作用于新创建的文件。如果一直遍历到根目录都没有找到xattr,则设置文件本身的xattr为false。

  • 一个文件被创建以后,再进行append,只需读写文件本身的xattr即可知道是否需要对文件进行压缩。

④ 最终构想

  • 文件在create时,递归遍历父目录的xattr,直至遍历得到xattr或者遍历完整个目录。如果xattr的值为true,则设置文件压缩属性为true;xattr的值为false或者未遍历得到xattr,则设置文件压缩属性为false。

  • 如果是对文件进行append,说明文件必须是已经存在的,直接遍历文件自身的属性。

  • 如果是对文件进行open,同append一样,直接遍历文件自身的属性。

  • 如果后面修改了文件夹的属性,以前已经存在的文件的xattr属性不改变。

  • 在文件不存在时,使用CreateFlag.OVERWRITECreateFlag.CREATE报错如下:
    这里写图片描述
    这里写图片描述

  • 如果文件不存在,使用CreateFlag.APPEND也会报错:
    这里写图片描述

综上:append方法只能接受CreateFlag.APPEND,而且要求文件必须是已经存在的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值