Repository: ambari
Updated Branches:
  refs/heads/trunk 3a652f0c9 -> 6effe457e


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/6effe457
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6effe457
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6effe457

Branch: refs/heads/trunk
Commit: 6effe457e493d682de652c277a572fde7e1885e8
Parents: 3a652f0
Author: Nate Cole <[email protected]>
Authored: Mon Mar 16 14:25:47 2015 -0400
Committer: Nate Cole <[email protected]>
Committed: Mon Mar 16 15:29:57 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/6effe457/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/6effe457/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/6effe457/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();

Reply via email to