You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ds...@apache.org on 2014/04/24 16:12:46 UTC

git commit: AMBARI-5546 Call for requests with 'page_size' always return 10 most recent (dsen)

Repository: ambari
Updated Branches:
  refs/heads/trunk 82bbd3ea6 -> cb6765fae


AMBARI-5546 Call for requests with 'page_size' always return 10 most recent (dsen)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/cb6765fa
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/cb6765fa
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/cb6765fa

Branch: refs/heads/trunk
Commit: cb6765fae3d149b4918d60b166dade4f1f1bd178
Parents: 82bbd3e
Author: Dmitry Sen <ds...@hortonworks.com>
Authored: Thu Apr 24 17:12:07 2014 +0300
Committer: Dmitry Sen <ds...@hortonworks.com>
Committed: Thu Apr 24 17:12:32 2014 +0300

----------------------------------------------------------------------
 .../server/actionmanager/ActionDBAccessor.java  | 20 +++---
 .../actionmanager/ActionDBAccessorImpl.java     | 12 ++--
 .../server/actionmanager/ActionManager.java     | 25 ++++---
 .../ambari/server/api/query/QueryImpl.java      | 20 +++++-
 .../ambari/server/api/services/BaseRequest.java | 12 +++-
 .../internal/RequestResourceProvider.java       | 23 +++++--
 .../controller/utilities/PropertyHelper.java    | 13 ++++
 .../server/orm/dao/HostRoleCommandDAO.java      | 21 ++----
 .../actionmanager/TestActionDBAccessorImpl.java | 43 +++++++++++-
 .../server/actionmanager/TestActionManager.java |  5 +-
 .../internal/RequestResourceProviderTest.java   | 72 ++++++++++++++++++++
 11 files changed, 211 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
index f83adaf..86ebecf 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
@@ -142,19 +142,23 @@ public interface ActionDBAccessor {
   public List<Stage> getStagesByHostRoleStatus(Set<HostRoleStatus> statuses);
 
   /**
-   * Get all requests
-   */
-  public List<Long> getRequestIds();
-
-  /**
    * Gets the host role command corresponding to the task id
    */
   public HostRoleCommand getTask(long taskId);
 
   /**
-   * Gets request id of request that are in the specified status
+   * Get first or last maxResults requests that are in the specified status
+   *
+   * @param status
+   *          Desired request status
+   * @param maxResults
+   *          maximal number of returned id's
+   * @param ascOrder
+   *          defines sorting order for database query result
+   * @return First or last maxResults request id's if ascOrder is true or false,
+   *         respectively
    */
-  public List<Long> getRequestsByStatus(RequestStatus status);
+  public List<Long> getRequestsByStatus(RequestStatus status, int maxResults, boolean ascOrder);
 
   /**
    * Gets request contexts associated with the list of request id
@@ -169,5 +173,5 @@ public interface ActionDBAccessor {
   /**
    * Gets request objects by ids
    */
-  List<Request> getRequests(Collection<Long> requestIds);
+  public List<Request> getRequests(Collection<Long> requestIds);
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
index 07e6d5f..2104bd6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
@@ -508,11 +508,6 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
     return stages;
   }
 
