AMBARI-4334. Add Request Schedule as an object to the Request with properties. (mpapirkovskyy)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a0ea66fe Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a0ea66fe Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a0ea66fe Branch: refs/heads/trunk Commit: a0ea66fecae19438267467aed0a2a7a661880bc7 Parents: e5d440b Author: Myroslav Papirkovskyy <[email protected]> Authored: Thu Jan 23 18:34:23 2014 +0200 Committer: Myroslav Papirkovskyy <[email protected]> Committed: Thu Jan 23 22:19:49 2014 +0200 ---------------------------------------------------------------------- .../resources/RequestResourceDefinition.java | 1 + .../internal/RequestResourceProvider.java | 14 ++- .../src/main/resources/properties.json | 3 +- .../internal/RequestResourceProviderTest.java | 120 +++++++++++++++++++ 4 files changed, 132 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/a0ea66fe/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java index 474bf56..a2099a4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java @@ -86,6 +86,7 @@ public class RequestResourceDefinition extends BaseResourceDefinition { private class RequestSourceScheduleHrefPostProcessor implements PostProcessor { + @SuppressWarnings("unchecked") @Override public void process(Request request, TreeNode<Resource> resultNode, String href) { StringBuilder sb = new StringBuilder(); http://git-wip-us.apache.org/repos/asf/ambari/blob/a0ea66fe/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 d96e841..92d1476 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 @@ -33,6 +33,7 @@ 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.controller.utilities.PropertyHelper; import org.apache.ambari.server.state.Clusters; import java.util.ArrayList; @@ -56,8 +57,9 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider protected 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_CONTEXT_ID = "Requests/request_context"; - public static final String REQUEST_SOURCE_SCHEDULE_HREF = "Requests/source_schedule_href"; - public static final String REQUEST_SOURCE_SCHEDULE_ID = "Requests/source_schedule_id"; + public static final String REQUEST_SOURCE_SCHEDULE = "Requests/request_schedule"; + public static final String REQUEST_SOURCE_SCHEDULE_ID = "Requests/request_schedule/schedule_id"; + public static final String REQUEST_SOURCE_SCHEDULE_HREF = "Requests/request_schedule/href"; protected static final String REQUEST_TYPE_ID = "Requests/type"; protected static final String REQUEST_INPUTS_ID = "Requests/inputs"; protected static final String REQUEST_TARGET_SERVICE_ID = "Requests/target_service"; @@ -275,7 +277,7 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider return resourceMap.values(); } - private Resource getRequestResource(org.apache.ambari.server.actionmanager.Request request, + private Resource getRequestResource(final org.apache.ambari.server.actionmanager.Request request, Set<String> requestedPropertyIds) { Resource resource = new ResourceImpl(Resource.Type.Request); @@ -290,7 +292,11 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider setResourceProperty(resource, REQUEST_CREATE_TIME_ID, request.getCreateTime(), requestedPropertyIds); setResourceProperty(resource, REQUEST_START_TIME_ID, request.getStartTime(), requestedPropertyIds); setResourceProperty(resource, REQUEST_END_TIME_ID, request.getEndTime(), requestedPropertyIds); - setResourceProperty(resource, REQUEST_SOURCE_SCHEDULE_ID, request.getRequestScheduleId(), requestedPropertyIds); + if (request.getRequestScheduleId() != null) { + setResourceProperty(resource, REQUEST_SOURCE_SCHEDULE_ID, request.getRequestScheduleId(), requestedPropertyIds); + } else { + setResourceProperty(resource, REQUEST_SOURCE_SCHEDULE, null, requestedPropertyIds); + } List<HostRoleCommand> commands = request.getCommands(); http://git-wip-us.apache.org/repos/asf/ambari/blob/a0ea66fe/ambari-server/src/main/resources/properties.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json index ce7292c..1e555c2 100644 --- a/ambari-server/src/main/resources/properties.json +++ b/ambari-server/src/main/resources/properties.json @@ -97,8 +97,7 @@ "Requests/cluster_name", "Requests/request_status", "Requests/request_context", - "Requests/source_schedule_id", - "Requests/source_schedule_href", + "Requests/request_schedule", "Requests/type", "Requests/inputs", "Requests/target_service", http://git-wip-us.apache.org/repos/asf/ambari/blob/a0ea66fe/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java index 6df5de5..e279342 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java @@ -147,6 +147,126 @@ public class RequestResourceProviderTest { } @Test + public void testGetResourcesWithRequestSchedule() throws Exception { + Resource.Type type = Resource.Type.Request; + + AmbariManagementController managementController = createMock(AmbariManagementController.class); + ActionManager actionManager = createNiceMock(ActionManager.class); + HostRoleCommand hostRoleCommand = createNiceMock(HostRoleCommand.class); + + + List<HostRoleCommand> hostRoleCommands = new LinkedList<HostRoleCommand>(); + hostRoleCommands.add(hostRoleCommand); + + org.apache.ambari.server.actionmanager.Request requestMock = + createNiceMock(org.apache.ambari.server.actionmanager.Request.class); + expect(requestMock.getCommands()).andReturn(hostRoleCommands).anyTimes(); + expect(requestMock.getRequestContext()).andReturn("this is a context").anyTimes(); + expect(requestMock.getRequestId()).andReturn(100L).anyTimes(); + expect(requestMock.getRequestScheduleId()).andReturn(11L).anyTimes(); + + + Capture<Collection<Long>> requestIdsCapture = new Capture<Collection<Long>>(); + + // set expectations + expect(managementController.getActionManager()).andReturn(actionManager); + expect(actionManager.getRequests(capture(requestIdsCapture))).andReturn(Collections.singletonList(requestMock)).anyTimes(); + expect(hostRoleCommand.getRequestId()).andReturn(100L).anyTimes(); + expect(hostRoleCommand.getStatus()).andReturn(HostRoleStatus.IN_PROGRESS); + + // replay + replay(managementController, actionManager, hostRoleCommand, requestMock); + + ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); + + Set<String> propertyIds = new HashSet<String>(); + + propertyIds.add(RequestResourceProvider.REQUEST_ID_PROPERTY_ID); + propertyIds.add(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID); + propertyIds.add(RequestResourceProvider.REQUEST_SOURCE_SCHEDULE); + + + Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). + toPredicate(); + Request request = PropertyHelper.getReadRequest(propertyIds); + Set<Resource> resources = provider.getResources(request, predicate); + + Assert.assertEquals(1, resources.size()); + for (Resource resource : resources) { + Assert.assertEquals(100L, (long) (Long) resource.getPropertyValue(RequestResourceProvider.REQUEST_ID_PROPERTY_ID)); + Assert.assertEquals("IN_PROGRESS", resource.getPropertyValue(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID)); + Assert.assertEquals(11L, (long) (Long) resource.getPropertyValue(RequestResourceProvider.REQUEST_SOURCE_SCHEDULE_ID)); + } + + // verify + verify(managementController, actionManager, hostRoleCommand); + } + + @Test + public void testGetResourcesWithoutRequestSchedule() throws Exception { + Resource.Type type = Resource.Type.Request; + + AmbariManagementController managementController = createMock(AmbariManagementController.class); + ActionManager actionManager = createNiceMock(ActionManager.class); + HostRoleCommand hostRoleCommand = createNiceMock(HostRoleCommand.class); + + + List<HostRoleCommand> hostRoleCommands = new LinkedList<HostRoleCommand>(); + hostRoleCommands.add(hostRoleCommand); + + org.apache.ambari.server.actionmanager.Request requestMock = + createNiceMock(org.apache.ambari.server.actionmanager.Request.class); + expect(requestMock.getCommands()).andReturn(hostRoleCommands).anyTimes(); + expect(requestMock.getRequestContext()).andReturn("this is a context").anyTimes(); + expect(requestMock.getRequestId()).andReturn(100L).anyTimes(); + expect(requestMock.getRequestScheduleId()).andReturn(null).anyTimes(); + + + Capture<Collection<Long>> requestIdsCapture = new Capture<Collection<Long>>(); + + // set expectations + expect(managementController.getActionManager()).andReturn(actionManager); + expect(actionManager.getRequests(capture(requestIdsCapture))).andReturn(Collections.singletonList(requestMock)).anyTimes(); + expect(hostRoleCommand.getRequestId()).andReturn(100L).anyTimes(); + expect(hostRoleCommand.getStatus()).andReturn(HostRoleStatus.IN_PROGRESS); + + // replay + replay(managementController, actionManager, hostRoleCommand, requestMock); + + ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); + + Set<String> propertyIds = new HashSet<String>(); + + propertyIds.add(RequestResourceProvider.REQUEST_ID_PROPERTY_ID); + propertyIds.add(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID); + propertyIds.add(RequestResourceProvider.REQUEST_SOURCE_SCHEDULE); + + + Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). + toPredicate(); + Request request = PropertyHelper.getReadRequest(propertyIds); + Set<Resource> resources = provider.getResources(request, predicate); + + Assert.assertEquals(1, resources.size()); + for (Resource resource : resources) { + Assert.assertEquals(100L, (long) (Long) resource.getPropertyValue(RequestResourceProvider.REQUEST_ID_PROPERTY_ID)); + Assert.assertEquals("IN_PROGRESS", resource.getPropertyValue(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID)); + Assert.assertEquals(null, resource.getPropertyValue(RequestResourceProvider.REQUEST_SOURCE_SCHEDULE)); + } + + // verify + verify(managementController, actionManager, hostRoleCommand); + } + + @Test public void testGetResourcesWithCluster() throws Exception { Resource.Type type = Resource.Type.Request;
