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

Reply via email to