XbaoWu commented on code in PR #6736: URL: https://github.com/apache/hadoop/pull/6736#discussion_r1567203473
########## hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormatPBINode.java: ########## @@ -628,25 +638,59 @@ private void loadRootINode(INodeSection.INode p) { public final static class Saver { private long numImageErrors; - private static long buildPermissionStatus(INodeAttributes n) { - return n.getPermissionLong(); + private static long buildPermissionStatus(INodeAttributes n, + boolean enableSaveSplitIdStringTable) { + if(enableSaveSplitIdStringTable){ + return n.getPermissionLong(); + } else { + StringTable serialStringTable = SerialNumberManager.getSerialStringTable(); + Map<String, Integer> stringMap = StreamSupport + .stream(serialStringTable.spliterator(), false) + .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); + + long permission = n.getPermissionLong(); + permission = USER.BITS.combine(stringMap.get(n.getUserName()), permission); + permission = GROUP.BITS.combine(stringMap.get(n.getGroupName()), permission); + return permission; + } } - private static AclFeatureProto.Builder buildAclEntries(AclFeature f) { + private static AclFeatureProto.Builder buildAclEntries(AclFeature f, + boolean enableSaveSplitIdStringTable) { AclFeatureProto.Builder b = AclFeatureProto.newBuilder(); + Map<String, Integer> stringMap = null; + if(!enableSaveSplitIdStringTable){ + StringTable serialStringTable = SerialNumberManager.getSerialStringTable(); + stringMap = StreamSupport.stream(serialStringTable.spliterator(), false) + .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); + } + for (int pos = 0, e; pos < f.getEntriesSize(); pos++) { e = f.getEntryAt(pos); + if(!enableSaveSplitIdStringTable){ + e = (int) NAME.BITS.combine(stringMap.get(AclEntryStatusFormat.getName(e)), e); + } b.addEntries(e); } return b; } - private static XAttrFeatureProto.Builder buildXAttrs(XAttrFeature f) { + private static XAttrFeatureProto.Builder buildXAttrs(XAttrFeature f, boolean enableSaveSplitIdStringTable) { XAttrFeatureProto.Builder b = XAttrFeatureProto.newBuilder(); + Map<String, Integer> stringMap = null; + if(!enableSaveSplitIdStringTable){ + StringTable serialStringTable = SerialNumberManager.getSerialStringTable(); Review Comment: Yes, when enableSaveSplitIdStringTable is false, getSerialStringTable is called ; conversely, getStringTable is called. The mapping relations stored in these two StringTable are different. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org