diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index f5de29bc3cb..d2f70e7e4a8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -188,6 +188,9 @@ Release 2.0.3-alpha - Unreleased HDFS-4377. Some trivial DN comment cleanup. (eli) + HDFS-4381. Document fsimage format details in FSImageFormat class javadoc. + (Jing Zhao via suresh) + OPTIMIZATIONS BUG FIXES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormat.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormat.java index 62d9a361478..ec6b9057740 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormat.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormat.java @@ -48,7 +48,57 @@ import org.apache.hadoop.io.MD5Hash; import org.apache.hadoop.io.Text; /** - * Contains inner classes for reading or writing the on-disk format for FSImages. + * Contains inner classes for reading or writing the on-disk format for + * FSImages. + * + * In particular, the format of the FSImage looks like: + *
+ * FSImage { + * LayoutVersion: int, NamespaceID: int, NumberItemsInFSDirectoryTree: long, + * NamesystemGenerationStamp: long, TransactionID: long + * {FSDirectoryTree, FilesUnderConstruction, SecretManagerState} (can be compressed) + * } + * + * FSDirectoryTree (if {@link Feature#FSIMAGE_NAME_OPTIMIZATION} is supported) { + * INodeInfo of root, NumberOfChildren of root: int + * [list of INodeInfo of root's children], + * [list of INodeDirectoryInfo of root's directory children] + * } + * + * FSDirectoryTree (if {@link Feature#FSIMAGE_NAME_OPTIMIZATION} not supported){ + * [list of INodeInfo of INodes in topological order] + * } + * + * INodeInfo { + * { + * LocalName: short + byte[] + * } when {@link Feature#FSIMAGE_NAME_OPTIMIZATION} is supported + * or + * { + * FullPath: byte[] + * } when {@link Feature#FSIMAGE_NAME_OPTIMIZATION} is not supported + * ReplicationFactor: short, ModificationTime: long, + * AccessTime: long, PreferredBlockSize: long, + * NumberOfBlocks: int (-1 for INodeDirectory, -2 for INodeSymLink), + * { + * NsQuota: long, DsQuota: long, FsPermission: short, PermissionStatus + * } for INodeDirectory + * or + * { + * SymlinkString, FsPermission: short, PermissionStatus + * } for INodeSymlink + * or + * { + * [list of BlockInfo], FsPermission: short, PermissionStatus + * } for INodeFile + * } + * + * INodeDirectoryInfo { + * FullPath of the directory: short + byte[], + * NumberOfChildren: int, [list of INodeInfo of children INode] + * [list of INodeDirectoryInfo of the directory children] + * } + **/ @InterfaceAudience.Private @InterfaceStability.Evolving