Browse Source

HADOOP-19290. Operating on / in ChecksumFileSystem throws NPE. (#7074). Contributed by Ayush Saxena.

Ayush Saxena 7 months ago
parent
commit
3fda243419

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

@@ -770,7 +770,7 @@ public abstract class ChecksumFileSystem extends FilterFileSystem {
   abstract class FsOperation {
     boolean run(Path p) throws IOException {
       boolean status = apply(p);
-      if (status) {
+      if (status && !p.isRoot()) {
         Path checkFile = getChecksumFile(p);
         if (fs.exists(checkFile)) {
           apply(checkFile);

+ 7 - 0
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestChecksumFileSystem.java

@@ -300,4 +300,11 @@ public class TestChecksumFileSystem {
       assertEquals(perm, rawFs.getFileStatus(crc).getPermission());
     }
   }
+
+  @Test
+  public void testOperationOnRoot() throws Exception {
+    Path p = new Path("/");
+    localFs.mkdirs(p);
+    localFs.setReplication(p, localFs.getFileStatus(p).getPermission().toShort());
+  }
 }