From 85325458f04e4ba84e624dc2f582c31748aa2c5a Mon Sep 17 00:00:00 2001 From: Adam Antal Date: Wed, 12 Feb 2020 13:19:00 +0100 Subject: [PATCH] YARN-10130. Do not allow output dir to be the same as input dir --- .../FSConfigToCSConfigArgumentHandler.java | 21 +++++++++++++++++++ .../FSConfigConverterTestCommons.java | 2 +- ...TestFSConfigToCSConfigArgumentHandler.java | 18 ++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/FSConfigToCSConfigArgumentHandler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/FSConfigToCSConfigArgumentHandler.java index c751953f7bc..da2eb82386b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/FSConfigToCSConfigArgumentHandler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/FSConfigToCSConfigArgumentHandler.java @@ -213,6 +213,7 @@ private FSConfigToCSConfigConverterParams validateInputFiles( checkFile(CliOption.FAIR_SCHEDULER, fairSchedulerXmlFile); checkFile(CliOption.CONVERSION_RULES, conversionRulesFile); checkDirectory(CliOption.OUTPUT_DIR, outputDir); + checkYarnSiteNotInOutputDir(yarnSiteXmlFile, outputDir); return FSConfigToCSConfigConverterParams.Builder.create() .withYarnSiteXmlConfig(yarnSiteXmlFile) @@ -225,6 +226,26 @@ private FSConfigToCSConfigConverterParams validateInputFiles( .build(); } + private void checkYarnSiteNotInOutputDir(String yarnSiteXmlFile, + String outputDir) { + if (yarnSiteXmlFile == null || outputDir == null) { + return; + } + + File xmlFile = new File(yarnSiteXmlFile); + File xmlParentFolder = xmlFile.getParentFile(); + File output = new File(outputDir); + if (output.equals(xmlParentFolder)) { + throw new IllegalArgumentException( + String.format("The %s (provided with %s|%s arguments) " + + "contains the %s provided with the %s|%s options.", + CliOption.OUTPUT_DIR.name, CliOption.OUTPUT_DIR.shortSwitch, + CliOption.OUTPUT_DIR.longSwitch, CliOption.YARN_SITE.name, + CliOption.YARN_SITE.shortSwitch, + CliOption.YARN_SITE.longSwitch)); + } + } + private void printHelp(Options opts) { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp("General options are: ", opts); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/FSConfigConverterTestCommons.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/FSConfigConverterTestCommons.java index 4f678095f08..af915d459f7 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/FSConfigConverterTestCommons.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/FSConfigConverterTestCommons.java @@ -35,7 +35,7 @@ * */ public class FSConfigConverterTestCommons { - private final static String TEST_DIR = + public final static String TEST_DIR = new File(System.getProperty("test.build.data", "/tmp")).getAbsolutePath(); public final static String FS_ALLOC_FILE = new File(TEST_DIR, "test-fair-scheduler.xml").getAbsolutePath(); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/TestFSConfigToCSConfigArgumentHandler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/TestFSConfigToCSConfigArgumentHandler.java index edf4c86ceb2..0df0a30f0c3 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/TestFSConfigToCSConfigArgumentHandler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/converter/TestFSConfigToCSConfigArgumentHandler.java @@ -492,4 +492,22 @@ public void testEnabledTerminalRuleCheck() throws Exception { assertFalse("No terminal rule check was enabled", conversionOptions.isNoRuleTerminalCheck()); } + + @Test + public void testYarnSiteNotInOutputFolder() throws Exception { + setupFSConfigConversionFiles(true); + + FSConfigToCSConfigArgumentHandler argumentHandler = + createArgumentHandler(); + + String[] args = new String[] { + "-y", FSConfigConverterTestCommons.YARN_SITE_XML, + "-o", FSConfigConverterTestCommons.TEST_DIR}; + + int retVal = argumentHandler.parseAndConvert(args); + assertEquals("Return value", -1, retVal); + + assertTrue(fsTestCommons.getErrContent() + .toString().contains("contains the yarn-site.xml")); + } } \ No newline at end of file -- 2.21.0