You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by st...@apache.org on 2014/05/05 20:36:31 UTC

svn commit: r1592599 - in /incubator/slider/trunk/slider-core/src: main/java/org/apache/slider/client/ main/java/org/apache/slider/core/registry/docstore/ test/groovy/org/apache/slider/agent/standalone/

Author: stevel
Date: Mon May  5 18:36:30 2014
New Revision: 1592599

URL: http://svn.apache.org/r1592599
Log:
SLIDER-5 CLI can now get and save artifacts

Added:
    incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormat.java
      - copied, changed from r1592568, incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormats.java
Removed:
    incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormats.java
Modified:
    incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
    incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigurationOutputter.java
    incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy

Modified: incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
URL: http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java?rev=1592599&r1=1592598&r2=1592599&view=diff
==============================================================================
--- incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java (original)
+++ incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java Mon May  5 18:36:30 2014
@@ -84,8 +84,10 @@ import org.apache.slider.core.main.RunSe
 import org.apache.slider.core.persist.ConfPersister;
 import org.apache.slider.core.persist.LockAcquireFailedException;
 import org.apache.slider.core.registry.YARNRegistryClient;
+import org.apache.slider.core.registry.docstore.ConfigFormat;
 import org.apache.slider.core.registry.docstore.PublishedConfigSet;
 import org.apache.slider.core.registry.docstore.PublishedConfiguration;
+import org.apache.slider.core.registry.docstore.PublishedConfigurationOutputter;
 import org.apache.slider.core.registry.info.ServiceInstanceData;
 import org.apache.slider.core.registry.retrieve.RegistryRetriever;
 import org.apache.slider.core.registry.zk.ZKPathBuilder;
@@ -1962,6 +1964,7 @@ public class SliderClient extends Abstra
       // get a configuration
       PublishedConfiguration publishedConfiguration =
           actionRegistryGetConfig(registryArgs);
+      outputConfig(publishedConfiguration, registryArgs);
       
     } else {
       exitCode = EXIT_FALSE;
@@ -2040,19 +2043,32 @@ public class SliderClient extends Abstra
   }
   
   private void outputConfig(PublishedConfiguration published,
-      ActionRegistryArgs registryArgs) {
+      ActionRegistryArgs registryArgs) throws
+      BadCommandArgumentsException,
+      IOException {
     // decide whether or not to print
-    boolean print = registryArgs.dest == null;
     String entry = registryArgs.getConf;
     String format = registryArgs.format;
-    File destFile;
+    ConfigFormat configFormat = ConfigFormat.resolve(format);
+    if (configFormat == null) {
+      throw new BadCommandArgumentsException(
+          "Unknown/Unsupported format %s ", format);
+    }
+    PublishedConfigurationOutputter outputter =
+        PublishedConfigurationOutputter.createOutputter(configFormat,
+            published);
+    boolean print = registryArgs.dest == null;
     if (!print) {
+      File destFile;
       destFile = registryArgs.dest;
       if (destFile.isDirectory()) {
         // creating it under a directory
         destFile = new File(destFile, entry + "." + format);
       }
       log.info("Destination path: {}", destFile);
+      outputter.save(destFile);
+    } else {
+      print(outputter.asString());
     }
     
   }

Copied: incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormat.java (from r1592568, incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormats.java)
URL: http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormat.java?p2=incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormat.java&p1=incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormats.java&r1=1592568&r2=1592599&rev=1592599&view=diff
==============================================================================
--- incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormats.java (original)
+++ incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/ConfigFormat.java Mon May  5 18:36:30 2014
@@ -18,14 +18,14 @@
 
 package org.apache.slider.core.registry.docstore;
 
