浏览代码

HDDS-621. ozone genconf improvements. Contributed by Dinesh Chitlangia.

Arpit Agarwal 6 年之前
父节点
当前提交
c456d6b3a5

+ 2 - 2
hadoop-ozone/docs/content/Settings.md

@@ -56,9 +56,9 @@ the specified path (directory).
 ozone genconf <path>
 ozone genconf <path>
 {{< /highlight >}}
 {{< /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
 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.
 * **ozone.enabled** This is the most critical setting for ozone.

+ 19 - 7
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.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.ozone.OzoneConfigKeys;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Parameters;
 import picocli.CommandLine.Parameters;
 import picocli.CommandLine.PicocliException;
 import picocli.CommandLine.PicocliException;
@@ -29,6 +30,7 @@ import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Marshaller;
 import java.io.File;
 import java.io.File;
+import java.io.IOException;
 import java.net.URL;
 import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Files;
 import java.nio.file.InvalidPathException;
 import java.nio.file.InvalidPathException;
@@ -79,7 +81,7 @@ public final class GenerateOzoneRequiredConfigurations extends GenericCli {
    * @throws JAXBException
    * @throws JAXBException
    */
    */
   public static void generateConfigurations(String path) throws
   public static void generateConfigurations(String path) throws
-      PicocliException, JAXBException {
+      PicocliException, JAXBException, IOException {
 
 
     if (!isValidPath(path)) {
     if (!isValidPath(path)) {
       throw new PicocliException("Invalid directory path.");
       throw new PicocliException("Invalid directory path.");
@@ -104,6 +106,9 @@ public final class GenerateOzoneRequiredConfigurations extends GenericCli {
 
 
     for (OzoneConfiguration.Property p : allProperties) {
     for (OzoneConfiguration.Property p : allProperties) {
       if (p.getTag() != null && p.getTag().contains("REQUIRED")) {
       if (p.getTag() != null && p.getTag().contains("REQUIRED")) {
+        if(p.getName().equalsIgnoreCase(OzoneConfigKeys.OZONE_ENABLED)) {
+          p.setValue(String.valueOf(Boolean.TRUE));
+        }
         requiredProperties.add(p);
         requiredProperties.add(p);
       }
       }
     }
     }
@@ -112,13 +117,20 @@ public final class GenerateOzoneRequiredConfigurations extends GenericCli {
         new OzoneConfiguration.XMLConfiguration();
         new OzoneConfiguration.XMLConfiguration();
     requiredConfig.setProperties(requiredProperties);
     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);
   }
   }
 
 
   /**
   /**

+ 19 - 0
hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/genconf/TestGenerateOzoneRequiredConfigurations.java

@@ -159,6 +159,25 @@ public class TestGenerateOzoneRequiredConfigurations {
         tempPath.getAbsolutePath());
         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.
    * Test to avoid generating ozone-site.xml when insufficient permission.
    * @throws Exception
    * @throws Exception