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 2016/04/11 23:53:12 UTC
ambari git commit: AMBARI-15810. Not all operations shown on
'Background Operations' window (ncole)
Repository: ambari
Updated Branches:
refs/heads/trunk 7b11dcd70 -> 579982cdd
AMBARI-15810. Not all operations shown on 'Background Operations' window (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/579982cd
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/579982cd
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/579982cd
Branch: refs/heads/trunk
Commit: 579982cddbd3d7cbde5e8d8cdbdcf3061afe3017
Parents: 7b11dcd
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Apr 11 13:38:04 2016 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Apr 11 17:52:59 2016 -0400
----------------------------------------------------------------------
.../internal/RequestResourceProvider.java | 130 ++++++++++++-------
.../ambari/server/orm/dao/RequestDAO.java | 40 ++++++
.../internal/RequestResourceProviderTest.java | 58 ++++-----
3 files changed, 145 insertions(+), 83 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/579982cd/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 c1e9053..be13ec0 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
@@ -17,7 +17,22 @@
*/
package org.apache.ambari.server.controller.internal;
-import com.google.inject.Inject;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+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.ActionManager;
@@ -51,24 +66,11 @@ import org.apache.ambari.server.security.authorization.ResourceType;
import org.apache.ambari.server.security.authorization.RoleAuthorization;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.topology.TopologyManager;
import org.apache.ambari.server.topology.LogicalRequest;
+import org.apache.ambari.server.topology.TopologyManager;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID;
+import com.google.common.collect.Sets;
+import com.google.inject.Inject;
/**
* Resource provider for request resources.
@@ -88,6 +90,7 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
// ----- Property ID constants ---------------------------------------------
// Requests
public static final String REQUEST_CLUSTER_NAME_PROPERTY_ID = "Requests/cluster_name";
+ public static final String REQUEST_CLUSTER_ID_PROPERTY_ID = "Requests/cluster_id";
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";
@@ -124,32 +127,30 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
private PredicateCompiler predicateCompiler = new PredicateCompiler();
- 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);
- }
+ static Set<String> PROPERTY_IDS = Sets.newHashSet(
+ REQUEST_CLUSTER_NAME_PROPERTY_ID,
+ REQUEST_CLUSTER_ID_PROPERTY_ID,
+ REQUEST_STATUS_PROPERTY_ID,
+ REQUEST_ABORT_REASON_PROPERTY_ID,
+ REQUEST_CONTEXT_ID,
+ REQUEST_SOURCE_SCHEDULE,
+ REQUEST_SOURCE_SCHEDULE_ID,
+ REQUEST_SOURCE_SCHEDULE_HREF,
+ REQUEST_TYPE_ID,
+ REQUEST_INPUTS_ID,
+ REQUEST_RESOURCE_FILTER_ID,
+ REQUEST_OPERATION_LEVEL_ID,
+ REQUEST_CREATE_TIME_ID,
+ REQUEST_START_TIME_ID,
+ REQUEST_END_TIME_ID,
+ REQUEST_EXCLUSIVE_ID,
+ REQUEST_TASK_CNT_ID,
+ REQUEST_FAILED_TASK_CNT_ID,
+ REQUEST_ABORTED_TASK_CNT_ID,
+ REQUEST_TIMED_OUT_TASK_CNT_ID,
+ REQUEST_COMPLETED_TASK_CNT_ID,
+ REQUEST_QUEUED_TASK_CNT_ID,
+ REQUEST_PROGRESS_PERCENT_ID);
// ----- Constructors ----------------------------------------------------
@@ -228,9 +229,14 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
Boolean ascOrder = (ascOrderRaw == null ? null : Boolean.parseBoolean(ascOrderRaw));
if (null == predicate) {
+ // the no-arg call to /requests is here
resources.addAll(
getRequestResources(null, null, null, maxResults, ascOrder, requestedIds));
} else {
+ // process /requests with a predicate
+ // process /clusters/[cluster]/requests
+ // process /clusters/[cluster]/requests with a predicate
+
for (Map<String, Object> properties : getPropertyMaps(predicate)) {
String clusterName = (String) properties.get(REQUEST_CLUSTER_NAME_PROPERTY_ID);
@@ -544,7 +550,9 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
}
}
- // Get all of the request resources for the given properties
+ /**
+ * Gets all of the request resources for the given properties.
+ */
private Set<Resource> getRequestResources(String clusterName,
Long requestId,
String requestStatus,
@@ -569,6 +577,8 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
}
}
+ List<Long> requestIds = Collections.emptyList();
+
if (requestId == null) {
org.apache.ambari.server.actionmanager.RequestStatus status = null;
if (requestStatus != null) {
@@ -580,9 +590,26 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
+ ", requestStatus=" + status);
}
- List<Long> requestIds = actionManager.getRequestsByStatus(status,
- maxResults != null ? maxResults : BaseRequest.DEFAULT_PAGE_SIZE,
- ascOrder != null ? ascOrder : false);
+ maxResults = (maxResults != null) ? maxResults : BaseRequest.DEFAULT_PAGE_SIZE;
+ ascOrder = (ascOrder != null) ? ascOrder : false;
+
+ if (null == status) {
+ if (null != clusterId) {
+ // !!! don't mix results of cluster vs non-cluster
+ requestIds = s_requestDAO.findAllRequestIds(maxResults, ascOrder, clusterId);
+ } else {
+ // !!! not a cluster, so get all requests NOT affiliated with a cluster
+ requestIds = s_requestDAO.findAllRequestIds(maxResults, ascOrder, null);
+ }
+ } else {
+ // !!! this call will result in mixed results of cluster and non-cluster. this
+ // will get fixed in a future iteration, as the host_role_command table does not
+ // currently have direct cluster affinity, and changing that is a tad destructive.
+ requestIds = actionManager.getRequestsByStatus(status,
+ maxResults != null ? maxResults : BaseRequest.DEFAULT_PAGE_SIZE,
+ ascOrder != null ? ascOrder : false);
+ }
+
LOG.debug("List<Long> requestIds = actionManager.getRequestsByStatus = {}", requestIds.size());
response.addAll(getRequestResources(clusterId, clusterName, requestIds,
@@ -624,8 +651,8 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
requests.addAll(topologyRequestEntities);
for (RequestEntity re : requests) {
- if ((null == clusterId && (null == re.getClusterId() || -1L == re.getClusterId())) ||
- (null != clusterId && null != re.getRequestId() && re.getClusterId().equals(clusterId))) {
+ if ((null == clusterId && (null == re.getClusterId() || -1L == re.getClusterId())) || // if cluster IS NOT requested AND the db request is not for a cluster
+ (null != clusterId && null != re.getRequestId() && re.getClusterId().equals(clusterId))) { // if cluster IS requested and the request has a cluster id equal to the one requested
Resource r = getRequestResource(re, clusterName, requestedPropertyIds);
resourceMap.put(re.getRequestId(), r);
}
@@ -638,8 +665,11 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
Set<String> requestedPropertyIds) {
Resource resource = new ResourceImpl(Resource.Type.Request);
- if (null != clusterName)
+ if (null != clusterName) {
setResourceProperty(resource, REQUEST_CLUSTER_NAME_PROPERTY_ID, clusterName, requestedPropertyIds);
+ } else if (null != entity.getClusterId() && -1L != entity.getClusterId()) {
+ setResourceProperty(resource, REQUEST_CLUSTER_ID_PROPERTY_ID, entity.getClusterId(), requestedPropertyIds);
+ }
setResourceProperty(resource, REQUEST_ID_PROPERTY_ID, entity.getRequestId(), requestedPropertyIds);
setResourceProperty(resource, REQUEST_CONTEXT_ID, entity.getRequestContext(), requestedPropertyIds);
http://git-wip-us.apache.org/repos/asf/ambari/blob/579982cd/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RequestDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RequestDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RequestDAO.java
index dcbf2a6..1c4d0a3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RequestDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RequestDAO.java
@@ -45,6 +45,19 @@ public class RequestDAO {
*/
private final static String REQUEST_IDS_SORTED_SQL = "SELECT request.requestId FROM RequestEntity request ORDER BY request.requestId {0}";
+ /**
+ * Requests by cluster. Cannot be a NamedQuery due to the ORDER BY clause.
+ */
+ private final static String REQUESTS_WITH_CLUSTER_SQL =
+ "SELECT request.requestId FROM RequestEntity request WHERE request.clusterId = %s ORDER BY request.requestId %s";
+ /**
+ * Requests by cluster. Cannot be a NamedQuery due to the ORDER BY clause.
+ */
+ private final static String REQUESTS_WITH_NO_CLUSTER_SQL =
+ "SELECT request.requestId FROM RequestEntity request WHERE request.clusterId = -1 OR request.clusterId IS NULL ORDER BY request.requestId %s";
+
+
+
@Inject
Provider<EntityManager> entityManagerProvider;
@@ -149,4 +162,31 @@ public class RequestDAO {
public void removeByPK(Long requestId) {
remove(findByPK(requestId));
}
+
+ /**
+ * Retrieves from the database for a cluster, or specifically for non-cluster requests.
+ * This method should be considered temporary until Request/Stage/Task cleanup is achieved.
+ *
+ * @param maxResults the max number to return
+ * @param ascOrder {@code true} to sort by requestId ascending, {@code false} for descending
+ * @param clusterId the cluster to find, or {@code null} to search for requests without cluster
+ */
+ @RequiresSession
+ public List<Long> findAllRequestIds(int limit, boolean sortAscending, Long clusterId) {
+
+ final String sql;
+
+ if (null == clusterId) {
+ sql = String.format(REQUESTS_WITH_NO_CLUSTER_SQL, sortAscending ? "ASC" : "DESC");
+ } else {
+ sql = String.format(REQUESTS_WITH_CLUSTER_SQL, clusterId, sortAscending ? "ASC" : "DESC");
+ }
+
+ TypedQuery<Long> query = entityManagerProvider.get().createQuery(sql,
+ Long.class);
+
+ query.setMaxResults(limit);
+
+ return daoUtils.selectList(query);
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/579982cd/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 bbb55f3..ea4afde 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
@@ -19,6 +19,18 @@
package org.apache.ambari.server.controller.internal;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.capture;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.newCapture;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Collection;
@@ -80,18 +92,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.newCapture;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
-
/**
* RequestResourceProvider tests.
*/
@@ -187,7 +187,6 @@ public class RequestResourceProviderTest {
Resource.Type type = Resource.Type.Request;
expect(requestDAO.findByPks(Collections.<Long> emptyList(), true)).andReturn(Collections.<RequestEntity>emptyList()).anyTimes();
- replay(requestDAO);
ActionManager actionManager = createNiceMock(ActionManager.class);
@@ -198,12 +197,9 @@ public class RequestResourceProviderTest {
Clusters clusters = createNiceMock(Clusters.class);
expect(clusters.getCluster("foo_cluster")).andReturn(cluster).anyTimes();
- AmbariManagementController managementController =
- createMock(AmbariManagementController.class);
- expect(managementController.getActionManager()).andReturn(actionManager)
- .anyTimes();
+ AmbariManagementController managementController = createMock(AmbariManagementController.class);
+ expect(managementController.getActionManager()).andReturn(actionManager).anyTimes();
expect(managementController.getClusters()).andReturn(clusters).anyTimes();
-
replay(managementController, clusters, cluster);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(type,
@@ -224,33 +220,29 @@ public class RequestResourceProviderTest {
request = PropertyHelper.getReadRequest(new HashSet<String>(),
requestInfoProperties, null, null, null);
- expect(actionManager.getRequestsByStatus(null, BaseRequest.DEFAULT_PAGE_SIZE, false))
- .andReturn(Collections.<Long> emptyList());
+ expect(requestDAO.findAllRequestIds(BaseRequest.DEFAULT_PAGE_SIZE, false, 1L)).andReturn(Collections.<Long> emptyList()).anyTimes();
+ replay(requestDAO);
- replay(actionManager);
provider.getResources(request, predicate);
- verify(actionManager);
- reset(actionManager);
+ verify(requestDAO);
requestInfoProperties.put(BaseRequest.PAGE_SIZE_PROPERTY_KEY, "20");
request = PropertyHelper.getReadRequest(new HashSet<String>(),
requestInfoProperties, null, null, null);
- expect(actionManager.getRequestsByStatus(null, 20, false))
- .andReturn(Collections.<Long> emptyList());
- replay(actionManager);
provider.getResources(request, predicate);
- verify(actionManager);
- reset(actionManager);
+ verify(requestDAO);
+
+ reset(requestDAO);
requestInfoProperties.put(BaseRequest.ASC_ORDER_PROPERTY_KEY, "true");
request = PropertyHelper.getReadRequest(new HashSet<String>(),
requestInfoProperties, null, null, null);
- expect(actionManager.getRequestsByStatus(null, 20, true))
- .andReturn(Collections.<Long> emptyList());
- replay(actionManager);
+ expect(requestDAO.findByPks(Collections.<Long> emptyList(), true)).andReturn(Collections.<RequestEntity>emptyList()).anyTimes();
+ expect(requestDAO.findAllRequestIds(BaseRequest.DEFAULT_PAGE_SIZE, true, 1L)).andReturn(Collections.<Long> emptyList()).anyTimes();
+ replay(requestDAO);
+
provider.getResources(request, predicate);
- verify(actionManager);
- reset(actionManager);
+ verify(requestDAO);
}
@Test