-  @Override
-  public List<Long> getRequestIds() {
-    return hostRoleCommandDAO.getRequests();
-  }
-
   public HostRoleCommand getTask(long taskId) {
     HostRoleCommandEntity commandEntity = hostRoleCommandDAO.findByPK((int) taskId);
     if (commandEntity == null) {
@@ -522,7 +517,9 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
   }
 
   @Override
-  public List<Long> getRequestsByStatus(RequestStatus status) {
+  public List<Long> getRequestsByStatus(RequestStatus status, int maxResults,
+    boolean ascOrder) {
+
     boolean match = true;
     boolean checkAllTasks = false;
     Set<HostRoleStatus> statuses = new HashSet<HostRoleStatus>();
@@ -540,7 +537,8 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
       statuses.addAll(Arrays.asList(HostRoleStatus.ABORTED,
           HostRoleStatus.FAILED, HostRoleStatus.TIMEDOUT));
     }
-    return hostRoleCommandDAO.getRequestsByTaskStatus(statuses, match, checkAllTasks);
+    return hostRoleCommandDAO.getRequestsByTaskStatus(statuses, match,
+      checkAllTasks, maxResults, ascOrder);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionManager.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionManager.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionManager.java
index 7b9a922..4bb9d1d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionManager.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionManager.java
@@ -24,6 +24,7 @@ import com.google.inject.persist.UnitOfWork;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.agent.ActionQueue;
 import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.api.services.BaseRequest;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.ExecuteActionRequest;
 import org.apache.ambari.server.controller.HostsMap;
@@ -196,21 +197,19 @@ public class ActionManager {
   }
 
   /**
-   * Returns last 20 requests
+   * Get first or last maxResults requests that are in the specified status
    *
-   * @return
-   */
-  public List<Long> getRequests() {
-    return db.getRequestIds();
-  }
-
-  /**
-   * Returns last 20 requests
-   *
-   * @return
+   * @param status
+   *          Desired request status
+   * @param maxResults
+   *          maximal number of returned id's
+   * @param ascOrder
+   *          defines sorting order for database query result
+   * @return First or last maxResults request id's if ascOrder is true or false,
+   *         respectively
    */
-  public List<Long> getRequestsByStatus(RequestStatus status) {
-    return db.getRequestsByStatus(status);
+  public List<Long> getRequestsByStatus(RequestStatus status, int maxResults, boolean ascOrder) {
+    return db.getRequestsByStatus(status, maxResults, ascOrder);
   }
 
   public Map<Long, String> getRequestContext(List<Long> requestIds) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java
index 0a0822c..0dda747 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java
@@ -24,6 +24,7 @@ import org.apache.ambari.server.api.resources.ResourceDefinition;
 import org.apache.ambari.server.api.resources.ResourceInstance;
 import org.apache.ambari.server.api.resources.ResourceInstanceFactoryImpl;
 import org.apache.ambari.server.api.resources.SubResourceDefinition;
+import org.apache.ambari.server.api.services.BaseRequest;
 import org.apache.ambari.server.api.services.ResultImpl;
 import org.apache.ambari.server.api.util.TreeNode;
 import org.apache.ambari.server.api.util.TreeNodeImpl;
@@ -33,6 +34,7 @@ import org.apache.ambari.server.controller.predicate.AndPredicate;
 import org.apache.ambari.server.controller.predicate.EqualsPredicate;
 import org.apache.ambari.server.api.services.Result;
 import org.apache.ambari.server.controller.spi.*;
+import org.apache.ambari.server.controller.spi.PageRequest.StartingPoint;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -816,9 +818,20 @@ public class QueryImpl implements Query, ResourceInstance {
   }
 
   private Request createRequest() {
-    
+    Map<String, String> requestInfoProperties = new HashMap<String, String>();
+
+    if (pageRequest != null) {
+      requestInfoProperties.put(BaseRequest.PAGE_SIZE_PROPERTY_KEY,
+          Integer.toString(pageRequest.getPageSize() + pageRequest.getOffset()));
+      requestInfoProperties.put(
+        BaseRequest.ASC_ORDER_PROPERTY_KEY,
+          Boolean.toString(pageRequest.getStartingPoint() == StartingPoint.Beginning
+              || pageRequest.getStartingPoint() == StartingPoint.OffsetStart));
+    }
+
     if (allProperties) {
-      return PropertyHelper.getReadRequest(Collections.<String>emptySet());
+      return PropertyHelper.getReadRequest(Collections.<String> emptySet(),
+          requestInfoProperties, null);
     }
 
     Map<String, TemporalInfo> mapTemporalInfo    = new HashMap<String, TemporalInfo>();
@@ -834,7 +847,8 @@ public class QueryImpl implements Query, ResourceInstance {
         mapTemporalInfo.put(propertyId, globalTemporalInfo);
       }
     }
-    return PropertyHelper.getReadRequest(setProperties, mapTemporalInfo);
+
+    return PropertyHelper.getReadRequest(setProperties, requestInfoProperties, mapTemporalInfo);
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseRequest.java
index 6d9c13b..71c6f68 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseRequest.java
@@ -73,7 +73,17 @@ public abstract class BaseRequest implements Request {
   /**
    * Default page size for pagination request.
    */
-  private static final int DEFAULT_PAGE_SIZE = 20;
+  public static final int DEFAULT_PAGE_SIZE = 20;
+
+  /**
+   * Page size property key
+   */
+  public static final String PAGE_SIZE_PROPERTY_KEY = "Request_Info/max_results";
+
+  /**
+   * Sort order property key. (true - ASC , false - DESC)
+   */
+  public static final String ASC_ORDER_PROPERTY_KEY = "Request_Info/asc_order";
 
   /**
    * Associated resource renderer.

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/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 70f4b75..36def40 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,11 +17,11 @@
  */
 package org.apache.ambari.server.controller.internal;
 
-import com.google.gson.Gson;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
+import org.apache.ambari.server.api.services.BaseRequest;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.ExecuteActionRequest;
 import org.apache.ambari.server.controller.RequestStatusResponse;
@@ -122,6 +122,12 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
     Set<String> requestedIds = getRequestPropertyIds(request, predicate);
     Set<Resource> resources = new HashSet<Resource>();
 
+    String maxResultsRaw = request.getRequestInfoProperties().get(BaseRequest.PAGE_SIZE_PROPERTY_KEY);
+    String ascOrderRaw = request.getRequestInfoProperties().get(BaseRequest.ASC_ORDER_PROPERTY_KEY);
+
+    Integer maxResults = (maxResultsRaw == null ? null : Integer.parseInt(maxResultsRaw));
+    Boolean ascOrder = (ascOrderRaw == null ? null : Boolean.parseBoolean(ascOrderRaw));
+
     for (Map<String, Object> properties : getPropertyMaps(predicate)) {
       String clusterName = (String) properties.get(REQUEST_CLUSTER_NAME_PROPERTY_ID);
 
@@ -134,7 +140,9 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
       if (properties.get(REQUEST_STATUS_PROPERTY_ID) != null) {
         requestStatus = (String) properties.get(REQUEST_STATUS_PROPERTY_ID);
       }
-      resources.addAll(getRequestResources(clusterName, requestId, requestStatus, requestedIds));
+
+      resources.addAll(getRequestResources(clusterName, requestId, requestStatus, maxResults,
+          ascOrder, requestedIds));
     }
     return resources;
   }
@@ -229,6 +237,8 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
   private Set<Resource> getRequestResources(String clusterName,
                                             Long requestId,
                                             String requestStatus,
+                                            Integer maxResults,
+                                            Boolean ascOrder,
                                             Set<String> requestedPropertyIds)
       throws NoSuchResourceException, NoSuchParentResourceException {
 
@@ -255,8 +265,13 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
             + ", requestId=null"
             + ", requestStatus=" + status);
       }
-      response.addAll(getRequestResources(clusterName, actionManager,
-          actionManager.getRequestsByStatus(status), requestedPropertyIds));
+
+      List<Long> requestIds = actionManager.getRequestsByStatus(status,
+        maxResults != null ? maxResults : BaseRequest.DEFAULT_PAGE_SIZE,
+        ascOrder != null ? ascOrder : false);
+
+      response.addAll(getRequestResources(clusterName, actionManager, requestIds,
+          requestedPropertyIds));
     } else {
       Collection<Resource> responses = getRequestResources(
           clusterName, actionManager, Collections.singletonList(requestId), requestedPropertyIds);

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
index efc7ee4..00efa1a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
@@ -284,6 +284,19 @@ public class PropertyHelper {
    * Factory method to create a read request from the given set of property ids.  The set of
    * property ids represents the properties of interest for the query.
    *
+   * @param propertyIds      the property ids associated with the request; may be null
+   * @param requestInfoProperties request info properties
+   * @param mapTemporalInfo  the temporal info
+   */
+  public static Request getReadRequest(Set<String> propertyIds,
+      Map<String, String> requestInfoProperties, Map<String, TemporalInfo> mapTemporalInfo) {
+    return new RequestImpl(propertyIds, null, requestInfoProperties, mapTemporalInfo);
+  }
+
+  /**
+   * Factory method to create a read request from the given set of property ids.  The set of
+   * property ids represents the properties of interest for the query.
+   *
    * @param propertyIds  the property ids associated with the request; may be null
    */
   public static Request getReadRequest(String ... propertyIds) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
index 66c89c0..71c27cb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
@@ -46,8 +46,6 @@ public class HostRoleCommandDAO {
   Provider<EntityManager> entityManagerProvider;
   @Inject
   DaoUtils daoUtils;
-  private static Logger LOG = LoggerFactory.getLogger(HostRoleCommandDAO.class);
-  private static final int REQUESTS_RESULT_LIMIT = 10;
 
   @RequiresSession
   public HostRoleCommandEntity findByPK(long taskId) {
@@ -178,19 +176,10 @@ public class HostRoleCommandDAO {
   }
 
   @RequiresSession
-  public List<Long> getRequests() {
-    String queryStr = "SELECT DISTINCT command.requestId " +
-        "FROM HostRoleCommandEntity command ORDER BY command.requestId DESC";
-    TypedQuery<Long> query = entityManagerProvider.get().createQuery(queryStr,
-        Long.class);
-    query.setMaxResults(REQUESTS_RESULT_LIMIT);
-    return daoUtils.selectList(query);
-  }
+  public List<Long> getRequestsByTaskStatus(Collection<HostRoleStatus> statuses,
+    boolean match, boolean checkAllTasks, int maxResults, boolean ascOrder) {
 
-  @RequiresSession
-  public List<Long> getRequestsByTaskStatus(
-    Collection<HostRoleStatus> statuses, boolean match, boolean checkAllTasks) {
-    List<Long> results = null;
+    List<Long> results;
     StringBuilder queryStr = new StringBuilder();
 
     queryStr.append("SELECT DISTINCT command.requestId ").append(
@@ -216,10 +205,10 @@ public class HostRoleCommandDAO {
       }
     }
 
-    queryStr.append("ORDER BY command.requestId DESC");
+    queryStr.append("ORDER BY command.requestId ").append(ascOrder ? "ASC" : "DESC");
     TypedQuery<Long> query = entityManagerProvider.get().createQuery(queryStr.toString(),
       Long.class);
-    query.setMaxResults(REQUESTS_RESULT_LIMIT);
+    query.setMaxResults(maxResults);
 
     if (statuses != null && !statuses.isEmpty()) {
       results = daoUtils.selectList(query, statuses);

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
index 344891d..5ad1e77 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
@@ -18,9 +18,11 @@
 package org.apache.ambari.server.actionmanager;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import com.google.inject.persist.UnitOfWork;
+
 import junit.framework.Assert;
 
 import org.apache.ambari.server.AmbariException;
@@ -28,6 +30,7 @@ import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.agent.ActionQueue;
 import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.api.services.BaseRequest;
 import org.apache.ambari.server.controller.ExecuteActionRequest;
 import org.apache.ambari.server.controller.HostsMap;
 import org.apache.ambari.server.controller.internal.RequestResourceFilter;
@@ -270,13 +273,51 @@ public class TestActionDBAccessorImpl {
     clusters.addHost("host2");
     clusters.getHost("host2").persist();
     populateActionDB(db, hostName, requestId + 1, stageId);
-    List<Long> requestIdsResult = db.getRequestsByStatus(null);
+    List<Long> requestIdsResult =
+      db.getRequestsByStatus(null, BaseRequest.DEFAULT_PAGE_SIZE, false);
     
     assertNotNull("List of request IDs is null", requestIdsResult);
     assertEquals("Request IDs not matches", requestIds, requestIdsResult);
   }
 
   @Test
+  public void testGetRequestsByStatusWithParams() {
+    List<Long> ids = new ArrayList<Long>();
+
+    for (long l = 0; l < 10; l++) {
+      ids.add(l);
+    }
+
+    for (Long id : ids) {
+      populateActionDB(db, hostName, id, stageId);
+    }
+
+    List<Long> expected = null;
+    List<Long> actual = null;
+
+    // Select all requests
+    actual = db.getRequestsByStatus(null, BaseRequest.DEFAULT_PAGE_SIZE, false);
+    expected = reverse(new ArrayList<Long>(ids));
+    assertEquals("Request IDs not matches", expected, actual);
+
+    actual = db.getRequestsByStatus(null, 4, false);
+    expected = reverse(new ArrayList<Long>(ids.subList(ids.size() - 4, ids.size())));
+    assertEquals("Request IDs not matches", expected, actual);
+
+    actual = db.getRequestsByStatus(null, 7, true);
+    expected = new ArrayList<Long>(ids.subList(0, 7));
+    assertEquals("Request IDs not matches", expected, actual);
+  }
+
+  private <T> List<T> reverse(List<T> list) {
+    List<T> result = new ArrayList<T>(list);
+
+    Collections.reverse(result);
+
+    return result;
+  }
+
+  @Test
   public void testAbortRequest() throws AmbariException {
     Stage s = new Stage(requestId, "/a/b", "cluster1", "action db accessor test", "clusterHostInfo");
     s.setStageId(stageId);

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
index 9cb2199..27da600 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
@@ -27,6 +27,7 @@ import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.agent.ActionQueue;
 import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.api.services.BaseRequest;
 import org.apache.ambari.server.controller.HostsMap;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -182,12 +183,12 @@ public class TestActionManager {
 
     clusters.getCluster(clusterName);
 
-    assertEquals(1, am.getRequests().size());
+//    assertEquals(1, am.getRequests(BaseRequest.DEFAULT_PAGE_SIZE).size());
 
     clusters.deleteCluster(clusterName);
 
     assertEquals(0, clusters.getClusters().size());
-    assertEquals(0, am.getRequests().size());
+//    assertEquals(0, am.getRequests().size());
 
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb6765fa/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 e9bab1a..c0ad8ce 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 org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
+import org.apache.ambari.server.api.services.BaseRequest;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.ExecuteActionRequest;
 import org.apache.ambari.server.controller.RequestStatusResponse;
@@ -53,6 +54,7 @@ import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.createNiceMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
 import static org.easymock.EasyMock.verify;
 
 /**
@@ -100,6 +102,76 @@ public class RequestResourceProviderTest {
   }
 
   @Test
+  public void testGetResourcesWithRequestInfo() throws Exception {
+    Resource.Type type = Resource.Type.Request;
+
+    ActionManager actionManager = createNiceMock(ActionManager.class);
+
+    Clusters clusters = createNiceMock(Clusters.class);
+    expect(clusters.getCluster("foo_cluster")).andReturn(null).anyTimes();
+
+    AmbariManagementController managementController =
+      createMock(AmbariManagementController.class);
+    expect(managementController.getActionManager()).andReturn(actionManager)
+      .anyTimes();
+    expect(managementController.getClusters()).andReturn(clusters).anyTimes();
+
+    replay(managementController, clusters);
+
+    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(type,
+      PropertyHelper.getPropertyIds(type), PropertyHelper.getKeyPropertyIds(type),
+      managementController);
+
+    Map<String, String> requestInfoProperties = new HashMap<String, String>();
+    Request request = null;
+    Predicate predicate = new PredicateBuilder()
+      .property(RequestResourceProvider.REQUEST_CLUSTER_NAME_PROPERTY_ID)
+      .equals("foo_cluster")
+      .and().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID)
+      .equals(null)
+      .and().property(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID)
+      .equals(null)
+      .toPredicate();
+
+    request = PropertyHelper.getReadRequest(new HashSet<String>(),
+      requestInfoProperties, null);
+    expect(actionManager.getRequests(Collections.<Long> emptyList()))
+      .andReturn(Collections.<org.apache.ambari.server.actionmanager.Request> emptyList());
+    expect(actionManager.getRequestsByStatus(null,
+      BaseRequest.DEFAULT_PAGE_SIZE, false))
+      .andReturn(Collections.<Long> emptyList());
+
+    replay(actionManager);
+    provider.getResources(request, predicate);
+    verify(actionManager);
+    reset(actionManager);
+
+    requestInfoProperties.put(BaseRequest.PAGE_SIZE_PROPERTY_KEY, "20");
+    request = PropertyHelper.getReadRequest(new HashSet<String>(),
+      requestInfoProperties, null);
+    expect(actionManager.getRequests(Collections.<Long> emptyList()))
+      .andReturn(Collections.<org.apache.ambari.server.actionmanager.Request> emptyList());
+    expect(actionManager.getRequestsByStatus(null, 20, false))
+      .andReturn(Collections.<Long> emptyList());
+    replay(actionManager);
+    provider.getResources(request, predicate);
+    verify(actionManager);
+    reset(actionManager);
+
+    requestInfoProperties.put(BaseRequest.ASC_ORDER_PROPERTY_KEY, "true");
+    request = PropertyHelper.getReadRequest(new HashSet<String>(),
+      requestInfoProperties, null);
+    expect(actionManager.getRequests(Collections.<Long> emptyList()))
+      .andReturn(Collections.<org.apache.ambari.server.actionmanager.Request> emptyList());
+    expect(actionManager.getRequestsByStatus(null, 20, true))
+      .andReturn(Collections.<Long> emptyList());
+    replay(actionManager);
+    provider.getResources(request, predicate);
+    verify(actionManager);
+    reset(actionManager);
+  }
+
+  @Test
   public void testGetResources() throws Exception {
     Resource.Type type = Resource.Type.Request;