From c456d6b3a5061b99141869f07dc1820ec96b7a67 Mon Sep 17 00:00:00 2001 From: Arpit Agarwal Date: Fri, 19 Oct 2018 11:36:36 -0700 Subject: [PATCH] HDDS-621. ozone genconf improvements. Contributed by Dinesh Chitlangia. --- hadoop-ozone/docs/content/Settings.md | 4 +-- .../GenerateOzoneRequiredConfigurations.java | 26 ++++++++++++++----- ...stGenerateOzoneRequiredConfigurations.java | 19 ++++++++++++++ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/hadoop-ozone/docs/content/Settings.md b/hadoop-ozone/docs/content/Settings.md index 5c9bb412c1d..b02816b839d 100644 --- a/hadoop-ozone/docs/content/Settings.md +++ b/hadoop-ozone/docs/content/Settings.md @@ -56,9 +56,9 @@ the specified path (directory). ozone genconf {{< /highlight >}} -Let us look at the settings inside the generated file (ozone-site.xml) and +Let us look at the settings inside the generated file (ozone-site.xml) and how they control ozone. Once the right values are defined, this file -needs to be copied to ```ozone directory/etc/Hadoop```. +needs to be copied to ```ozone directory/etc/hadoop```. * **ozone.enabled** This is the most critical setting for ozone. diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java index 5d27838b749..c81ced3ca61 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java @@ -21,6 +21,7 @@ package org.apache.hadoop.ozone.genconf; import org.apache.hadoop.hdds.cli.GenericCli; import org.apache.hadoop.hdds.cli.HddsVersionProvider; import org.apache.hadoop.hdds.conf.OzoneConfiguration; +import org.apache.hadoop.ozone.OzoneConfigKeys; import picocli.CommandLine.Command; import picocli.CommandLine.Parameters; import picocli.CommandLine.PicocliException; @@ -29,6 +30,7 @@ import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import java.io.File; +import java.io.IOException; import java.net.URL; import java.nio.file.Files; import java.nio.file.InvalidPathException; @@ -79,7 +81,7 @@ public final class GenerateOzoneRequiredConfigurations extends GenericCli { * @throws JAXBException */ public static void generateConfigurations(String path) throws - PicocliException, JAXBException { + PicocliException, JAXBException, IOException { if (!isValidPath(path)) { throw new PicocliException("Invalid directory path."); @@ -104,6 +106,9 @@ public final class GenerateOzoneRequiredConfigurations extends GenericCli { for (OzoneConfiguration.Property p : allProperties) { if (p.getTag() != null && p.getTag().contains("REQUIRED")) { + if(p.getName().equalsIgnoreCase(OzoneConfigKeys.OZONE_ENABLED)) { + p.setValue(String.valueOf(Boolean.TRUE)); + } requiredProperties.add(p); } } @@ -112,13 +117,20 @@ public final class GenerateOzoneRequiredConfigurations extends GenericCli { new OzoneConfiguration.XMLConfiguration(); requiredConfig.setProperties(requiredProperties); - JAXBContext context = - JAXBContext.newInstance(OzoneConfiguration.XMLConfiguration.class); - Marshaller m = context.createMarshaller(); - m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); - m.marshal(requiredConfig, new File(path, "ozone-site.xml")); + File output = new File(path, "ozone-site.xml"); + if(output.createNewFile()){ + JAXBContext context = + JAXBContext.newInstance(OzoneConfiguration.XMLConfiguration.class); + Marshaller m = context.createMarshaller(); + m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + m.marshal(requiredConfig, output); + + System.out.println("ozone-site.xml has been generated at " + path); + } else { + System.out.printf("ozone-site.xml already exists at %s and " + + "will not be overwritten%n", path); + } - System.out.println("ozone-site.xml has been generated at " + path); } /** diff --git a/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/genconf/TestGenerateOzoneRequiredConfigurations.java b/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/genconf/TestGenerateOzoneRequiredConfigurations.java index 0fab18514c7..ecb65f085b6 100644 --- a/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/genconf/TestGenerateOzoneRequiredConfigurations.java +++ b/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/genconf/TestGenerateOzoneRequiredConfigurations.java @@ -159,6 +159,25 @@ public class TestGenerateOzoneRequiredConfigurations { tempPath.getAbsolutePath()); } + /** + * Generates ozone-site.xml at specified path. + * Verify that it does not overwrite if file already exists in path. + * + * @throws Exception + */ + @Test + public void testDoesNotOverwrite() throws Exception { + File tempPath = getRandomTempDir(); + String[] args = new String[]{tempPath.getAbsolutePath()}; + execute(args, "ozone-site.xml has been generated at " + + tempPath.getAbsolutePath()); + + //attempt overwrite + execute(args, "ozone-site.xml already exists at " + + tempPath.getAbsolutePath() + " and will not be overwritten"); + + } + /** * Test to avoid generating ozone-site.xml when insufficient permission. * @throws Exception