You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2017/07/22 02:14:45 UTC

[06/10] brooklyn-server git commit: add limit when retrieving tasks

add limit when retrieving tasks


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/36fd318c
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/36fd318c
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/36fd318c

Branch: refs/heads/master
Commit: 36fd318c21a54493042cc985c13efeaeaa91a715
Parents: a6c4e13
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Jul 6 15:49:14 2017 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Jul 6 15:49:14 2017 +0100

----------------------------------------------------------------------
 .../apache/brooklyn/rest/api/ActivityApi.java   | 12 ++++++--
 .../brooklyn/rest/api/ApplicationApi.java       |  9 +++---
 .../org/apache/brooklyn/rest/api/EntityApi.java |  6 ++--
 .../rest/resources/ActivityResource.java        | 30 ++++++++++++++++----
 .../brooklyn/rest/resources/EntityResource.java | 10 ++++---
 5 files changed, 48 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/36fd318c/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ActivityApi.java
----------------------------------------------------------------------
diff --git a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ActivityApi.java b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ActivityApi.java
index 45cd25c..31c4d92 100644
--- a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ActivityApi.java
+++ b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ActivityApi.java
@@ -61,13 +61,21 @@ public interface ActivityApi {
     @GET
     @Path("/{task}/children/recurse")
     @ApiOperation(
-            value = "Fetch all child tasks details as Map<String,TaskSummary> map key == Task ID",
+            value = "Fetch all child tasks and their descendants with details as Map<String,TaskSummary> map key == Task ID",
             response = Map.class)
     @ApiResponses(value = {
             @ApiResponse(code = 404, message = "Could not find task")
     })
     public Map<String,TaskSummary> getAllChildrenAsMap(
-            @ApiParam(value = "Task ID", required = true) @PathParam("task") String taskId);
+            @ApiParam(value = "Task ID", required = true) @PathParam("task") String taskId,
+            @ApiParam(value = "Max number of tasks to include, or -1 for all (default 200)", required = false) 
+            @QueryParam("limit") @DefaultValue("200") int limit,
+            @ApiParam(value = "Max depth to traverse, or -1 for all (default)", required = false) 
+            @QueryParam("maxDepth") @DefaultValue("-1") int maxDepth);
+    
+    /** @deprecated since 0.12.0 use {@link #getAllChildrenAsMap(String, int, int)} with depth -1 */
+    @Deprecated
+    public Map<String,TaskSummary> getAllChildrenAsMap(String taskId);
 
     @GET
     @Path("/{task}/stream/{streamId}")

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/36fd318c/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java
----------------------------------------------------------------------
diff --git a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java
index edfdd7d..d0e4d19 100644
--- a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java
+++ b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java
@@ -18,7 +18,6 @@
  */
 package org.apache.brooklyn.rest.api;
 
-import io.swagger.annotations.Api;
 import java.util.List;
 import java.util.Map;
 
@@ -35,15 +34,15 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import org.apache.brooklyn.rest.domain.ApplicationSpec;
 import org.apache.brooklyn.rest.domain.ApplicationSummary;
-import org.apache.brooklyn.rest.domain.EntitySummary;
 import org.apache.brooklyn.rest.domain.EntityDetail;
