INode*.java 是用于描述目录、文件信息的类,如同我们之前讲到的我们提供给客户端透明的目录层次结构的访问方式,INode/INodeFile/INodeFileUnderConstruction/INodeDirectory/INodeDirectoryWithQuota 四个类,继承关系为:
INode
<<<==INodeFile<<<==INodeFileUnderConstruction(正在构建的文件)
<<<==INodeDirectory<<<==INodeDirectoryWithQuota(有容量限制的目录)
INode
实现接口Comparable<byte[]> 的一个抽象类。
变量name 名称,parent 父节点,modificationTime 修改时间,accessTime 访问时间。
静态类DirCounts 实现消耗名字空间消耗数量。
PermissionStatusFormat 类似于linux 中查看到六位数字表示的访问权限。在上文链接资料中蔡斌的博文也讲到了hdfs采用了类似于UNIX 中用户、组控制的安全策略
接着是INode 的构造函数INode( )。
接着是INode 关于权限的一些方法:设置权限信息,获取权限信息,取用户名等。
接着是一些get 状态、set 状态的一些方法。
INodeDirectory
中定义了每个目录下默认文件数量,以及孩子节点的列表:
1: protected static final int DEFAULT_FILES_PER_DIRECTORY = 5;
2: final static String ROOT_NAME = "";
3: private List<INode> children;
接着实现了INode 中的一些抽象类。
removeChild 和replaceChild 分别是移除和替换孩子节点,
getExistingPathINode 获取存在的路径INodes,输入是path,输出是已有的INode,是getExistingPathINodes 调用的函数。
INodeDirectorywithQuota
新变量包含了名字空间和磁盘配额限制:
1: private long nsQuota; /// NameSpace quota
2: private long nsCount;
3: private long dsQuota; /// disk space quota
4: private long diskspace;
通过setSpaceConsumed 设置这个配额大小,
verifyQuota 用于验证这个配额限制(nsQuota<newCount & dsQuota<newDiskspace)
INodeFile
1: return (short) ((header & HEADERMASK) >> BLOCKBITS);
INodeFileUnderConstruction
INodeFileUnderConstruction 是指那些正在被写入的文件,因此受限(不可读写),下面是变量:
1: String clientName; // lease holder
2: private final String clientMachine;
3: private final DatanodeDescriptor clientNode; // if client is a cluster node too.
4: private int primaryNodeIndex = -1; //the node working on lease recovery
5: private DatanodeDescriptor[] targets = null; //locations for last block
6: private long lastRecoveryTime = 0;
clientName是客户名称,targets 是最后数据块位置,primaryNodeIndex 是指占据租约的节点。
convertToInodeFile() 该文件写完后设置为INodeFile 类型。
removeBlock() 从文件Block list中移除最后一个block。
setLastBlock() 设置最后一个块的内容,由于只能支持append 操作,因此只能修改最后一个块。
assignPrimaryDatanode() 选取了第一个活节点作为首选数据节点。
setLastRecoveryTime() 是在lastRecoveryTime 过期后设置lastRecoveryTime 为当前时间,lastRecoveryTime 是用来干嘛的?
关于INode 还可以参考这篇
PS:看到中间发现应该先去看Block类的。