Browse Source

HADOOP-17059. ArrayIndexOfboundsException in ViewFileSystem#listStatus. Contributed by hemanthboyina

Mingliang Liu 4 years ago
parent
commit
ab458b0108

+ 1 - 1
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java

@@ -929,7 +929,7 @@ public class ViewFileSystem extends FileSystem {
         } else {
           result[i++] = new FileStatus(0, true, 0, 0,
             creationTime, creationTime, PERMISSION_555,
-            ugi.getShortUserName(), ugi.getGroupNames()[0],
+            ugi.getShortUserName(), ugi.getPrimaryGroupName(),
             new Path(inode.fullPath).makeQualified(
                 myUri, null));
         }

+ 24 - 0
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFsBaseTest.java

@@ -55,6 +55,7 @@ import org.apache.hadoop.fs.LocatedFileStatus;
 import org.apache.hadoop.fs.RemoteIterator;
 import org.apache.hadoop.fs.FileContextTestHelper.fileType;
 import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.FsConstants;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.UnresolvedLinkException;
@@ -1003,4 +1004,27 @@ abstract public class ViewFsBaseTest {
       return mockFs;
     }
   }
+
+  @Test
+  public void testListStatusWithNoGroups() throws Exception {
+    final UserGroupInformation userUgi = UserGroupInformation
+        .createUserForTesting("user@HADOOP.COM", new String[] {});
+    userUgi.doAs(new PrivilegedExceptionAction<Object>() {
+      @Override
+      public Object run() throws Exception {
+        String clusterName = Constants.CONFIG_VIEWFS_DEFAULT_MOUNT_TABLE;
+        URI viewFsUri =
+            new URI(FsConstants.VIEWFS_SCHEME, clusterName, "/", null, null);
+        FileSystem vfs = FileSystem.get(viewFsUri, conf);
+        try {
+          vfs.listStatus(new Path(viewFsUri.toString() + "internalDir"));
+          Assert.fail("Exception should be thrown.");
+        } catch (IOException e) {
+          GenericTestUtils
+              .assertExceptionContains("There is no primary group for UGI", e);
+        }
+        return null;
+      }
+    });
+  }
 }