You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sw...@apache.org on 2018/04/30 19:18:21 UTC
[ambari] branch trunk updated: [AMBARI-23727] Predicate evaluation
does not work as expected for RequestResourceFilters. (swagle) (#1139)
This is an automated email from the ASF dual-hosted git repository.
swagle pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push:
new 154b361 [AMBARI-23727] Predicate evaluation does not work as expected for RequestResourceFilters. (swagle) (#1139)
154b361 is described below
commit 154b3610f75013350990ff4543900a1a19977854
Author: Siddharth <sw...@apache.org>
AuthorDate: Mon Apr 30 12:18:18 2018 -0700
[AMBARI-23727] Predicate evaluation does not work as expected for RequestResourceFilters. (swagle) (#1139)
---
.../internal/RequestResourceProvider.java | 73 ++++++++++------------
.../internal/RequestResourceProviderTest.java | 19 +++++-
2 files changed, 50 insertions(+), 42 deletions(-)
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 c4ef23b..48a9432 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
@@ -43,17 +43,18 @@ import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.ExecuteActionRequest;
import org.apache.ambari.server.controller.RequestRequest;
import org.apache.ambari.server.controller.RequestStatusResponse;
+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.RequestStatus;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
-import org.apache.ambari.server.controller.spi.ResourceProvider;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
-import org.apache.ambari.server.controller.utilities.PredicateBuilder;
+import org.apache.ambari.server.controller.utilities.ClusterControllerHelper;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.customactions.ActionDefinition;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
@@ -536,52 +537,46 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
throw new SystemException(msg, e);
}
- ResourceProvider resourceProvider = getResourceProvider(Resource.Type.HostComponent);
-
Set<String> propertyIds = new HashSet<>();
propertyIds.add(CLUSTER_NAME);
propertyIds.add(SERVICE_NAME);
propertyIds.add(COMPONENT_NAME);
Request request = PropertyHelper.getReadRequest(propertyIds);
-
- Predicate finalPredicate = new PredicateBuilder(filterPredicate)
- .property(CLUSTER_NAME).equals(clusterName).and()
- .property(SERVICE_NAME).equals(serviceName).and()
- .property(COMPONENT_NAME).equals(componentName)
- .toPredicate();
-
+
try {
- Set<Resource> resources = resourceProvider.getResources(request, finalPredicate);
-
- if (resources != null && !resources.isEmpty()) {
- // Allow request to span services / components using just the predicate
- Map<ServiceComponentTuple, List<String>> dupleListMap = new HashMap<>();
- for (Resource resource : resources) {
- String hostnameStr = (String) resource.getPropertyValue(HOST_NAME);
- if (hostnameStr != null) {
- String computedServiceName = (String) resource.getPropertyValue(SERVICE_NAME);
- String computedComponentName = (String) resource.getPropertyValue(COMPONENT_NAME);
- ServiceComponentTuple duple =
- new ServiceComponentTuple(computedServiceName, computedComponentName);
-
- if (!dupleListMap.containsKey(duple)) {
- hostList = new ArrayList<>();
- hostList.add(hostnameStr);
- dupleListMap.put(duple, hostList);
- } else {
- dupleListMap.get(duple).add(hostnameStr);
- }
+ ClusterController clusterController = ClusterControllerHelper.getClusterController();
+ QueryResponse queryResponse = clusterController.getResources(
+ Resource.Type.HostComponent, request, filterPredicate);
+ Iterable<Resource> resourceIterable = clusterController.getIterable(
+ Resource.Type.HostComponent, queryResponse, request,
+ filterPredicate, null, null);
+
+ // Allow request to span services / components using just the predicate
+ Map<ServiceComponentTuple, List<String>> tupleListMap = new HashMap<>();
+ for (Resource resource : resourceIterable) {
+ String hostnameStr = (String) resource.getPropertyValue(HOST_NAME);
+ if (hostnameStr != null) {
+ String computedServiceName = (String) resource.getPropertyValue(SERVICE_NAME);
+ String computedComponentName = (String) resource.getPropertyValue(COMPONENT_NAME);
+ ServiceComponentTuple tuple = new ServiceComponentTuple(computedServiceName, computedComponentName);
+
+ if (!tupleListMap.containsKey(tuple)) {
+ hostList = new ArrayList<>();
+ hostList.add(hostnameStr);
+ tupleListMap.put(tuple, hostList);
+ } else {
+ tupleListMap.get(tuple).add(hostnameStr);
}
}
- if (!dupleListMap.isEmpty()) {
- for (Map.Entry<ServiceComponentTuple, List<String>> entry : dupleListMap.entrySet()) {
- resourceFilterList.add(new RequestResourceFilter(
- entry.getKey().getServiceName(),
- entry.getKey().getComponentName(),
- entry.getValue()
- ));
- }
+ }
+ if (!tupleListMap.isEmpty()) {
+ for (Map.Entry<ServiceComponentTuple, List<String>> entry : tupleListMap.entrySet()) {
+ resourceFilterList.add(new RequestResourceFilter(
+ entry.getKey().getServiceName(),
+ entry.getKey().getComponentName(),
+ entry.getValue()
+ ));
}
}
} catch (Exception e) {
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 31a3783..c014692 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
@@ -41,6 +41,7 @@ import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -61,6 +62,7 @@ import org.apache.ambari.server.controller.ExecuteActionRequest;
import org.apache.ambari.server.controller.RequestStatusResponse;
import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
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.ResourceProvider;
@@ -1157,12 +1159,24 @@ public class RequestResourceProviderTest {
ClusterControllerImpl controller = createNiceMock(ClusterControllerImpl.class);
HostComponentProcessResourceProvider hostComponentProcessResourceProvider = createNiceMock(HostComponentProcessResourceProvider.class);
PowerMock.mockStatic(ClusterControllerHelper.class);
+
Resource resource = createNiceMock(Resource.class);
+ Collection<Resource> resources = Collections.singleton(resource);
+ Iterable<Resource> resourceIterable = new Iterable<Resource>() {
+ @Override
+ public Iterator<Resource> iterator() {
+ return resources.iterator();
+ }
+ };
expect(ClusterControllerHelper.getClusterController()).andReturn(controller);
expect(controller.ensureResourceProvider(Resource.Type.HostComponent)).andReturn(hostComponentProcessResourceProvider);
- expect(hostComponentProcessResourceProvider.getResources(
- capture(requestCapture), capture(predicateCapture))).andReturn(Collections.singleton(resource));
+ QueryResponse queryResponse = createNiceMock(QueryResponse.class);
+ expect(controller.getResources(eq(Resource.Type.HostComponent), capture(requestCapture),
+ capture(predicateCapture))).andReturn(queryResponse);
+ expect(controller.getIterable(eq(Resource.Type.HostComponent), eq(queryResponse),
+ (Request) anyObject(), (Predicate) anyObject(), eq(null), eq(null)))
+ .andReturn(resourceIterable);
// replay
replayAll();
@@ -1184,7 +1198,6 @@ public class RequestResourceProviderTest {
filterSet.add(filterMap);
properties.put(RequestResourceProvider.REQUEST_RESOURCE_FILTER_ID, filterSet);
-
propertySet.add(properties);
Map<String, String> requestInfoProperties = new HashMap<>();
--
To stop receiving notification emails like this one, please contact
swagle@apache.org.