Repository: ambari
Updated Branches:
  refs/heads/branch-1.7.0 4b2c827c5 -> fbb17091e


AMBARI-7914. Slider View: Need API to verify using slider-client if application 
name can be used (srimanth)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fbb17091
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fbb17091
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fbb17091

Branch: refs/heads/branch-1.7.0
Commit: fbb17091ee83de2d8cb9ea22d93d7798347446f4
Parents: 4b2c827
Author: Srimanth Gunturi <sgunt...@hortonworks.com>
Authored: Wed Oct 22 19:43:19 2014 -0700
Committer: Srimanth Gunturi <sgunt...@hortonworks.com>
Committed: Wed Oct 22 19:43:19 2014 -0700

----------------------------------------------------------------------
 .../view/slider/SliderAppsViewController.java   |  2 ++
 .../slider/SliderAppsViewControllerImpl.java    | 19 +++++++++++++++++-
 .../view/slider/rest/SliderAppsResource.java    | 21 ++++++++++++++++++++
 3 files changed, 41 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/fbb17091/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
 
b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
index 2d82bfb..4cdecf7 100644
--- 
a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
+++ 
b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
@@ -104,4 +104,6 @@ public interface SliderAppsViewController {
 
   public void flexApp(String appId, Map<String, Integer> componentsMap)
       throws YarnException, IOException, InterruptedException;
+
+  public boolean appExists(String string) throws IOException, 
InterruptedException, YarnException;
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fbb17091/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
 
b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
index 88afbb8..1c87d57 100644
--- 
a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
+++ 
b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
@@ -506,6 +506,23 @@ public class SliderAppsViewControllerImpl implements 
SliderAppsViewController {
   }
 
   @Override
+  public boolean appExists(final String appName) throws IOException, 
InterruptedException, YarnException {
+    return invokeSliderClientRunnable(new 
SliderClientContextRunnable<Boolean>() {
+      @Override
+      public Boolean run(SliderClient sliderClient) throws YarnException, 
IOException {
+        if (appName != null) {
+          try {
+            return sliderClient.actionExists(appName, false) == 
SliderClient.EXIT_SUCCESS;
+          } catch (UnknownApplicationInstanceException e) {
+            return Boolean.FALSE;
+          }
+        }
+        return Boolean.FALSE;
+      }
+    });
+  }
+
+  @Override
   public SliderApp getSliderApp(final String applicationId, final Set<String> 
properties)
      throws YarnException, IOException, InterruptedException {
     return invokeSliderClientRunnable(new 
SliderClientContextRunnable<SliderApp>() {
@@ -949,7 +966,7 @@ public class SliderAppsViewControllerImpl implements 
SliderAppsViewController {
                 String key = e.getKey();
                 String valueString = e.getValue().getAsString();
                 if ("application.def".equals(key)) {
-                  valueString = String.format(".slider/package/%1$s/%2$s", 
application.getName(), appZip.getName());
+                  valueString = String.format(".slider/package/%s/%s", 
application.getName(), appZip.getName());
                 }
                 configsMap.put(key, valueString);
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fbb17091/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
 
b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
index 39f3184..9d17bce 100644
--- 
a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
+++ 
b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
@@ -36,7 +37,9 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 
 import org.apache.ambari.view.ViewResourceHandler;
@@ -61,6 +64,24 @@ public class SliderAppsResource {
   @GET
   @Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
   public Response getApps(@Context HttpHeaders headers, @Context UriInfo uri) {
+    MultivaluedMap<String, String> queryParameters = uri.getQueryParameters();
+    if (queryParameters != null && 
queryParameters.containsKey("validateAppName")) {
+      List<String> appNames = queryParameters.get("validateAppName");
+      if (appNames.size() > 0) {
+        try {
+          if (sliderAppsViewController.appExists(appNames.get(0))) {
+            return Response.status(Status.CONFLICT).build();
+          }
+        } catch (IOException e) {
+          logger.warn("Unable to validate cluster name", e);
+        } catch (InterruptedException e) {
+          logger.warn("Unable to validate cluster name", e);
+        } catch (YarnException e) {
+          logger.warn("Unable to validate cluster name", e);
+        }
+        return Response.ok().build();
+      }
+    }
     return resourceHandler.handleRequest(headers, uri, null);
   }
 

Reply via email to