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(