Manoj Govindassamy created HDFS-11382: -----------------------------------------
Summary: Persist Erasure Coding Policy ID in a new optional field in INodeFile in FSImage Key: HDFS-11382 URL: https://issues.apache.org/jira/browse/HDFS-11382 Project: Hadoop HDFS Issue Type: Task Components: hdfs Affects Versions: 3.0.0-alpha1 Reporter: Manoj Govindassamy Assignee: Manoj Govindassamy For Erasure Coded files, replication field in INodeFile message is re-used to store the EC Policy ID. *FSDirWriteFileOp#addFile* {noformat} private static INodesInPath addFile( FSDirectory fsd, INodesInPath existing, byte[] localName, PermissionStatus permissions, short replication, long preferredBlockSize, String clientName, String clientMachine) throws IOException { .. .. .. try { ErasureCodingPolicy ecPolicy = FSDirErasureCodingOp. getErasureCodingPolicy(fsd.getFSNamesystem(), existing); if (ecPolicy != null) { replication = ecPolicy.getId(); <=== } final BlockType blockType = ecPolicy != null? BlockType.STRIPED : BlockType.CONTIGUOUS; INodeFile newNode = newINodeFile(fsd.allocateNewInodeId(), permissions, modTime, modTime, replication, preferredBlockSize, blockType); newNode.setLocalName(localName); newNode.toUnderConstruction(clientName, clientMachine); newiip = fsd.addINode(existing, newNode, permissions.getPermission()); {noformat} With HDFS-11268 fix, {{FSImageFormatPBINode#Loader#loadInodeFile}} is rightly getting the EC ID from the replication field and then uses the right Policy to construct the blocks. *FSImageFormatPBINode#Loader#loadInodeFile* {noformat} ErasureCodingPolicy ecPolicy = (blockType == BlockType.STRIPED) ? ErasureCodingPolicyManager.getPolicyByPolicyID((byte) replication) : null; {noformat} The original intention was to re-use the replication field so the in-memory representation would be compact. But, this isn't necessary for the on-disk representation. replication is an optional field, and if we add another optional field for the EC policy, it won't be any extra space. Also, we need to make sure to have the appropriate asserts in place to make sure both fields aren't set for the same INodeField. -- This message was sent by Atlassian JIRA (v6.3.15#6346) --------------------------------------------------------------------- To unsubscribe, e-mail: hdfs-dev-unsubscr...@hadoop.apache.org For additional commands, e-mail: hdfs-dev-h...@hadoop.apache.org