Hadoop学习二十七:Hadoop-Hdfs 权限相关 源码

阅读更多

一.Linux文件/目录权限

     http://hi.baidu.com/skyforum/item/9946ef57b371789608be1747,不了解的需要做一个基本的了解。

 

二. FsAction

  1. FsAction对应着文件/目录的操作权限。rwx。
  2. FsAction犀利之处在于枚举类型里的每一个权限与二进制的对应。Hadoop学习二十七:Hadoop-Hdfs 权限相关 源码_第1张图片
  3. 有了上面的对应,我们可以组合出所有的权限
    public enum FsAction {
      // POSIX style
      NONE("---"),
      EXECUTE("--x"),
      WRITE("-w-"),
      WRITE_EXECUTE("-wx"),
      READ("r--"),
      READ_EXECUTE("r-x"),
      READ_WRITE("rw-"),
      ALL("rwx");
    
      private final static FsAction[] vals = values();
    
      //this FsAction是否包含that FsAction
      public boolean implies(FsAction that) {}
       //this FsAction和that FsAction 与操作
      public FsAction and(FsAction that) {}
       //this FsAction和that FsAction 或操作
      public FsAction or(FsAction that) {}
      //this FsAction和that FsAction 非操作
      public FsAction not() {}
      
     }

 

三. FsPermission

  1. FsPermission对应着文件/目录的使用者权限,组权限,其他用户权限。
  2. FsPermission applyUMask(FsPermission umask)方法得到一个去掉了umask权限的新权限。
    public class FsPermission implements Writable {
      private FsAction useraction = null;
      private FsAction groupaction = null;
      private FsAction otheraction = null;
      /** Apply a umask to this permission and return a new one */
      public FsPermission applyUMask(FsPermission umask) {
        return new FsPermission(useraction.and(umask.useraction.not()),
            groupaction.and(umask.groupaction.not()),
            otheraction.and(umask.otheraction.not()));
      }
    }
     

四. PermissionStatus

  1.  PermissionStatus描述文件/目录属主,文件组和它的FsPermission。
      private String username;
      private String groupname;
      private FsPermission permission;
  2. INode中有一个long型成员变量,代表着PermissionStatus。保存了FsPermission(MODE),文件主号(USER)和用户组号(GROUP)。
    private long permission;

五. SerialNumberManager

  1.  Manage name-to-serial-number maps for users and groups.管理着文件属主和文件属主号,文件组和文件组号的对应关系。
  2. 在持久化信息FSImage中,不保存文件主号和用户组号,它们只是SerialNumberManager分配的,只保存在内存的信息。通过SerialNumberManager得到某文件主的文件主号时,如果找不到文件主号,会往对应关系中添加一条记录。

六. PermissionChecker

  1.  PermissionChecker用于权限检查。
  2.  checkSuperuserPrivilege(UserGroupInformation owner, String supergroup):Verify if the caller has the required permission.
  3. checkPermission(String path, INodeDirectory root, boolean doCheckOwner,
          FsAction ancestorAccess, FsAction parentAccess, FsAction access,
          FsAction subAccess):Check whether current user have permissions to access the path.

七. 权限相关类图

 Hadoop学习二十七:Hadoop-Hdfs 权限相关 源码_第2张图片

 

你可能感兴趣的:(Hadoop学习二十七:Hadoop-Hdfs 权限相关 源码)