-public enum ConfigFormats {
+public enum ConfigFormat {
 
   JSON("json"),
   PROPERTIES("properties"),
   XML("xml"),
-  YAML("yaml");
-
-  ConfigFormats(String suffix) {
+//  YAML("yaml");
+  ;
+  ConfigFormat(String suffix) {
     this.suffix = suffix;
   }
 
@@ -34,5 +34,24 @@ public enum ConfigFormats {
   public String getSuffix() {
     return suffix;
   }
-  
+
+
+  @Override
+  public String toString() {
+    return suffix;
+  }
+
+  /**
+   * Get a matching format or null
+   * @param type
+   * @return
+   */
+  public static ConfigFormat resolve(String type) {
+    for (ConfigFormat format: values()) {
+      if (format.getSuffix().equals(type)) {
+        return format;
+      }
+    }
+    return null;
+  }
 }

Modified: incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigurationOutputter.java
URL: http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigurationOutputter.java?rev=1592599&r1=1592598&r2=1592599&view=diff
==============================================================================
--- incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigurationOutputter.java (original)
+++ incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigurationOutputter.java Mon May  5 18:36:30 2014
@@ -18,17 +18,122 @@
 
 package org.apache.slider.core.registry.docstore;
 
+import com.google.common.base.Charsets;
+import com.google.common.base.Preconditions;
+import org.apache.commons.io.FileUtils;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.slider.common.tools.ConfigHelper;
+
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.Properties;
 
 public abstract class PublishedConfigurationOutputter {
 
+  protected final PublishedConfiguration owner;
+
+  protected PublishedConfigurationOutputter(PublishedConfiguration owner) {
+    this.owner = owner;
+  }
+
   public void save(File dest) throws IOException {
     
   }
 
-  public String asString() {
+  public String asString() throws IOException {
     return "";
-  } 
+  }
+
+  public static PublishedConfigurationOutputter createOutputter(ConfigFormat format,
+      PublishedConfiguration owner) {
+    Preconditions.checkNotNull(owner);
+    switch (format) {
+      case XML:
+        return new XmlOutputter(owner);
+      case PROPERTIES:
+        return new PropertiesOutputter(owner);
+      case JSON:
+        return new JsonOutputter(owner);
+      default:
+        throw new RuntimeException("Unsupported format :" + format);
+    }
+  }
+  
+  public static class XmlOutputter extends PublishedConfigurationOutputter {
+
+
+    private final Configuration configuration;
 
+    public XmlOutputter(PublishedConfiguration owner) {
+      super(owner);
+      configuration = owner.asConfiguration();
+    }
+
+    @Override
+    public void save(File dest) throws IOException {
+      FileOutputStream out = new FileOutputStream(dest);
+      try {
+        configuration.writeXml(out);
+      } finally {
+        out.close();
+      }
+    }
+
+    @Override
+    public String asString() throws IOException {
+      return ConfigHelper.toXml(configuration);
+    }
+
+    public Configuration getConfiguration() {
+      return configuration;
+    }
+  }
+  
+  public static class PropertiesOutputter extends PublishedConfigurationOutputter {
+
+    private final Properties properties;
+
+    public PropertiesOutputter(PublishedConfiguration owner) {
+      super(owner);
+      properties = owner.asProperties();
+    }
+
+    @Override
+    public void save(File dest) throws IOException {
+      FileOutputStream out = new FileOutputStream(dest);
+      try {
+        properties.store(out, "");
+      } finally {
+        out.close();
+      }
+
+    }
+
+    @Override
+    public String asString() throws IOException {
+      return properties.toString();
+    }
+  }
+    
+    
+  public static class JsonOutputter extends PublishedConfigurationOutputter {
+
+    public JsonOutputter(PublishedConfiguration owner) {
+      super(owner);
+    }
+
+    @Override
+    public void save(File dest) throws IOException {
+        FileUtils.writeStringToFile(dest, asString(), Charsets.UTF_8);
+    }
+
+    @Override
+    public String asString() throws IOException {
+      return owner.asJson();
+    }
+  }
+    
+  
+  
 }

Modified: incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
URL: http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy?rev=1592599&r1=1592598&r2=1592599&view=diff
==============================================================================
--- incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy (original)
+++ incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy Mon May  5 18:36:30 2014
@@ -30,6 +30,7 @@ import org.apache.slider.common.SliderKe
 import org.apache.slider.common.params.ActionRegistryArgs
 import org.apache.slider.core.main.ServiceLauncher
 import org.apache.slider.core.persist.JsonSerDeser
+import org.apache.slider.core.registry.docstore.ConfigFormat
 import org.apache.slider.core.registry.docstore.PublishedConfigSet
 import org.apache.slider.core.registry.docstore.PublishedConfiguration
 import org.apache.slider.core.registry.info.CustomRegistryConstants
@@ -232,6 +233,8 @@ class TestStandaloneRegistryAM extends A
     assert 0 == client.actionRegistry(registryArgs)
 
   
+    
+    
     // listconf --internal
     registryArgs.list = false;
     registryArgs.listConf = true
@@ -244,6 +247,27 @@ class TestStandaloneRegistryAM extends A
       //expected
     }
 
+    registryArgs.list = false;
+    registryArgs.listConf = false
+    registryArgs.internal = false
+    registryArgs.format = "properties"
+    registryArgs.getConf = YARN_SITE
+    
+    describe registryArgs.toString()
+    assert 0 == client.actionRegistry(registryArgs)
+
+    File outputDir = new File("target/test_standalone_registry_am/output")
+    outputDir.mkdirs()
+
+    registryArgs.dest = outputDir
+    describe registryArgs.toString()
+    assert 0 == client.actionRegistry(registryArgs)
+    assert new File(outputDir,YARN_SITE + ".properties").exists()
+
+    registryArgs.format = "xml"
+    assert 0 == client.actionRegistry(registryArgs)
+    assert new File(outputDir,YARN_SITE + ".xml").exists()
+
 
 
     describe "freeze cluster"