HDFS-13738. fsck -list-corruptfileblocks has infinite loop if user is not privileged. Contributed by Yuen-Kuei Hsueh.

(cherry picked from commit 4023eeba05)
This commit is contained in:
Wei-Chiu Chuang 2018-08-13 17:36:13 -07:00
parent b38649c59a
commit 74d4fd975a
2 changed files with 24 additions and 0 deletions

View File

@ -210,8 +210,14 @@ public class DFSck extends Configured implements Tool {
allDone = true;
break;
}
if (line.startsWith("Access denied for user")) {
out.println("Failed to open path '" + dir + "': Permission denied");
errCode = -1;
return errCode;
}
if ((line.isEmpty())
|| (line.startsWith("FSCK started by"))
|| (line.startsWith("FSCK ended at"))
|| (line.startsWith("The filesystem under path")))
continue;
numCorrupt++;

View File

@ -2488,4 +2488,22 @@ public class TestFsck {
runFsck(cluster.getConfiguration(0), 0, true, "/");
}
}
@Test
public void testFsckNonPrivilegedListCorrupt() throws Exception {
cluster = new MiniDFSCluster.Builder(conf).numDataNodes(4).build();
UserGroupInformation ugi = UserGroupInformation.createUserForTesting("systest", new String[]{""});
ugi.doAs(new PrivilegedExceptionAction<Void>() {
@Override
public Void run() throws Exception {
String path = "/";
String outStr = runFsck(conf, -1, true, path, "-list-corruptfileblocks");
assertFalse(outStr.contains("The list of corrupt files under path '" + path + "' are:"));
assertFalse(outStr.contains("The filesystem under path '" + path + "' has "));
assertTrue(outStr.contains("Failed to open path '" + path + "': Permission denied"));
return null;
}
});
}
}