You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2014/12/06 23:15:11 UTC
ambari git commit: AMBARI-8539. Upgrade Execute: tie stage
information more closely with UpgradeItem (ncole)
Repository: ambari
Updated Branches:
refs/heads/trunk 8eb500e60 -> e7c512c2c
AMBARI-8539. Upgrade Execute: tie stage information more closely with UpgradeItem (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e7c512c2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e7c512c2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e7c512c2
Branch: refs/heads/trunk
Commit: e7c512c2c45256ef7cb5a26bc1b7282be0574c20
Parents: 8eb500e
Author: Nate Cole <nc...@hortonworks.com>
Authored: Fri Dec 5 08:09:39 2014 -0800
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Sat Dec 6 16:47:04 2014 -0500
----------------------------------------------------------------------
.../resources/ResourceInstanceFactoryImpl.java | 2 +-
.../api/services/UpgradeGroupService.java | 2 +-
.../server/api/services/UpgradeItemService.java | 13 +-
.../server/api/services/UpgradeService.java | 1 +
.../internal/RequestResourceProvider.java | 44 +++-
.../internal/StageResourceProvider.java | 3 +-
.../internal/UpgradeGroupResourceProvider.java | 87 ++++++--
.../internal/UpgradeItemResourceProvider.java | 213 ++++++++-----------
.../internal/UpgradeResourceProvider.java | 36 +++-
.../ambari/server/orm/dao/UpgradeDAO.java | 49 ++++-
.../ambari/server/state/UpgradeHelper.java | 101 +++++++++
.../internal/UpgradeResourceProviderTest.java | 110 +++++++++-
12 files changed, 484 insertions(+), 177 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceFactoryImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceFactoryImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceFactoryImpl.java
index b5fe94e..a353be6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceFactoryImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceFactoryImpl.java
@@ -331,7 +331,7 @@ public class ResourceInstanceFactoryImpl implements ResourceInstanceFactory {
case UpgradeItem:
resourceDefinition = new SimpleResourceDefinition(
- Resource.Type.UpgradeItem, "upgrade_item", "upgrade_items");
+ Resource.Type.UpgradeItem, "upgrade_item", "upgrade_items", Resource.Type.Task);
break;
case Stage:
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeGroupService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeGroupService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeGroupService.java
index da21658..ed97d66 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeGroupService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeGroupService.java
@@ -21,7 +21,6 @@ import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.GET;
-import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@@ -82,6 +81,7 @@ public class UpgradeGroupService extends BaseService {
Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
mapIds.put(Resource.Type.Cluster, m_clusterName);
mapIds.put(Resource.Type.Upgrade, m_upgradeId);
+ mapIds.put(Resource.Type.Request, m_upgradeId);
if (null != groupId) {
mapIds.put(Resource.Type.UpgradeGroup, groupId.toString());
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeItemService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeItemService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeItemService.java
index fb77853..a8a7640 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeItemService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeItemService.java
@@ -67,14 +67,12 @@ public class UpgradeItemService extends BaseService {
createResourceInstance(id));
}
- @PUT
- @Path("{upgradeItemId}")
- @Produces("text/plain")
- public Response updateUpgradeItem(String body,
+ @Path("{upgradeItemId}/tasks")
+ public TaskService getTasks(
@Context HttpHeaders headers,
- @Context UriInfo ui, @PathParam("upgradeItemId") Long id) {
- return handleRequest(headers, body, ui, Request.Type.PUT,
- createResourceInstance(id));
+ @Context UriInfo ui,
+ @PathParam("upgradeItemId") Long id) {
+ return new TaskService(m_clusterName, m_upgradeId, m_upgradeId.toString());
}
/**
@@ -86,6 +84,7 @@ public class UpgradeItemService extends BaseService {
mapIds.put(Resource.Type.Cluster, m_clusterName);
mapIds.put(Resource.Type.Upgrade, m_upgradeId);
mapIds.put(Resource.Type.UpgradeGroup, m_upgradeGroupId);
+ mapIds.put(Resource.Type.Request, m_upgradeId);
if (null != upgradeItemId) {
mapIds.put(Resource.Type.UpgradeItem, upgradeItemId.toString());
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeService.java
index 8b66491..ddba2ff 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/UpgradeService.java
@@ -108,6 +108,7 @@ public class UpgradeService extends BaseService {
if (null != upgradeId) {
mapIds.put(Resource.Type.Upgrade, upgradeId.toString());
+ mapIds.put(Resource.Type.Request, upgradeId.toString());
}
return createResource(Resource.Type.Upgrade, mapIds);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
index 561f5d9..549a20d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
@@ -55,8 +55,8 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
// ----- Property ID constants ---------------------------------------------
// Requests
- protected static final String REQUEST_CLUSTER_NAME_PROPERTY_ID = "Requests/cluster_name";
- protected static final String REQUEST_ID_PROPERTY_ID = "Requests/id";
+ public static final String REQUEST_CLUSTER_NAME_PROPERTY_ID = "Requests/cluster_name";
+ public static final String REQUEST_ID_PROPERTY_ID = "Requests/id";
protected static final String REQUEST_STATUS_PROPERTY_ID = "Requests/request_status";
protected static final String REQUEST_ABORT_REASON_PROPERTY_ID = "Requests/abort_reason";
protected static final String REQUEST_CONTEXT_ID = "Requests/request_context";
@@ -89,6 +89,32 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
new HashSet<String>(Arrays.asList(new String[]{
REQUEST_ID_PROPERTY_ID}));
+ static Set<String> PROPERTY_IDS = new HashSet<String>();
+
+ static {
+ PROPERTY_IDS.add(REQUEST_CLUSTER_NAME_PROPERTY_ID);
+ PROPERTY_IDS.add(REQUEST_STATUS_PROPERTY_ID);
+ PROPERTY_IDS.add(REQUEST_ABORT_REASON_PROPERTY_ID);
+ PROPERTY_IDS.add(REQUEST_CONTEXT_ID);
+ PROPERTY_IDS.add(REQUEST_SOURCE_SCHEDULE);
+ PROPERTY_IDS.add(REQUEST_SOURCE_SCHEDULE_ID);
+ PROPERTY_IDS.add(REQUEST_SOURCE_SCHEDULE_HREF);
+ PROPERTY_IDS.add(REQUEST_TYPE_ID);
+ PROPERTY_IDS.add(REQUEST_INPUTS_ID);
+ PROPERTY_IDS.add(REQUEST_RESOURCE_FILTER_ID);
+ PROPERTY_IDS.add(REQUEST_OPERATION_LEVEL_ID);
+ PROPERTY_IDS.add(REQUEST_CREATE_TIME_ID);
+ PROPERTY_IDS.add(REQUEST_START_TIME_ID);
+ PROPERTY_IDS.add(REQUEST_END_TIME_ID);
+ PROPERTY_IDS.add(REQUEST_EXCLUSIVE_ID);
+ PROPERTY_IDS.add(REQUEST_TASK_CNT_ID);
+ PROPERTY_IDS.add(REQUEST_FAILED_TASK_CNT_ID);
+ PROPERTY_IDS.add(REQUEST_ABORTED_TASK_CNT_ID);
+ PROPERTY_IDS.add(REQUEST_TIMED_OUT_TASK_CNT_ID);
+ PROPERTY_IDS.add(REQUEST_COMPLETED_TASK_CNT_ID);
+ PROPERTY_IDS.add(REQUEST_QUEUED_TASK_CNT_ID);
+ PROPERTY_IDS.add(REQUEST_PROGRESS_PERCENT_ID);
+ }
// ----- Constructors ----------------------------------------------------
@@ -137,29 +163,29 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
Boolean ascOrder = (ascOrderRaw == null ? null : Boolean.parseBoolean(ascOrderRaw));
Set<Map<String, Object>> propertyMaps = new HashSet<Map<String,Object>>();
-
+
if (null == predicate) {
resources.addAll(
getRequestResources(null, null, null, maxResults, ascOrder, requestedIds));
} else {
for (Map<String, Object> properties : getPropertyMaps(predicate)) {
String clusterName = (String) properties.get(REQUEST_CLUSTER_NAME_PROPERTY_ID);
-
+
Long requestId = null;
if (properties.get(REQUEST_ID_PROPERTY_ID) != null) {
requestId = Long.valueOf((String) properties.get(REQUEST_ID_PROPERTY_ID));
}
-
+
String requestStatus = null;
if (properties.get(REQUEST_STATUS_PROPERTY_ID) != null) {
requestStatus = (String) properties.get(REQUEST_STATUS_PROPERTY_ID);
}
-
+
resources.addAll(getRequestResources(clusterName, requestId, requestStatus, maxResults,
ascOrder, requestedIds));
}
}
-
+
return resources;
}
@@ -445,7 +471,7 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
double progressPercent =
((hostRoleStatusCounters.get(HostRoleStatus.QUEUED) * 0.09 +
hostRoleStatusCounters.get(HostRoleStatus.IN_PROGRESS) * 0.35 +
- hostRoleStatusCounters.get(HostRoleStatus.COMPLETED)) / (double) taskCount) * 100.0;
+ hostRoleStatusCounters.get(HostRoleStatus.COMPLETED)) / taskCount) * 100.0;
setResourceProperty(resource, REQUEST_STATUS_PROPERTY_ID, requestStatus.toString(), requestedPropertyIds);
setResourceProperty(resource, REQUEST_TASK_CNT_ID, taskCount, requestedPropertyIds);
@@ -500,7 +526,7 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
* @return summary request status based on statuses of tasks in different
* states.
*/
- private HostRoleStatus calculateSummaryStatus(Map<HostRoleStatus, Integer> counters, int totalTasks) {
+ static HostRoleStatus calculateSummaryStatus(Map<HostRoleStatus, Integer> counters, int totalTasks) {
return counters.get(HostRoleStatus.FAILED) > 0 ? HostRoleStatus.FAILED :
// TODO (dlysnichenko): maybe change order of FAILED and ABORTED?
counters.get(HostRoleStatus.ABORTED) > 0 ? HostRoleStatus.ABORTED :
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java
index 27ce015..c25152d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java
@@ -85,7 +85,7 @@ public class StageResourceProvider extends AbstractResourceProvider implements E
/**
* The property ids for a stage resource.
*/
- private static final Set<String> PROPERTY_IDS = new HashSet<String>();
+ static final Set<String> PROPERTY_IDS = new HashSet<String>();
/**
* The key property ids for a stage resource.
@@ -124,7 +124,6 @@ public class StageResourceProvider extends AbstractResourceProvider implements E
super(PROPERTY_IDS, KEY_PROPERTY_IDS);
}
-
// ----- AbstractResourceProvider ------------------------------------------
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeGroupResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeGroupResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeGroupResourceProvider.java
index b7eb240..46dcd1e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeGroupResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeGroupResourceProvider.java
@@ -17,7 +17,9 @@
*/
package org.apache.ambari.server.controller.internal;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -25,7 +27,6 @@ import java.util.Map;
import java.util.Set;
import org.apache.ambari.server.StaticallyInject;
-import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
@@ -41,7 +42,7 @@ import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
-import org.apache.ambari.server.state.UpgradeState;
+import org.apache.ambari.server.state.UpgradeHelper;
import com.google.inject.Inject;
@@ -51,14 +52,16 @@ import com.google.inject.Inject;
@StaticallyInject
public class UpgradeGroupResourceProvider extends AbstractControllerResourceProvider {
- protected static final String UPGRADE_ID = "UpgradeGroup/upgrade_id";
+ protected static final String UPGRADE_REQUEST_ID = "UpgradeGroup/request_id";
protected static final String UPGRADE_GROUP_ID = "UpgradeGroup/group_id";
+ protected static final String UPGRADE_CLUSTER_NAME = "UpgradeGroup/cluster_name";
protected static final String UPGRADE_GROUP_NAME = "UpgradeGroup/name";
protected static final String UPGRADE_GROUP_TITLE = "UpgradeGroup/title";
- protected static final String UPGRADE_GROUP_STATE = "UpgradeGroup/state";
+ protected static final String UPGRADE_GROUP_PROGRESS_PERCENT = "UpgradeGroup/progress_percent";
+ protected static final String UPGRADE_GROUP_STATUS = "UpgradeGroup/status";
private static final Set<String> PK_PROPERTY_IDS = new HashSet<String>(
- Arrays.asList(UPGRADE_ID, UPGRADE_GROUP_ID));
+ Arrays.asList(UPGRADE_REQUEST_ID, UPGRADE_GROUP_ID));
private static final Set<String> PROPERTY_IDS = new HashSet<String>();
private static final Map<Resource.Type, String> KEY_PROPERTY_IDS = new HashMap<Resource.Type, String>();
@@ -68,14 +71,16 @@ public class UpgradeGroupResourceProvider extends AbstractControllerResourceProv
static {
// properties
- PROPERTY_IDS.add(UPGRADE_ID);
+ PROPERTY_IDS.add(UPGRADE_REQUEST_ID);
PROPERTY_IDS.add(UPGRADE_GROUP_ID);
PROPERTY_IDS.add(UPGRADE_GROUP_NAME);
PROPERTY_IDS.add(UPGRADE_GROUP_TITLE);
+ PROPERTY_IDS.add(UPGRADE_GROUP_PROGRESS_PERCENT);
+ PROPERTY_IDS.add(UPGRADE_GROUP_STATUS);
// keys
KEY_PROPERTY_IDS.put(Resource.Type.UpgradeGroup, UPGRADE_GROUP_ID);
- KEY_PROPERTY_IDS.put(Resource.Type.Upgrade, UPGRADE_ID);
+ KEY_PROPERTY_IDS.put(Resource.Type.Upgrade, UPGRADE_REQUEST_ID);
}
/**
@@ -104,19 +109,33 @@ public class UpgradeGroupResourceProvider extends AbstractControllerResourceProv
Set<String> requestPropertyIds = getRequestPropertyIds(request, predicate);
for (Map<String, Object> propertyMap : getPropertyMaps(predicate)) {
- String upgradeIdStr = (String) propertyMap.get(UPGRADE_ID);
+ String upgradeIdStr = (String) propertyMap.get(UPGRADE_REQUEST_ID);
+ String clusterName = (String) propertyMap.get(UPGRADE_CLUSTER_NAME);
if (null == upgradeIdStr || upgradeIdStr.isEmpty()) {
throw new IllegalArgumentException("The upgrade id is required when querying for upgrades");
}
- long upgradeId = Long.parseLong(upgradeIdStr);
- UpgradeEntity upgrade = m_dao.findUpgrade(upgradeId);
+ Long upgradeId = Long.valueOf(upgradeIdStr);
+ UpgradeEntity upgrade = m_dao.findUpgradeByRequestId(upgradeId);
List<UpgradeGroupEntity> groups = upgrade.getUpgradeGroups();
if (null != groups) {
+ UpgradeHelper helper = new UpgradeHelper();
+
for (UpgradeGroupEntity group : upgrade.getUpgradeGroups()) {
- results.add(toResource(upgrade, group, requestPropertyIds));
+ Resource r = toResource(upgrade, group, requestPropertyIds);
+
+ List<Long> stageIds = new ArrayList<Long>();
+ for (UpgradeItemEntity itemEntity : group.getItems()) {
+ stageIds.add(itemEntity.getStageId());
+ }
+
+ Set<Resource> stages = helper.getStageResources(clusterName, upgrade.getRequestId(), stageIds);
+
+ aggregate(r, stages, requestPropertyIds);
+
+ results.add(r);
}
}
@@ -149,13 +168,55 @@ public class UpgradeGroupResourceProvider extends AbstractControllerResourceProv
private Resource toResource(UpgradeEntity upgrade, UpgradeGroupEntity group, Set<String> requestedIds) {
ResourceImpl resource = new ResourceImpl(Resource.Type.UpgradeGroup);
- setResourceProperty(resource, UPGRADE_ID, upgrade.getId(), requestedIds);
+ setResourceProperty(resource, UPGRADE_REQUEST_ID, upgrade.getRequestId(), requestedIds);
setResourceProperty(resource, UPGRADE_GROUP_ID, group.getId(), requestedIds);
setResourceProperty(resource, UPGRADE_GROUP_NAME, group.getName(), requestedIds);
setResourceProperty(resource, UPGRADE_GROUP_TITLE, group.getTitle(), requestedIds);
- setResourceProperty(resource, UPGRADE_GROUP_STATE, "NONE", requestedIds);
return resource;
}
+
+ /**
+ * Aggregates status and percent complete for stages and puts the results on the upgrade group
+ *
+ * @param upgradeGroup the resource representing an upgrade group
+ * @param stages the collection of resources representing stages
+ * @param requestedIds the ids for the request
+ */
+ private void aggregate(Resource upgradeGroup, Collection<Resource> stages, Set<String> requestedIds) {
+
+ Double total = new Double(0d);
+ Integer count = new Integer(0);
+
+ Map<HostRoleStatus, Integer> counters = new HashMap<HostRoleStatus, Integer>();
+ for (HostRoleStatus hostRoleStatus : HostRoleStatus.values()) {
+ counters.put(hostRoleStatus, new Integer(0));
+ }
+
+
+ for (Resource stage : stages) {
+ String status = (String) stage.getPropertyValue(StageResourceProvider.STAGE_STATUS);
+ Double percent = (Double) stage.getPropertyValue(StageResourceProvider.STAGE_PROGRESS_PERCENT);
+
+ if (null != percent) {
+ total += percent;
+ count++;
+ }
+
+ if (null != status) {
+ HostRoleStatus hrs = HostRoleStatus.valueOf(status);
+ counters.put(hrs, counters.get(hrs) + 1);
+ }
+ }
+
+ if (count > 0) {
+ setResourceProperty(upgradeGroup, UPGRADE_GROUP_PROGRESS_PERCENT, total/count, requestedIds);
+ }
+
+ HostRoleStatus summary = RequestResourceProvider.calculateSummaryStatus(counters, counters.size());
+ setResourceProperty(upgradeGroup, UPGRADE_GROUP_STATUS, summary, requestedIds);
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
index c481dae..85d2c9a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.controller.internal;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
@@ -24,63 +25,65 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.StaticallyInject;
-import org.apache.ambari.server.actionmanager.HostRoleCommand;
-import org.apache.ambari.server.actionmanager.HostRoleStatus;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
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.RequestStatus;
import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
-import org.apache.ambari.server.state.UpgradeState;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.UpgradeHelper;
import com.google.inject.Inject;
-import com.google.inject.Provider;
/**
- * Manages the ability to start and get status of upgrades.
+ * Manages the ability to get the status of upgrades.
*/
@StaticallyInject
-public class UpgradeItemResourceProvider extends AbstractControllerResourceProvider {
+public class UpgradeItemResourceProvider extends ReadOnlyResourceProvider {
- protected static final String UPGRADE_ID = "UpgradeItem/upgrade_id";
+ protected static final String UPGRADE_CLUSTER_NAME = "UpgradeItem/cluster_name";
+ protected static final String UPGRADE_REQUEST_ID = "UpgradeItem/request_id";
protected static final String UPGRADE_GROUP_ID = "UpgradeItem/group_id";
- protected static final String UPGRADE_ITEM_ID = "UpgradeItem/id";
- protected static final String UPGRADE_ITEM_STATE = "UpgradeItem/state";
- protected static final String UPGRADE_ITEM_TEXT = "UpgradeItem/text";
- protected static final String UPGRADE_ITEM_STAGE_ID= "UpgradeItem/stage_id";
+ protected static final String UPGRADE_ITEM_STAGE_ID = "UpgradeItem/stage_id";
private static final Set<String> PK_PROPERTY_IDS = new HashSet<String>(
- Arrays.asList(UPGRADE_ID, UPGRADE_ITEM_ID));
+ Arrays.asList(UPGRADE_REQUEST_ID, UPGRADE_ITEM_STAGE_ID));
private static final Set<String> PROPERTY_IDS = new HashSet<String>();
private static final Map<Resource.Type, String> KEY_PROPERTY_IDS = new HashMap<Resource.Type, String>();
+ private static Map<String, String> STAGE_MAPPED_IDS = new HashMap<String, String>();
@Inject
private static UpgradeDAO m_dao = null;
+
static {
// properties
- PROPERTY_IDS.add(UPGRADE_ID);
+ PROPERTY_IDS.add(UPGRADE_ITEM_STAGE_ID);
PROPERTY_IDS.add(UPGRADE_GROUP_ID);
- PROPERTY_IDS.add(UPGRADE_ITEM_ID);
- PROPERTY_IDS.add(UPGRADE_ITEM_STATE);
- PROPERTY_IDS.add(UPGRADE_ITEM_TEXT);
+ PROPERTY_IDS.add(UPGRADE_REQUEST_ID);
+
+ // !!! boo
+ for (String p : StageResourceProvider.PROPERTY_IDS) {
+ STAGE_MAPPED_IDS.put(p, p.replace("Stage/", "UpgradeItem/"));
+ }
+ PROPERTY_IDS.addAll(STAGE_MAPPED_IDS.values());
// keys
- KEY_PROPERTY_IDS.put(Resource.Type.UpgradeItem, UPGRADE_ITEM_ID);
+ KEY_PROPERTY_IDS.put(Resource.Type.UpgradeItem, UPGRADE_ITEM_STAGE_ID);
KEY_PROPERTY_IDS.put(Resource.Type.UpgradeGroup, UPGRADE_GROUP_ID);
- KEY_PROPERTY_IDS.put(Resource.Type.Upgrade, UPGRADE_ID);
+ KEY_PROPERTY_IDS.put(Resource.Type.Upgrade, UPGRADE_REQUEST_ID);
+ KEY_PROPERTY_IDS.put(Resource.Type.Cluster, UPGRADE_CLUSTER_NAME);
}
/**
@@ -93,14 +96,6 @@ public class UpgradeItemResourceProvider extends AbstractControllerResourceProvi
}
@Override
- public RequestStatus createResources(final Request request)
- throws SystemException,
- UnsupportedPropertyException, ResourceAlreadyExistsException,
- NoSuchParentResourceException {
- throw new SystemException("Upgrade Items can only be created with an upgrade");
- }
-
- @Override
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException,
NoSuchResourceException, NoSuchParentResourceException {
@@ -109,127 +104,103 @@ public class UpgradeItemResourceProvider extends AbstractControllerResourceProvi
Set<String> requestPropertyIds = getRequestPropertyIds(request, predicate);
for (Map<String, Object> propertyMap : getPropertyMaps(predicate)) {
- String upgradeIdStr = (String) propertyMap.get(UPGRADE_ID);
+ String clusterName = (String) propertyMap.get(UPGRADE_CLUSTER_NAME);
+ String requestIdStr = (String) propertyMap.get(UPGRADE_REQUEST_ID);
String groupIdStr = (String) propertyMap.get(UPGRADE_GROUP_ID);
+ String stageIdStr = (String) propertyMap.get(UPGRADE_ITEM_STAGE_ID);
- if (null == upgradeIdStr || upgradeIdStr.isEmpty()) {
+ if (null == requestIdStr || requestIdStr.isEmpty()) {
throw new IllegalArgumentException("The upgrade id is required when querying for upgrades");
}
if (null == groupIdStr || groupIdStr.isEmpty()) {
- throw new IllegalArgumentException("The upgrade id is required when querying for upgrades");
+ throw new IllegalArgumentException("The upgrade group id is required when querying for upgrades");
}
+ Long requestId = Long.valueOf(requestIdStr);
+ Long groupId = Long.valueOf(groupIdStr);
+ Long stageId = null;
+ if (null != stageIdStr) {
+ stageId = Long.valueOf(stageIdStr);
+ }
+
+ List<UpgradeItemEntity> entities = new ArrayList<UpgradeItemEntity>();
+ if (null == stageId) {
+ UpgradeGroupEntity group = m_dao.findUpgradeGroup(groupId);
+
+ if (null == group || null == group.getItems()) {
+ throw new NoSuchResourceException(String.format("Cannot load upgrade for %s", requestIdStr));
+ }
- long upgradeId = Long.parseLong(upgradeIdStr);
- long groupId = Long.parseLong(groupIdStr);
- UpgradeGroupEntity group = m_dao.findUpgradeGroup(groupId);
+ entities = group.getItems();
- if (null == group || null == group.getItems()) {
- throw new NoSuchResourceException(String.format("Cannot load upgrade for %s", upgradeIdStr));
+ } else {
+ UpgradeItemEntity entity = m_dao.findUpgradeItemByRequestAndStage(requestId, stageId);
+ if (null != entity) {
+ entities.add(entity);
+ }
}
- for (UpgradeItemEntity entity : group.getItems()) {
- results.add(toResource(group.getUpgradeEntity(), entity, requestPropertyIds));
+ // !!! need to do some lookup for stages, so use a stageid -> resource for
+ // when that happens
+ Map<Long, Resource> resultMap = new HashMap<Long, Resource>();
+
+ for (UpgradeItemEntity entity : entities) {
+ Resource r = toResource(entity, requestPropertyIds);
+ resultMap.put(entity.getStageId(), r);
}
- }
- return results;
- }
+ if (null != clusterName) {
+ UpgradeHelper helper = new UpgradeHelper();
- @Override
- public RequestStatus updateResources(final Request request,
- Predicate predicate)
- throws SystemException, UnsupportedPropertyException,
- NoSuchResourceException, NoSuchParentResourceException {
+ Set<Resource> stages = helper.getStageResources(clusterName, requestId,
+ new ArrayList<Long>(resultMap.keySet()));
+
+ for (Resource stage : stages) {
+ Long l = (Long) stage.getPropertyValue(StageResourceProvider.STAGE_STAGE_ID);
+
+ Resource r = resultMap.get(l);
+ if (null != r) {
+ for (String propertyId : StageResourceProvider.PROPERTY_IDS) {
+ setResourceProperty(r, STAGE_MAPPED_IDS.get(propertyId),
+ stage.getPropertyValue(propertyId), requestPropertyIds);
+ }
+ }
+ }
+ }
+
+ results.addAll(resultMap.values());
- throw new SystemException("Upgrade Items cannot be modified at this time");
+ }
+ return results;
}
- @Override
- public RequestStatus deleteResources(Predicate predicate)
- throws SystemException, UnsupportedPropertyException,
- NoSuchResourceException, NoSuchParentResourceException {
- throw new SystemException("Cannot delete upgrade items");
+ private Cluster getCluster(Long clusterId) throws SystemException {
+ Clusters clusters = getManagementController().getClusters();
+ try {
+ return clusters.getClusterById(clusterId.longValue());
+ } catch (AmbariException e) {
+ throw new SystemException("Cannot load cluster for upgrade items");
+ }
}
+
@Override
protected Set<String> getPKPropertyIds() {
return PK_PROPERTY_IDS;
}
- private Resource toResource(UpgradeEntity upgrade, UpgradeItemEntity item, Set<String> requestedIds) {
+ private Resource toResource(UpgradeItemEntity item, Set<String> requestedIds) {
ResourceImpl resource = new ResourceImpl(Resource.Type.UpgradeItem);
- setResourceProperty(resource, UPGRADE_ID, upgrade.getId(), requestedIds);
- setResourceProperty(resource, UPGRADE_GROUP_ID, item.getGroupEntity().getId(), requestedIds);
- setResourceProperty(resource, UPGRADE_ITEM_ID, item.getId(), requestedIds);
- if (isPropertyRequested(UPGRADE_ITEM_STATE, requestedIds)) {
- UpgradeState state = calculateState(upgrade, item);
- setResourceProperty(resource, UPGRADE_ITEM_STATE, state, requestedIds);
- }
- setResourceProperty(resource, UPGRADE_ITEM_TEXT, item.getText(), requestedIds);
-
- return resource;
- }
-
- private UpgradeState calculateState(UpgradeEntity upgrade, UpgradeItemEntity item) {
- long requestId = upgrade.getRequestId().longValue();
- long stageId = item.getStageId().longValue();
-
- List<HostRoleCommand> commands = getManagementController().getActionManager().getRequestTasks(requestId);
+ UpgradeGroupEntity group = item.getGroupEntity();
+ UpgradeEntity upgrade = group.getUpgradeEntity();
- int pending = 0;
- int complete = 0;
- int in_progress = 0;
- int failed = 0;
+ setResourceProperty(resource, UPGRADE_REQUEST_ID, upgrade.getRequestId(), requestedIds);
+ setResourceProperty(resource, UPGRADE_GROUP_ID, group.getId(), requestedIds);
+ setResourceProperty(resource, UPGRADE_ITEM_STAGE_ID, item.getStageId(), requestedIds);
- for (HostRoleCommand command : commands) {
- if (stageId != command.getStageId()) {
- continue;
- }
-
- HostRoleStatus status = command.getStatus();
- if (status.isFailedState()) {
- failed++;
- } else {
- switch (status) {
- case COMPLETED:
- complete++;
- break;
- case IN_PROGRESS:
- in_progress++;
- break;
- case PENDING:
- pending++;
- break;
- case QUEUED:
- in_progress++;
- break;
- case FAILED:
- case ABORTED:
- case TIMEDOUT:
- failed++;
- break;
- default:
- break;
- }
- }
- }
-
- if (failed > 0) {
- return UpgradeState.FAILED;
- } else if (in_progress > 0) {
- return UpgradeState.IN_PROGRESS;
- } else if (pending > 0) {
- return UpgradeState.PENDING;
- } else if (complete > 0) {
- return UpgradeState.COMPLETE;
- }
-
- return UpgradeState.NONE;
+ return resource;
}
-
-
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index a2c30f7..7e07453 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -26,6 +26,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -79,13 +80,12 @@ import com.google.inject.Provider;
@StaticallyInject
public class UpgradeResourceProvider extends AbstractControllerResourceProvider {
- protected static final String UPGRADE_ID = "Upgrade/id";
protected static final String UPGRADE_CLUSTER_NAME = "Upgrade/cluster_name";
protected static final String UPGRADE_VERSION = "Upgrade/repository_version";
protected static final String UPGRADE_REQUEST_ID = "Upgrade/request_id";
private static final Set<String> PK_PROPERTY_IDS = new HashSet<String>(
- Arrays.asList(UPGRADE_ID, UPGRADE_CLUSTER_NAME));
+ Arrays.asList(UPGRADE_REQUEST_ID, UPGRADE_CLUSTER_NAME));
private static final Set<String> PROPERTY_IDS = new HashSet<String>();
private static final Map<Resource.Type, String> KEY_PROPERTY_IDS = new HashMap<Resource.Type, String>();
@@ -105,15 +105,22 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
@Inject
private static Provider<AmbariCustomCommandExecutionHelper> commandExecutionHelper;
+ private static Map<String, String> REQUEST_PROPERTY_MAP = new HashMap<String, String>();
+
static {
// properties
- PROPERTY_IDS.add(UPGRADE_ID);
PROPERTY_IDS.add(UPGRADE_CLUSTER_NAME);
PROPERTY_IDS.add(UPGRADE_VERSION);
PROPERTY_IDS.add(UPGRADE_REQUEST_ID);
+ // !!! boo
+ for (String requestPropertyId : RequestResourceProvider.PROPERTY_IDS) {
+ REQUEST_PROPERTY_MAP.put(requestPropertyId, requestPropertyId.replace("Requests/", "Upgrade/"));
+ }
+ PROPERTY_IDS.addAll(REQUEST_PROPERTY_MAP.values());
+
// keys
- KEY_PROPERTY_IDS.put(Resource.Type.Upgrade, UPGRADE_ID);
+ KEY_PROPERTY_IDS.put(Resource.Type.Upgrade, UPGRADE_REQUEST_ID);
KEY_PROPERTY_IDS.put(Resource.Type.Cluster, UPGRADE_CLUSTER_NAME);
}
@@ -156,7 +163,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
notifyCreate(Resource.Type.Upgrade, request);
Resource res = new ResourceImpl(Resource.Type.Upgrade);
- res.setProperty(UPGRADE_ID, entity.getId());
+ res.setProperty(UPGRADE_REQUEST_ID, entity.getRequestId());
return new RequestStatusImpl(null, Collections.singleton(res));
}
@@ -184,9 +191,10 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
List<UpgradeEntity> upgrades = new ArrayList<UpgradeEntity>();
- String upgradeIdStr = (String) propertyMap.get(UPGRADE_ID);
+ String upgradeIdStr = (String) propertyMap.get(UPGRADE_REQUEST_ID);
if (null != upgradeIdStr) {
- UpgradeEntity upgrade = m_upgradeDAO.findUpgrade(Long.parseLong(upgradeIdStr));
+ UpgradeEntity upgrade = m_upgradeDAO.findUpgradeByRequestId(Long.valueOf(upgradeIdStr));
+
if (null != upgrade) {
upgrades.add(upgrade);
}
@@ -194,8 +202,19 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
upgrades = m_upgradeDAO.findUpgrades(cluster.getClusterId());
}
+ UpgradeHelper helper = new UpgradeHelper();
for (UpgradeEntity entity : upgrades) {
- results.add(toResource(entity, clusterName, requestPropertyIds));
+ Resource r = toResource(entity, clusterName, requestPropertyIds);
+ results.add(r);
+
+ // !!! not terribly efficient, but that's ok in this case. The handful-per-year
+ // an upgrade is done won't kill performance.
+ Resource r1 = helper.getRequestResource(clusterName, entity.getRequestId());
+ for (Entry<String, String> entry : REQUEST_PROPERTY_MAP.entrySet()) {
+ Object o = r1.getPropertyValue(entry.getKey());
+
+ setResourceProperty(r, entry.getValue(), o, requestPropertyIds);
+ }
}
}
@@ -236,7 +255,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
Set<String> requestedIds) {
ResourceImpl resource = new ResourceImpl(Resource.Type.Upgrade);
- setResourceProperty(resource, UPGRADE_ID, entity.getId(), requestedIds);
setResourceProperty(resource, UPGRADE_CLUSTER_NAME, clusterName, requestedIds);
setResourceProperty(resource, UPGRADE_REQUEST_ID, entity.getRequestId(), requestedIds);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java
index c08f809..a9b913f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java
@@ -25,6 +25,7 @@ import javax.persistence.TypedQuery;
import org.apache.ambari.server.orm.RequiresSession;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
+import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@@ -74,6 +75,16 @@ public class UpgradeDAO {
return daoUtils.selectSingle(query);
}
+ @RequiresSession
+ public UpgradeEntity findUpgradeByRequestId(Long requestId) {
+ TypedQuery<UpgradeEntity> query = entityManagerProvider.get().createQuery(
+ "SELECT p FROM UpgradeEntity p WHERE p.requestId = :requestId", UpgradeEntity.class);
+ query.setParameter("requestId", requestId);
+ query.setHint(QueryHints.REFRESH, HintValues.TRUE);
+
+ return daoUtils.selectSingle(query);
+ }
+
/**
* Creates the upgrade entity in the database
* @param entity the entity
@@ -94,22 +105,54 @@ public class UpgradeDAO {
for (UpgradeEntity entity : entities) {
entityManagerProvider.get().remove(entity);
}
-
}
/**
* @param groupId the group id
* @return the group, or {@code null} if not found
*/
- public UpgradeGroupEntity findUpgradeGroup(long groupId) {
+ @RequiresSession
+ public UpgradeGroupEntity findUpgradeGroup(Long groupId) {
TypedQuery<UpgradeGroupEntity> query = entityManagerProvider.get().createQuery(
"SELECT p FROM UpgradeGroupEntity p WHERE p.upgradeGroupId = :groupId", UpgradeGroupEntity.class);
- query.setParameter("groupId", Long.valueOf(groupId));
+ query.setParameter("groupId", groupId);
query.setHint(QueryHints.REFRESH, HintValues.TRUE);
return daoUtils.selectSingle(query);
}
+ /**
+ * @param itemId the item id
+ * @return the upgrade item entity, or {@code null} if not found
+ */
+ public UpgradeItemEntity findUpgradeItem(long itemId) {
+ TypedQuery<UpgradeItemEntity> query = entityManagerProvider.get().createQuery(
+ "SELECT p FROM UpgradeItemEntity p WHERE p.upgradeItemId = :itemId", UpgradeItemEntity.class);
+ query.setParameter("itemId", Long.valueOf(itemId));
+ query.setHint(QueryHints.REFRESH, HintValues.TRUE);
+
+ return daoUtils.selectSingle(query);
+ }
+
+
+ /**
+ * @param requestId the request id
+ * @param stageId the stage id
+ * @return the upgrade entity, or {@code null} if not found
+ */
+ public UpgradeItemEntity findUpgradeItemByRequestAndStage(Long requestId, Long stageId) {
+ TypedQuery<UpgradeItemEntity> query = entityManagerProvider.get().createQuery(
+ "SELECT p FROM UpgradeItemEntity p WHERE p.stageId = :stageId AND p.upgradeGroupEntity.upgradeEntity.requestId = :requestId",
+ UpgradeItemEntity.class);
+ query.setParameter("requestId", requestId);
+ query.setParameter("stageId", stageId);
+
+ query.setHint(QueryHints.REFRESH, HintValues.TRUE);
+
+ return daoUtils.selectSingle(query);
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index 4320dbe..8201a8b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -23,12 +23,32 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.server.controller.internal.RequestImpl;
+import org.apache.ambari.server.controller.internal.RequestResourceProvider;
+import org.apache.ambari.server.controller.internal.StageResourceProvider;
+import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
+import org.apache.ambari.server.controller.predicate.AndPredicate;
+import org.apache.ambari.server.controller.predicate.EqualsPredicate;
+import org.apache.ambari.server.controller.predicate.OrPredicate;
+import org.apache.ambari.server.controller.spi.ClusterController;
+import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
+import org.apache.ambari.server.controller.spi.NoSuchResourceException;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.QueryResponse;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.SystemException;
+import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
+import org.apache.ambari.server.controller.utilities.ClusterControllerHelper;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
import org.apache.ambari.server.state.stack.upgrade.Grouping;
import org.apache.ambari.server.state.stack.upgrade.StageWrapper;
import org.apache.ambari.server.state.stack.upgrade.StageWrapperBuilder;
import org.apache.ambari.server.state.stack.upgrade.TaskWrapper;
+import org.codehaus.jackson.map.ser.PropertyBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -150,4 +170,85 @@ public class UpgradeHelper {
+ /**
+ * Gets a set of Stages resources to aggregate an UpgradeItem with Stage.
+ *
+ * @param clusterName the cluster name
+ * @param requestId the request id containing the stages
+ * @param stageIds the list of stages to fetch
+ * @return the list of Stage resources
+ * @throws UnsupportedPropertyException
+ * @throws NoSuchResourceException
+ * @throws NoSuchParentResourceException
+ * @throws SystemException
+ */
+ // !!! FIXME this feels very wrong
+ public Set<Resource> getStageResources(String clusterName, Long requestId, List<Long> stageIds)
+ throws UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException, SystemException {
+ ClusterController clusterController = ClusterControllerHelper.getClusterController();
+
+ Request request = PropertyHelper.getReadRequest();
+
+
+ Predicate p1 = new PredicateBuilder().property(StageResourceProvider.STAGE_CLUSTER_NAME).equals(clusterName).toPredicate();
+ Predicate p2 = new PredicateBuilder().property(StageResourceProvider.STAGE_REQUEST_ID).equals(requestId).toPredicate();
+ Predicate p3 = null;
+
+ if (1 == stageIds.size()) {
+ p3 = new PredicateBuilder().property(StageResourceProvider.STAGE_STAGE_ID).equals(stageIds.get(0)).toPredicate();
+ } else if (stageIds.size() > 0) {
+ PredicateBuilder pb = new PredicateBuilder();
+
+ int i = 0;
+ for (Long stageId : stageIds) {
+ if (i++ < stageIds.size()-1) {
+ pb = pb.property(StageResourceProvider.STAGE_STAGE_ID).equals(stageId).or();
+ } else {
+ pb.property(StageResourceProvider.STAGE_STAGE_ID).equals(stageId);
+ }
+ }
+
+ p3 = pb.toPredicate();
+ }
+
+ QueryResponse response = clusterController.getResources(Resource.Type.Stage,
+ request, new AndPredicate(p1, p2, p3));
+
+ return response.getResources();
+ }
+
+ /**
+ * Gets a Request resource to aggreate with an Upgrade
+ * @param clusterName the cluster name
+ * @param requestId the request id
+ * @return the resource for the Request
+ * @throws UnsupportedPropertyException
+ * @throws NoSuchResourceException
+ * @throws NoSuchParentResourceException
+ * @throws SystemException
+ */
+ // !!! FIXME this feels very wrong
+ public Resource getRequestResource(String clusterName, Long requestId)
+ throws UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException, SystemException {
+
+ ClusterController clusterController = ClusterControllerHelper.getClusterController();
+
+ Request request = PropertyHelper.getReadRequest();
+
+ Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_CLUSTER_NAME_PROPERTY_ID).equals(clusterName).and()
+ // !!! RequestResourceProvider is expecting a string, not a Long for the requestId
+ .property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals(requestId.toString()).toPredicate();
+
+ QueryResponse response = clusterController.getResources(Resource.Type.Request,
+ request, predicate);
+
+ Set<Resource> resources = response.getResources();
+ if (1 != resources.size()) {
+ throw new SystemException(String.format(
+ "Cannot uniquely identify the request resource for %s", requestId));
+ }
+
+ return resources.iterator().next();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7c512c2/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index fbb4f43..cf58935 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -19,18 +19,27 @@ package org.apache.ambari.server.controller.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
+import java.lang.reflect.Field;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.ambari.server.actionmanager.ActionManager;
import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.RequestStatus;
import org.apache.ambari.server.actionmanager.Stage;
import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.AmbariServer;
+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.ResourceProvider;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -48,6 +57,7 @@ import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeState;
+import org.apache.ambari.server.view.ViewRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -65,6 +75,8 @@ public class UpgradeResourceProviderTest {
private RepositoryVersionDAO repoVersionDao = null;
private Injector injector;
private Clusters clusters;
+// private UpgradeResourceProvider upgradeResourceProvider;
+ AmbariManagementController amc;
@Before
public void before() throws Exception {
@@ -72,9 +84,20 @@ public class UpgradeResourceProviderTest {
injector = Guice.createInjector(new InMemoryDefaultTestModule());
injector.getInstance(GuiceJpaInitializer.class);
+
+ amc = injector.getInstance(AmbariManagementController.class);
+// upgradeResourceProvider = createProvider(amc);
+
+ Field field = AmbariServer.class.getDeclaredField("clusterController");
+ field.setAccessible(true);
+ field.set(null, amc);
+
upgradeDao = injector.getInstance(UpgradeDAO.class);
repoVersionDao = injector.getInstance(RepositoryVersionDAO.class);
+ ViewRegistry.initInstance(new ViewRegistry());
+ System.out.println(AmbariServer.getController());
+
RepositoryVersionEntity repoVersionEntity = new RepositoryVersionEntity();
repoVersionEntity.setDisplayName("My New Version");
repoVersionEntity.setOperatingSystems("");
@@ -118,28 +141,21 @@ public class UpgradeResourceProviderTest {
injector = null;
}
- /**
- * @throws Exception
- */
- @Test
- public void testCreateResources() throws Exception {
+ public org.apache.ambari.server.controller.spi.RequestStatus testCreateResources() throws Exception {
Cluster cluster = clusters.getCluster("c1");
List<UpgradeEntity> upgrades = upgradeDao.findUpgrades(cluster.getClusterId());
assertEquals(0, upgrades.size());
- AmbariManagementController amc = injector.getInstance(AmbariManagementController.class);
-
- UpgradeResourceProvider provider = createProvider(amc);
-
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.2.2");
- Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null);
- org.apache.ambari.server.controller.spi.RequestStatus status = provider.createResources(request);
+ ResourceProvider upgradeResourceProvider = createProvider(amc);
+ Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null);
+ org.apache.ambari.server.controller.spi.RequestStatus status = upgradeResourceProvider.createResources(request);
upgrades = upgradeDao.findUpgrades(cluster.getClusterId());
assertEquals(1, upgrades.size());
@@ -176,8 +192,80 @@ public class UpgradeResourceProviderTest {
List<HostRoleCommand> tasks = am.getRequestTasks(requests.get(0).longValue());
assertEquals(3, tasks.size());
+
+ return status;
}
+ @Test
+ public void testGetResources() throws Exception {
+ org.apache.ambari.server.controller.spi.RequestStatus status = testCreateResources();
+
+ Set<Resource> createdResources = status.getAssociatedResources();
+ assertEquals(1, createdResources.size());
+ Resource res = createdResources.iterator().next();
+ Long id = (Long) res.getPropertyValue("Upgrade/request_id");
+ assertNotNull(id);
+ assertEquals(Long.valueOf(1), id);
+
+ // upgrade
+ Set<String> propertyIds = new HashSet<String>();
+ propertyIds.add("Upgrade");
+
+ Predicate predicate = new PredicateBuilder()
+ .property(UpgradeResourceProvider.UPGRADE_REQUEST_ID).equals("1").and()
+ .property(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME).equals("c1")
+ .toPredicate();
+ Request request = PropertyHelper.getReadRequest(propertyIds);
+
+ ResourceProvider upgradeResourceProvider = createProvider(amc);
+ Set<Resource> resources = upgradeResourceProvider.getResources(request, predicate);
+
+ assertEquals(1, resources.size());
+ res = resources.iterator().next();
+ assertNotNull(res.getPropertyValue("Upgrade/progress_percent"));
+
+
+ // upgrade groups
+ propertyIds.clear();
+ propertyIds.add("UpgradeGroup");
+
+ predicate = new PredicateBuilder()
+ .property(UpgradeGroupResourceProvider.UPGRADE_REQUEST_ID).equals("1").and()
+ .property(UpgradeGroupResourceProvider.UPGRADE_CLUSTER_NAME).equals("c1")
+ .toPredicate();
+ request = PropertyHelper.getReadRequest(propertyIds);
+
+ ResourceProvider upgradeGroupResourceProvider = new UpgradeGroupResourceProvider(amc);
+ resources = upgradeGroupResourceProvider.getResources(request, predicate);
+
+ assertEquals(3, resources.size());
+ res = resources.iterator().next();
+ assertNotNull(res.getPropertyValue("UpgradeGroup/status"));
+ assertNotNull(res.getPropertyValue("UpgradeGroup/group_id"));
+
+ // upgrade items
+ propertyIds.clear();
+ propertyIds.add("UpgradeItem");
+
+ predicate = new PredicateBuilder()
+ .property(UpgradeItemResourceProvider.UPGRADE_GROUP_ID).equals("1").and()
+ .property(UpgradeItemResourceProvider.UPGRADE_REQUEST_ID).equals("1").and()
+ .property(UpgradeItemResourceProvider.UPGRADE_CLUSTER_NAME).equals("c1")
+ .toPredicate();
+ request = PropertyHelper.getReadRequest(propertyIds);
+
+ ResourceProvider upgradeItemResourceProvider = new UpgradeItemResourceProvider(amc);
+ resources = upgradeItemResourceProvider.getResources(request, predicate);
+
+ assertEquals(3, resources.size());
+ res = resources.iterator().next();
+ assertNotNull(res.getPropertyValue("UpgradeItem/status"));
+
+ }
+
+
+
+
/**
* @param amc