+import org.apache.brooklyn.rest.domain.EntitySummary;
 
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
 
 @Path("/applications")
 @Api("Applications")

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/36fd318c/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/EntityApi.java
----------------------------------------------------------------------
diff --git a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/EntityApi.java b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/EntityApi.java
index 7330365..d0788fa 100644
--- a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/EntityApi.java
+++ b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/EntityApi.java
@@ -112,10 +112,12 @@ public interface EntityApi {
     public List<TaskSummary> listTasks(
             @ApiParam(value = "Application ID or name", required = true) @PathParam("application") String applicationId,
             @ApiParam(value = "Entity ID or name", required = true) @PathParam("entity") String entityId,
-            @ApiParam(value = "Whether to include subtasks recursively across different entities", required = false)
+            @ApiParam(value = "Max number of tasks, or -1 for all (default 200)", required = false) 
+            @QueryParam("limit") @DefaultValue("200") int limit,
+            @ApiParam(value = "Whether to include subtasks recursively across different entities (default false)", required = false)
             @QueryParam("recurse") @DefaultValue("false") Boolean recurse);
 
-    /** @deprecated since 0.12.0 use {@link #listTasks(String, String, Boolean)} */
+    /** @deprecated since 0.12.0 use {@link #listTasks(String, String, Integer, Boolean)} */
     @Deprecated
     public List<TaskSummary> listTasks(
         String applicationId,

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/36fd318c/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ActivityResource.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ActivityResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ActivityResource.java
index af49856..2bc90ad 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ActivityResource.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ActivityResource.java
@@ -40,6 +40,7 @@ import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.collections.MutableSet;
 
 import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
@@ -52,10 +53,15 @@ public class ActivityResource extends AbstractBrooklynRestResource implements Ac
         return TaskTransformer.fromTask(ui.getBaseUriBuilder()).apply(t);
     }
 
-    @Override
+    @Override @Deprecated
     public Map<String, TaskSummary> getAllChildrenAsMap(final String taskId) {
+        return getAllChildrenAsMap(taskId, 200, -1);
+    }
+    
+    @Override
+    public Map<String, TaskSummary> getAllChildrenAsMap(final String taskId, final int limit, final int maxDepth) {
         final Task<?> parentTask = findTask(taskId);
-        return getAllDescendantTasks(parentTask);
+        return getAllDescendantTasks(parentTask, limit, maxDepth);
     }
 
     protected Task<?> findTask(final String taskId) {
@@ -67,14 +73,26 @@ public class ActivityResource extends AbstractBrooklynRestResource implements Ac
         return task;
     }
 
-    private LinkedHashMap<String, TaskSummary> getAllDescendantTasks(final Task<?> parentTask) {
+    private LinkedHashMap<String, TaskSummary> getAllDescendantTasks(final Task<?> parentTask, int limit, int maxDepth) {
         final LinkedHashMap<String, TaskSummary> result = Maps.newLinkedHashMap();
         if (!(parentTask instanceof HasTaskChildren)) {
             return result;
         }
-        for (final Task<?> childTask : ((HasTaskChildren) parentTask).getChildren()) {
-            result.put(childTask.getId(), TaskTransformer.fromTask(ui.getBaseUriBuilder()).apply(childTask));
-            result.putAll(getAllDescendantTasks(childTask));
+        Set<Task<?>> nextLayer = MutableSet.copyOf( ((HasTaskChildren) parentTask).getChildren() );
+        outer: while (!nextLayer.isEmpty() && maxDepth-- != 0) {
+            Set<Task<?>> thisLayer = nextLayer;
+            nextLayer = MutableSet.of();
+            for (final Task<?> childTask : thisLayer) {
+                TaskSummary wasThere = result.put(childTask.getId(), TaskTransformer.fromTask(ui.getBaseUriBuilder()).apply(childTask));
+                if (wasThere==null) {
+                    if (limit-- == 0) {
+                        break outer;
+                    }
+                    if (childTask instanceof HasTaskChildren) {
+                        Iterables.addAll(nextLayer, ((HasTaskChildren)childTask).getChildren());
+                    }
+                }
+            }
         }
         return result;
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/36fd318c/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
index 47ec3ee..7007a7f 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
@@ -24,11 +24,9 @@ import static javax.ws.rs.core.Response.Status.ACCEPTED;
 import static org.apache.brooklyn.rest.util.WebResourceUtils.serviceAbsoluteUriBuilder;
 
 import java.net.URI;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
@@ -132,7 +130,8 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti
     }
 
     @Override
-    public List<TaskSummary> listTasks(String applicationId, String entityId, Boolean recurse) {
+    public List<TaskSummary> listTasks(String applicationId, String entityId, int limit, Boolean recurse) {
+        int sizeRemaining = limit;
         Entity entity = brooklyn().getEntity(applicationId, entityId);
         List<Task<?>> tasksToScan = MutableList.copyOf(BrooklynTaskTags.getTasksInEntityContext(mgmt().getExecutionManager(), entity));
         Map<String,Task<?>> tasksLoaded = MutableMap.of();
@@ -140,6 +139,9 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti
         while (!tasksToScan.isEmpty()) {
             Task<?> t = tasksToScan.remove(0);
             if (tasksLoaded.put(t.getId(), t)==null) {
+                if (--sizeRemaining==0) {
+                    break;
+                }
                 if (Boolean.TRUE.equals(recurse)) {
                     if (t instanceof HasTaskChildren) {
                         Iterables.addAll(tasksToScan, ((HasTaskChildren) t).getChildren() );
@@ -153,7 +155,7 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti
     
     @Override @Deprecated
     public List<TaskSummary> listTasks(String applicationId, String entityId) {
-        return listTasks(applicationId, entityId, false);
+        return listTasks(applicationId, entityId, -1, false);
     }
 
     @Override