Repository: ambari Updated Branches: refs/heads/branch-2.0.0 e2b6a3369 -> 285bdec0b
AMBARI-10092. Parameter schedule_id is absent in list of requests (ncole) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/285bdec0 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/285bdec0 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/285bdec0 Branch: refs/heads/branch-2.0.0 Commit: 285bdec0b888faea61c2779dec2da5243aade278 Parents: e2b6a33 Author: Nate Cole <[email protected]> Authored: Mon Mar 16 14:57:52 2015 -0400 Committer: Nate Cole <[email protected]> Committed: Mon Mar 16 15:30:33 2015 -0400 ---------------------------------------------------------------------- .../internal/RequestResourceProvider.java | 2 +- .../ambari/server/orm/dao/RequestDAO.java | 21 ++++++++++++++- .../internal/RequestResourceProviderTest.java | 27 ++++++++++---------- 3 files changed, 35 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/285bdec0/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 82ba160..1d5d90a 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 @@ -432,7 +432,7 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider Map<Long, Resource> resourceMap = new HashMap<Long, Resource>(); - List<RequestEntity> requests = s_requestDAO.findByPks(requestIds); + List<RequestEntity> requests = s_requestDAO.findByPks(requestIds, true); for (RequestEntity re : requests) { if ((null == clusterId && (null == re.getClusterId() || -1L == re.getClusterId())) || (null != clusterId && null != re.getRequestId() && re.getClusterId().equals(clusterId))) { http://git-wip-us.apache.org/repos/asf/ambari/blob/285bdec0/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 96510b7..7e190a3 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 @@ -30,6 +30,8 @@ import org.apache.ambari.server.actionmanager.HostRoleStatus; import org.apache.ambari.server.orm.RequiresSession; import org.apache.ambari.server.orm.entities.RequestEntity; import org.apache.ambari.server.orm.entities.RequestResourceFilterEntity; +import org.eclipse.persistence.config.HintValues; +import org.eclipse.persistence.config.QueryHints; import com.google.inject.Inject; import com.google.inject.Provider; @@ -54,14 +56,31 @@ public class RequestDAO { return entityManagerProvider.get().find(RequestEntity.class, requestId); } - @RequiresSession public List<RequestEntity> findByPks(Collection<Long> requestIds) { + return findByPks(requestIds, false); + } + + /** + * Given a collection of request ids, load the corresponding entities + * @param requestIds the collection of request ids + * @param refreshHint {@code true} to hint JPA that the list should be refreshed + * @return the list entities. An empty list if the requestIds are not provided + */ + @RequiresSession + public List<RequestEntity> findByPks(Collection<Long> requestIds, boolean refreshHint) { if (null == requestIds || 0 == requestIds.size()) { return Collections.emptyList(); } TypedQuery<RequestEntity> query = entityManagerProvider.get().createQuery("SELECT request FROM RequestEntity request " + "WHERE request.requestId IN ?1", RequestEntity.class); + + // !!! https://bugs.eclipse.org/bugs/show_bug.cgi?id=398067 + // ensure that an associated entity with a JOIN is not stale + if (refreshHint) { + query.setHint(QueryHints.REFRESH, HintValues.TRUE); + } + return daoUtils.selectList(query, requestIds); } http://git-wip-us.apache.org/repos/asf/ambari/blob/285bdec0/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 43151bb..64210db 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 @@ -22,6 +22,7 @@ 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.replay; import static org.easymock.EasyMock.reset; @@ -136,7 +137,7 @@ public class RequestResourceProviderTest { public void testGetResourcesWithRequestInfo() throws Exception { Resource.Type type = Resource.Type.Request; - expect(requestDAO.findByPks(Collections.<Long> emptyList())).andReturn(Collections.<RequestEntity>emptyList()).anyTimes(); + expect(requestDAO.findByPks(Collections.<Long> emptyList(), true)).andReturn(Collections.<RequestEntity>emptyList()).anyTimes(); replay(requestDAO); ActionManager actionManager = createNiceMock(ActionManager.class); @@ -217,7 +218,7 @@ public class RequestResourceProviderTest { // set expectations expect(managementController.getActionManager()).andReturn(actionManager); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Collections.singletonList(requestMock)).anyTimes(); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Collections.singletonList(requestMock)).anyTimes(); expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ put(1L, HostRoleCommandStatusSummaryDTO.create().inProgress(1)); }}).anyTimes(); @@ -267,7 +268,7 @@ public class RequestResourceProviderTest { // set expectations expect(managementController.getActionManager()).andReturn(actionManager); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Collections.singletonList(requestMock)).anyTimes(); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Collections.singletonList(requestMock)).anyTimes(); expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ put(1L, HostRoleCommandStatusSummaryDTO.create().inProgress(1)); }}).anyTimes(); @@ -320,7 +321,7 @@ public class RequestResourceProviderTest { // set expectations expect(managementController.getActionManager()).andReturn(actionManager); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Collections.singletonList(requestMock)).anyTimes(); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Collections.singletonList(requestMock)).anyTimes(); expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ put(1L, HostRoleCommandStatusSummaryDTO.create().inProgress(1)); }}).anyTimes(); @@ -380,7 +381,7 @@ public class RequestResourceProviderTest { expect(managementController.getClusters()).andReturn(clusters).anyTimes(); expect(clusters.getCluster("c1")).andReturn(cluster).anyTimes(); expect(clusters.getCluster("bad-cluster")).andThrow(new AmbariException("bad cluster!")).anyTimes(); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Collections.singletonList(requestMock)); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Collections.singletonList(requestMock)); expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ put(1L, HostRoleCommandStatusSummaryDTO.create().inProgress(1)); }}).anyTimes(); @@ -447,7 +448,7 @@ public class RequestResourceProviderTest { // set expectations expect(managementController.getActionManager()).andReturn(actionManager).anyTimes(); - expect(requestDAO.findByPks(capture(requestIdsCapture))). + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))). andReturn(Arrays.asList(requestMock, requestMock1)).anyTimes(); expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ put(1L, HostRoleCommandStatusSummaryDTO.create().inProgress(1)); @@ -501,8 +502,8 @@ public class RequestResourceProviderTest { // set expectations expect(managementController.getActionManager()).andReturn(actionManager).anyTimes(); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Arrays.asList(requestMock0)); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Arrays.asList(requestMock1)); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Arrays.asList(requestMock0)); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Arrays.asList(requestMock1)); expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ put(1L, HostRoleCommandStatusSummaryDTO.create().completed(2)); }}).anyTimes(); @@ -565,8 +566,8 @@ public class RequestResourceProviderTest { // set expectations expect(managementController.getActionManager()).andReturn(actionManager).anyTimes(); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Arrays.asList(requestMock0)); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Arrays.asList(requestMock1)); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Arrays.asList(requestMock0)); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Arrays.asList(requestMock1)); // IN_PROGRESS and PENDING expect(hrcDAO.findAggregateCounts(100L)).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ @@ -645,8 +646,8 @@ public class RequestResourceProviderTest { // set expectations expect(managementController.getActionManager()).andReturn(actionManager).anyTimes(); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Arrays.asList(requestMock0)); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Arrays.asList(requestMock1)); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Arrays.asList(requestMock0)); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Arrays.asList(requestMock1)); // FAILED and COMPLETED expect(hrcDAO.findAggregateCounts(100L)).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ @@ -1149,7 +1150,7 @@ public class RequestResourceProviderTest { expect(managementController.getActionManager()).andReturn(actionManager).anyTimes(); expect(managementController.getClusters()).andReturn(clusters).anyTimes(); expect(clusters.getCluster(anyObject(String.class))).andReturn(null).anyTimes(); - expect(requestDAO.findByPks(capture(requestIdsCapture))).andReturn(Collections.singletonList(requestMock)); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Collections.singletonList(requestMock)); expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ put(1L, HostRoleCommandStatusSummaryDTO.create().inProgress(1)); }}).anyTimes();
