Repository: ambari Updated Branches: refs/heads/trunk 18e831dea -> 95fe4b028
AMBARI-8784 - Unable To Move Manual Task From HOLDING to COMPLETED Via API (tbeerbower) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/95fe4b02 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/95fe4b02 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/95fe4b02 Branch: refs/heads/trunk Commit: 95fe4b028ea7a3176a24315cd417b4147d31ff21 Parents: 18e831d Author: tbeerbower <[email protected]> Authored: Thu Dec 18 05:35:29 2014 -0500 Committer: tbeerbower <[email protected]> Committed: Thu Dec 18 05:35:43 2014 -0500 ---------------------------------------------------------------------- .../server/api/services/UpgradeItemService.java | 26 ++++++- .../internal/UpgradeItemResourceProvider.java | 34 ++++----- .../api/services/UpgradeItemServiceTest.java | 78 ++++++++++++++++++++ 3 files changed, 118 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/95fe4b02/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 9bfcf36..ab7e125 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,6 +67,28 @@ public class UpgradeItemService extends BaseService { createResourceInstance(id)); } + /** + * Handles: + * PUT /clusters/{clusterId}/upgrades/{upgradeId}/upgrade_groups/{upgradeGroupId}/upgrade_items/{upgradeItemId} + * + * Change state of existing upgrade item. + * + * @param body http body + * @param headers http headers + * @param ui uri info + * @param id the upgrade item id + * + * @return information regarding the created services + */ + @PUT + @Path("{upgradeItemId}") + @Produces("text/plain") + public Response updateUpgradeItem(String body, + @Context HttpHeaders headers, + @Context UriInfo ui, @PathParam("upgradeItemId") Long id) { + return handleRequest(headers, body, ui, Request.Type.PUT, createResourceInstance(id)); + } + @Path("{upgradeItemId}/tasks") public TaskService getTasks( @Context HttpHeaders headers, @@ -79,16 +101,14 @@ public class UpgradeItemService extends BaseService { * @param upgradeItemId the specific item id * @return the resource instance */ - private ResourceInstance createResourceInstance(Long upgradeItemId) { + ResourceInstance createResourceInstance(Long upgradeItemId) { 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.UpgradeGroup, m_upgradeGroupId); - mapIds.put(Resource.Type.Request, m_upgradeId); if (null != upgradeItemId) { mapIds.put(Resource.Type.UpgradeItem, upgradeItemId.toString()); - mapIds.put(Resource.Type.Stage, upgradeItemId.toString()); } return createResource(Resource.Type.UpgradeItem, mapIds); http://git-wip-us.apache.org/repos/asf/ambari/blob/95fe4b02/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 6286f08..ad6ae1f 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 @@ -182,27 +182,27 @@ public class UpgradeItemResourceProvider extends ReadOnlyResourceProvider { resultMap.put(entity.getStageId(), r); } - if (null != clusterName) { - UpgradeHelper helper = new UpgradeHelper(); - - 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); + if (!resultMap.isEmpty()) { + if (null != clusterName) { + UpgradeHelper helper = new UpgradeHelper(); + + 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()); } - - results.addAll(resultMap.values()); - } return results; } http://git-wip-us.apache.org/repos/asf/ambari/blob/95fe4b02/ambari-server/src/test/java/org/apache/ambari/server/api/services/UpgradeItemServiceTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/UpgradeItemServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/UpgradeItemServiceTest.java new file mode 100644 index 0000000..68fe87f --- /dev/null +++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/UpgradeItemServiceTest.java @@ -0,0 +1,78 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ambari.server.api.services; + +import org.apache.ambari.server.api.resources.ResourceInstance; +import org.apache.ambari.server.api.services.parsers.RequestBodyParser; +import org.apache.ambari.server.api.services.serializers.ResultSerializer; +import org.junit.Assert; + +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.UriInfo; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +/** + * UpgradeItemService tests. + */ +public class UpgradeItemServiceTest extends BaseServiceTest { + public List<ServiceTestInvocation> getTestInvocations() throws Exception { + List<ServiceTestInvocation> listInvocations = new ArrayList<ServiceTestInvocation>(); + + //updateServices + UpgradeItemService service = new TestUpgradeItemService("clusterName", "upgradeId", "upgradeGroupId", 99L); + Method m = service.getClass().getMethod("updateUpgradeItem", String.class, HttpHeaders.class, UriInfo.class, Long.class); + Object[] args = new Object[] {"body", getHttpHeaders(), getUriInfo(), 99L}; + listInvocations.add(new ServiceTestInvocation(Request.Type.PUT, service, m, args, "body")); + + return listInvocations; + } + + private class TestUpgradeItemService extends UpgradeItemService { + private Long m_upgradeItemId; + + private TestUpgradeItemService(String clusterName, String upgradeId, String upgradeGroupId, Long upgradeItemId) { + super(clusterName, upgradeId, upgradeGroupId); + + m_upgradeItemId = upgradeItemId; + } + + @Override + ResourceInstance createResourceInstance(Long upgradeItemId) { + Assert.assertEquals(m_upgradeItemId, upgradeItemId); + return getTestResource(); + } + + @Override + RequestFactory getRequestFactory() { + return getTestRequestFactory(); + } + + @Override + protected RequestBodyParser getBodyParser() { + return getTestBodyParser(); + } + + @Override + protected ResultSerializer getResultSerializer() { + return getTestResultSerializer(); + } + } +} \ No newline at end of file
