You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by mr...@apache.org on 2017/10/24 21:44:46 UTC

ambari git commit: AMBARI-22283 : Add stack name and version to mpack API (mradhakrishnan)

Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-14714 4b9633923 -> e1fb736bd


AMBARI-22283 : Add stack name and version to mpack API (mradhakrishnan)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: e1fb736bde1056cbb88d01632bad50906972d648
Parents: 4b96339
Author: Madhuvanthi Radhakrishnan <mr...@hortonworks.com>
Authored: Tue Oct 24 14:44:07 2017 -0700
Committer: Madhuvanthi Radhakrishnan <mr...@hortonworks.com>
Committed: Tue Oct 24 14:44:07 2017 -0700

----------------------------------------------------------------------
 .../api/resources/MpackResourceDefinition.java  |   9 ++
 .../StackVersionResourceDefinition.java         |  50 ++++++++
 .../AbstractControllerResourceProvider.java     |   2 +-
 .../internal/MpackResourceProvider.java         |  10 --
 .../internal/StackVersionResourceProvider.java  | 115 ++++++++++++++-----
 5 files changed, 146 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e1fb736b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/MpackResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/MpackResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/MpackResourceDefinition.java
index aaf7fd9..bd9938c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/MpackResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/MpackResourceDefinition.java
@@ -18,8 +18,10 @@
 package org.apache.ambari.server.api.resources;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.ambari.server.api.services.Request;
 import org.apache.ambari.server.api.util.TreeNode;
@@ -56,6 +58,13 @@ public class MpackResourceDefinition extends BaseResourceDefinition {
   }
 
   @Override
