Index: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/util/CgroupsLCEResourcesHandler.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/util/CgroupsLCEResourcesHandler.java (date 1490468393000) +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/util/CgroupsLCEResourcesHandler.java (date 1492716397000) @@ -428,11 +428,18 @@ return ret; } - private String findControllerInMtab(String controller, + @VisibleForTesting + String findControllerInMtab(String controller, Map> entries) { for (Entry> e : entries.entrySet()) { - if (e.getValue().contains(controller)) - return e.getKey(); + if (e.getValue().contains(controller)) { + if (new File(e.getKey()).canRead()) { + return e.getKey(); + } else { + LOG.warn(String.format( + "Skipping inaccessible cgroup mount point %s", e.getKey())); + } + } } return null; Index: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/util/TestCgroupsLCEResourcesHandler.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/util/TestCgroupsLCEResourcesHandler.java (date 1490468393000) +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/util/TestCgroupsLCEResourcesHandler.java (date 1492646606000) @@ -33,7 +33,10 @@ import org.mockito.Mockito; import java.io.*; +import java.util.Collections; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Scanner; import java.util.concurrent.CountDownLatch; @@ -342,4 +345,24 @@ FileUtils.deleteQuietly(cgroupDir); } + @Test + public void testSelectCgroup() { + CgroupsLCEResourcesHandler test = new CgroupsLCEResourcesHandler(); + Map> cgroups = new LinkedHashMap<>(); + File cpu = new File(cgroupDir, "cpu"); + File cpuNoExist = new File(cgroupDir, "cpuNoExist"); + File memory = new File(cgroupDir, "memory"); + + Assert.assertTrue("temp dir should be created", cpu.mkdirs()); + Assert.assertTrue("temp dir should be created", memory.mkdirs()); + + cgroups.put(memory.getAbsolutePath(), Collections.singletonList("memory")); + cgroups.put(cpuNoExist.getAbsolutePath(), Collections.singletonList("cpu")); + cgroups.put(cpu.getAbsolutePath(), Collections.singletonList("cpu")); + String selectedCPU = test.findControllerInMtab("cpu", cgroups); + Assert.assertEquals("Wrong directory selected", + cpu.getAbsolutePath(), selectedCPU); + FileUtils.deleteQuietly(cpu); + FileUtils.deleteQuietly(memory); + } }