Author: tbeerbower
Date: Tue Apr 2 16:56:38 2013
New Revision: 1463624
URL: http://svn.apache.org/r1463624
Log:
AMBARI-1764 - Unable to get all tasks from more than one request_id by one
request
Modified:
incubator/ambari/trunk/CHANGES.txt
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
Modified: incubator/ambari/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/CHANGES.txt?rev=1463624&r1=1463623&r2=1463624&view=diff
==============================================================================
--- incubator/ambari/trunk/CHANGES.txt (original)
+++ incubator/ambari/trunk/CHANGES.txt Tue Apr 2 16:56:38 2013
@@ -544,6 +544,9 @@ Trunk (unreleased changes):
BUG FIXES
+ AMBARI-1764. Unable to get all tasks from more than one request_id by one
+ request (tbeerbower)
+
AMBARI-1766. Hide Java Home option on step-7 of Installer wizard. (jaimin)
AMBARI-1765. Enable the Ganglia rrd files location to be configurable
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java?rev=1463624&r1=1463623&r2=1463624&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
Tue Apr 2 16:56:38 2013
@@ -29,10 +29,10 @@ import org.apache.ambari.server.controll
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.PredicateHelper;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@@ -79,31 +79,40 @@ class RequestResourceProvider extends Ab
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException,
NoSuchResourceException, NoSuchParentResourceException {
- Set<String> requestedIds = getRequestPropertyIds(request,
predicate);
- Map<String, Object> predicateProperties =
PredicateHelper.getProperties(predicate);
+ Set<Resource> resources = new HashSet<Resource>();
+ Set<String> requestedIds = getRequestPropertyIds(request, predicate);
- final RequestStatusRequest requestStatusRequest =
getRequest(predicateProperties);
+ // get the request objects by processing the given predicate
+ Map<String, Set<RequestStatusRequest>> requestStatusRequestSetMap =
getRequests(getPropertyMaps(predicate));
- String clusterName = (String)
predicateProperties.get(REQUEST_CLUSTER_NAME_PROPERTY_ID);
+ for(Map.Entry<String, Set<RequestStatusRequest>> entry:
requestStatusRequestSetMap.entrySet()) {
- Set<RequestStatusResponse> responses = getResources(new
Command<Set<RequestStatusResponse>>() {
- @Override
- public Set<RequestStatusResponse> invoke() throws AmbariException {
- return
getManagementController().getRequestStatus(requestStatusRequest);
+ String clusterName = entry.getKey();
+ Set<RequestStatusRequest> requestStatusRequestSet = entry.getValue();
+
+ for (RequestStatusRequest requestStatusRequest :
requestStatusRequestSet){
+
+ // we need to make a separate request for each request object
+ final RequestStatusRequest finalRequest = requestStatusRequest;
+ Set<RequestStatusResponse> responses = getResources(new
Command<Set<RequestStatusResponse>>() {
+ @Override
+ public Set<RequestStatusResponse> invoke() throws AmbariException {
+ return getManagementController().getRequestStatus(finalRequest);
+ }
+ });
+
+ for (RequestStatusResponse response : responses) {
+ Resource resource = new ResourceImpl(Resource.Type.Request);
+ setResourceProperty(resource, REQUEST_CLUSTER_NAME_PROPERTY_ID,
clusterName, requestedIds);
+ setResourceProperty(resource, REQUEST_ID_PROPERTY_ID,
response.getRequestId(), requestedIds);
+ setResourceProperty(resource, REQUEST_CONTEXT_ID,
response.getRequestContext(), requestedIds);
+ if (requestStatusRequest.getRequestStatus() != null) {
+ setResourceProperty(resource, REQUEST_STATUS_PROPERTY_ID,
requestStatusRequest.getRequestStatus(),
+ requestedIds);
+ }
+ resources.add(resource);
+ }
}
- });
-
-
- Set<Resource> resources = new HashSet<Resource>();
- for (RequestStatusResponse response : responses) {
- Resource resource = new ResourceImpl(Resource.Type.Request);
- setResourceProperty(resource, REQUEST_CLUSTER_NAME_PROPERTY_ID,
clusterName, requestedIds);
- setResourceProperty(resource, REQUEST_ID_PROPERTY_ID,
response.getRequestId(), requestedIds);
- setResourceProperty(resource, REQUEST_CONTEXT_ID,
response.getRequestContext(), requestedIds);
- if (requestStatusRequest.getRequestStatus() != null) {
- setResourceProperty(resource, REQUEST_STATUS_PROPERTY_ID,
requestStatusRequest.getRequestStatus(), requestedIds);
- }
- resources.add(resource);
}
return resources;
}
@@ -128,22 +137,38 @@ class RequestResourceProvider extends Ab
}
/**
- * Get a component request object from a map of property values.
+ * Get a map of component request objects from the given maps of property
values.
*
- * @param properties the predicate
+ * @param propertiesSet the set of property maps from the predicate
*
- * @return the component request object
+ * @return the map of component request objects keyed by cluster name
*/
- private RequestStatusRequest getRequest(Map<String, Object> properties) {
- 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);
+ private Map<String, Set<RequestStatusRequest>> getRequests(Set<Map<String,
Object>> propertiesSet) {
+
+ Map<String, Set<RequestStatusRequest>> requestSetMap = new HashMap<String,
Set<RequestStatusRequest>>();
+
+ for (Map<String, Object> properties : propertiesSet) {
+ Long requestId = null;
+ String clusterName = (String)
properties.get(REQUEST_CLUSTER_NAME_PROPERTY_ID);
+
+ // group the requests by cluster name
+ Set<RequestStatusRequest> requestSet = requestSetMap.get(clusterName);
+
+ if (requestSet == null) {
+ requestSet = new HashSet<RequestStatusRequest>();
+ requestSetMap.put(clusterName, requestSet);
+ }
+
+ 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);
+ }
+ requestSet.add(new RequestStatusRequest(requestId, requestStatus));
}
- return new RequestStatusRequest(requestId, requestStatus);
+ return requestSetMap;
}
}
Modified:
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java?rev=1463624&r1=1463623&r2=1463624&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
Tue Apr 2 16:56:38 2013
@@ -123,7 +123,52 @@ public class RequestResourceProviderTest
}
// verify
- verify(managementController); }
+ verify(managementController);
+ }
+
+ @Test
+ public void testGetResourcesOrPredicate() throws Exception {
+ Resource.Type type = Resource.Type.Request;
+
+ AmbariManagementController managementController =
createMock(AmbariManagementController.class);
+
+ Set<RequestStatusResponse> allResponse = new
HashSet<RequestStatusResponse>();
+ allResponse.add(new RequestStatusResponse(100L));
+
+ // set expectations
+
expect(managementController.getRequestStatus(AbstractResourceProviderTest.Matcher.getRequestRequest(100L))).
+ andReturn(allResponse).once();
+
expect(managementController.getRequestStatus(AbstractResourceProviderTest.Matcher.getRequestRequest(101L))).
+ andReturn(allResponse).once();
+
+ // replay
+ replay(managementController);
+
+ 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);
+
+ Predicate predicate = new
PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100").
+
or().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("101").
+ toPredicate();
+ Request request = PropertyHelper.getReadRequest(propertyIds);
+ Set<Resource> resources = provider.getResources(request, predicate);
+
+ Assert.assertEquals(2, resources.size());
+ for (Resource resource : resources) {
+ long id = (Long)
resource.getPropertyValue(RequestResourceProvider.REQUEST_ID_PROPERTY_ID);
+ Assert.assertTrue(id == 100L || id == 101L);
+ }
+
+ // verify
+ verify(managementController);
+ }
@Test
public void testUpdateResources() throws Exception {