+  public Set<SubResourceDefinition> getSubResourceDefinitions() {
+    Set<SubResourceDefinition> setChildren = new HashSet<>();
+    setChildren.add(new SubResourceDefinition(Resource.Type.StackVersion, null, false));
+    return setChildren;
+  }
+
+  @Override
   public List<PostProcessor> getPostProcessors() {
     List<PostProcessor> listProcessors = new ArrayList<>();
     listProcessors.add(new MpackHrefProcessor());

http://git-wip-us.apache.org/repos/asf/ambari/blob/e1fb736b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java
index dc05924..d621210 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java
@@ -18,9 +18,15 @@
 
 package org.apache.ambari.server.api.resources;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.util.TreeNode;
+import org.apache.ambari.server.controller.internal.ResourceImpl;
 import org.apache.ambari.server.controller.spi.Resource;
 
 public class StackVersionResourceDefinition extends BaseResourceDefinition {
@@ -54,4 +60,48 @@ public class StackVersionResourceDefinition extends BaseResourceDefinition {
     return children;
   }
 
+  @Override
+  public List<PostProcessor> getPostProcessors() {
+    List<PostProcessor> listProcessors = new ArrayList<>();
+    listProcessors.add(new StackVersionHrefProcessor());
+    listProcessors.add(new StackVersionPostProcessor());
+    return listProcessors;
+  }
+
+  /**
+   * Post Processing the mpack href when the call comes from stack endpoint to ensure that the
+   * href is a backreference to the mpacks end point
+   */
+  private class StackVersionHrefProcessor extends BaseHrefPostProcessor {
+    @Override
+    public void process(Request request, TreeNode<Resource> resultNode, String href) {
+      if (href.contains("/mpacks/")) {
+        ResourceImpl mpack = (ResourceImpl) resultNode.getObject();
+        Map<String, Map<String, Object>> mapInfo = mpack.getPropertiesMap();
+        Map<String, Object> versionInfo = mapInfo.get("Versions");
+
+        int idx = href.indexOf("mpacks/");
+        String stackName = (String)versionInfo.get("stack_name");
+        String stackVersion = (String)versionInfo.get("stack_version");
+        href = href.substring(0, idx) + "stacks/" + stackName + "/versions/" + stackVersion;
+        resultNode.setProperty("href", href);
+      } else {
+        super.process(request, resultNode, href);
+      }
+    }
+  }
+
+  /***
+   * Post processing to change the name of the result node to current_mpack
+   */
+  private class StackVersionPostProcessor implements PostProcessor {
+    @Override
+    public void process(Request request, TreeNode<Resource> resultNode, String href) {
+      if (href.contains("/mpacks/")) {
+        resultNode.setName("stack");
+
+      }
+    }
+  }
+
  }

http://git-wip-us.apache.org/repos/asf/ambari/blob/e1fb736b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
index b8c1674..afca803 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
@@ -199,7 +199,7 @@ public abstract class AbstractControllerResourceProvider extends AbstractAuthori
       case RootClusterSetting:
         return new RootClusterSettingsResourceProvider(managementController);
       case StackVersion:
-        return new StackVersionResourceProvider(propertyIds, keyPropertyIds, managementController);
+        return new StackVersionResourceProvider(managementController);
       case ClusterStackVersion:
         return resourceProviderFactory.getClusterStackVersionResourceProvider(managementController);
       case HostStackVersion:

http://git-wip-us.apache.org/repos/asf/ambari/blob/e1fb736b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java
index c72ae1b..84babef 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MpackResourceProvider.java
@@ -144,16 +144,12 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider {
       MpackResponse response = getManagementController().registerMpack(mpackRequest);
       if (response != null) {
         notifyCreate(Resource.Type.Mpack, request);
-        String[] stackNameVersion = response.getStackId().split("-");
         Resource resource = new ResourceImpl(Resource.Type.Mpack);
         resource.setProperty(MPACK_ID, response.getMpackId());
         resource.setProperty(REGISTRY_ID, response.getRegistryId());
         resource.setProperty(MPACK_NAME, response.getMpackName());
         resource.setProperty(MPACK_VERSION, response.getMpackVersion());
         resource.setProperty(MPACK_URI, response.getMpackUri());
-        resource.setProperty(STACK_NAME_PROPERTY_ID, stackNameVersion[0]);
-        resource.setProperty(STACK_VERSION_PROPERTY_ID, stackNameVersion[1]);
-
         associatedResources.add(resource);
         return getRequestStatus(null, associatedResources);
       }
@@ -255,9 +251,6 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider {
         resource.setProperty(MPACK_VERSION, entity.getMpackVersion());
         resource.setProperty(MPACK_URI, entity.getMpackUri());
         resource.setProperty(REGISTRY_ID, entity.getRegistryId());
-        StackEntity stackEntity = stackDAO.findByMpack(entity.getMpackId());
-        resource.setProperty(STACK_NAME_PROPERTY_ID, stackEntity.getStackName());
-        resource.setProperty(STACK_VERSION_PROPERTY_ID, stackEntity.getStackVersion());
         results.add(resource);
       }
     } else {
@@ -296,9 +289,6 @@ public class MpackResourceProvider extends AbstractControllerResourceProvider {
           resource.setProperty(MPACK_VERSION, entity.getMpackVersion());
           resource.setProperty(MPACK_URI, entity.getMpackUri());
           resource.setProperty(REGISTRY_ID, entity.getRegistryId());
-          StackEntity stackEntity = stackDAO.findByMpack(entity.getMpackId());
-          resource.setProperty(STACK_NAME_PROPERTY_ID, stackEntity.getStackName());
-          resource.setProperty(STACK_VERSION_PROPERTY_ID, stackEntity.getStackVersion());
           List<Packlet> packlets = getManagementController().getPacklets(entity.getMpackId());
           resource.setProperty(PACKLETS, packlets);
           results.add(resource);

http://git-wip-us.apache.org/repos/asf/ambari/blob/e1fb736b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java
index 094c75b..0633628 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java
@@ -21,6 +21,7 @@ package org.apache.ambari.server.controller.internal;
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -35,49 +36,104 @@ import org.apache.ambari.server.controller.spi.NoSuchResourceException;
 import org.apache.ambari.server.controller.spi.Predicate;
 import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.spi.Resource.Type;
 import org.apache.ambari.server.controller.spi.SystemException;
 import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
+import org.apache.ambari.server.controller.utilities.PredicateHelper;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.StackEntity;
+
+import com.google.inject.Inject;
 
 @StaticallyInject
 public class StackVersionResourceProvider extends ReadOnlyResourceProvider {
-
-  public static final String STACK_VERSION_PROPERTY_ID     = PropertyHelper.getPropertyId("Versions", "stack_version");
-  public static final String STACK_NAME_PROPERTY_ID        = PropertyHelper.getPropertyId("Versions", "stack_name");
-  public static final String STACK_MIN_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("Versions", "min_upgrade_version");
-  public static final String STACK_ACTIVE_PROPERTY_ID      = PropertyHelper.getPropertyId("Versions", "active");
-  public static final String STACK_VALID_PROPERTY_ID      = PropertyHelper.getPropertyId("Versions", "valid");
-  public static final String STACK_ERROR_SET      = PropertyHelper.getPropertyId("Versions", "stack-errors");
-  public static final String STACK_CONFIG_TYPES            = PropertyHelper.getPropertyId("Versions", "config_types");
-  public static final String STACK_PARENT_PROPERTY_ID      = PropertyHelper.getPropertyId("Versions", "parent_stack_version");
-  public static final String UPGRADE_PACKS_PROPERTY_ID = PropertyHelper.getPropertyId("Versions", "upgrade_packs");
-  public static final String STACK_MIN_JDK     = PropertyHelper.getPropertyId("Versions", "min_jdk");
-  public static final String STACK_MAX_JDK     = PropertyHelper.getPropertyId("Versions", "max_jdk");
+  public static final String RESPONSE_KEY = "Versions";
+  public static final String ALL_PROPERTIES = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "*";
+  public static final String STACK_VERSION_PROPERTY_ID     = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "stack_version";
+  public static final String STACK_NAME_PROPERTY_ID        = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "stack_name";
+  public static final String STACK_MIN_VERSION_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "min_upgrade_version";
+  public static final String STACK_ACTIVE_PROPERTY_ID      = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "active";
+  public static final String STACK_VALID_PROPERTY_ID      = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "valid";
+  public static final String STACK_ERROR_SET      = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP +"stack-errors";
+  public static final String STACK_CONFIG_TYPES            = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "config_types";
+  public static final String STACK_PARENT_PROPERTY_ID      = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "parent_stack_version";
+  public static final String UPGRADE_PACKS_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "upgrade_packs";
+  public static final String STACK_MIN_JDK     = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "min_jdk";
+  public static final String STACK_MAX_JDK     = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "max_jdk";
+  public static final String MPACK_ID     = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "mpack_id";
+
+  public static final Set<String> PROPERTY_IDS = new HashSet<>();
+
+  @Inject
+  protected static StackDAO stackDAO;
 
   private static Set<String> pkPropertyIds = new HashSet<>(
-    Arrays.asList(new String[]{STACK_NAME_PROPERTY_ID, STACK_VERSION_PROPERTY_ID}));
+    Arrays.asList(new String[]{STACK_NAME_PROPERTY_ID, STACK_VERSION_PROPERTY_ID, MPACK_ID}));
+
+  /**
+   * The key property ids for a mpack resource.
+   */
+  public static final Map<Resource.Type, String> KEY_PROPERTY_IDS = new HashMap<>();
+
+  static {
+    // properties
+    PROPERTY_IDS.add(MPACK_ID);
+    PROPERTY_IDS.add(STACK_VERSION_PROPERTY_ID);
+    PROPERTY_IDS.add(STACK_NAME_PROPERTY_ID);
+    PROPERTY_IDS.add(STACK_MIN_VERSION_PROPERTY_ID);
+    PROPERTY_IDS.add(STACK_ACTIVE_PROPERTY_ID);
+    PROPERTY_IDS.add(STACK_VALID_PROPERTY_ID);
+    PROPERTY_IDS.add(STACK_ERROR_SET);
+    PROPERTY_IDS.add(STACK_CONFIG_TYPES);
+    PROPERTY_IDS.add(STACK_PARENT_PROPERTY_ID);
+    PROPERTY_IDS.add(UPGRADE_PACKS_PROPERTY_ID);
+    PROPERTY_IDS.add(STACK_MIN_JDK);
+    PROPERTY_IDS.add(STACK_MAX_JDK);
+
+    // keys
+    KEY_PROPERTY_IDS.put(Resource.Type.Mpack, MPACK_ID);
+    KEY_PROPERTY_IDS.put(Resource.Type.Stack, STACK_NAME_PROPERTY_ID);
+    KEY_PROPERTY_IDS.put(Resource.Type.StackVersion, STACK_VERSION_PROPERTY_ID);
 
-  protected StackVersionResourceProvider(Set<String> propertyIds,
-      Map<Type, String> keyPropertyIds,
-      AmbariManagementController managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
   }
 
+  StackVersionResourceProvider(AmbariManagementController controller) {
+    super(PROPERTY_IDS, KEY_PROPERTY_IDS, controller);
+  }
+
+
   @Override
   public Set<Resource> getResources(Request request, Predicate predicate)
       throws SystemException, UnsupportedPropertyException,
       NoSuchResourceException, NoSuchParentResourceException {
 
     final Set<StackVersionRequest> requests = new HashSet<>();
+    Set<Resource> resources = new HashSet<>();
 
     if (predicate == null) {
       requests.add(getRequest(Collections.emptyMap()));
     } else {
-      for (Map<String, Object> propertyMap : getPropertyMaps(predicate)) {
-        requests.add(getRequest(propertyMap));
-      }
-    }
+      Map<String, Object> propertyMap = new HashMap<>(PredicateHelper.getProperties(predicate));
+      if (propertyMap.containsKey(MPACK_ID)) {
+        Resource resource = new ResourceImpl(Resource.Type.StackVersion);
+        Long mpackId = Long.valueOf((String) propertyMap.get(MPACK_ID));
+        StackEntity stackEntity = stackDAO.findByMpack(mpackId);
+        requests.add(new StackVersionRequest(stackEntity.getStackName(), stackEntity.getStackVersion()));
+        resource.setProperty(STACK_NAME_PROPERTY_ID,
+                (String)stackEntity.getStackName());
+
+        resource.setProperty(STACK_VERSION_PROPERTY_ID,
+                (String)stackEntity.getStackVersion());
+
+        resource.setProperty(MPACK_ID, mpackId);
+
+        resources.add(resource);
+
+      } else {
+        for (Map<String, Object> propertyMap1:
+             getPropertyMaps(predicate)) {
+          requests.add(getRequest(propertyMap1));
+        }
 
     Set<String> requestedIds = getRequestPropertyIds(request, predicate);
 
@@ -88,7 +144,6 @@ public class StackVersionResourceProvider extends ReadOnlyResourceProvider {
       }
     });
 
-    Set<Resource> resources = new HashSet<>();
 
     for (StackVersionResponse response : responses) {
       Resource resource = new ResourceImpl(Resource.Type.StackVersion);
@@ -107,16 +162,16 @@ public class StackVersionResourceProvider extends ReadOnlyResourceProvider {
 
       setResourceProperty(resource, STACK_VALID_PROPERTY_ID,
           response.isValid(), requestedIds);
-      
+
       setResourceProperty(resource, STACK_ERROR_SET,
           response.getErrors(), requestedIds);
-      
+
       setResourceProperty(resource, STACK_PARENT_PROPERTY_ID,
         response.getParentVersion(), requestedIds);
 
       setResourceProperty(resource, STACK_CONFIG_TYPES,
           response.getConfigTypes(), requestedIds);
-      
+
       setResourceProperty(resource, UPGRADE_PACKS_PROPERTY_ID,
           response.getUpgradePacks(), requestedIds);
 
@@ -126,11 +181,13 @@ public class StackVersionResourceProvider extends ReadOnlyResourceProvider {
       setResourceProperty(resource, STACK_MAX_JDK,
               response.getMaxJdk(), requestedIds);
 
-      resources.add(resource);
+        resources.add(resource);
+      }
+      }
     }
 
-    return resources;
-  }
+      return resources;
+    }
 
   private StackVersionRequest getRequest(Map<String, Object> properties) {
     return new StackVersionRequest(