diff --git a/docs/content/operations/api-reference.md b/docs/content/operations/api-reference.md index d933c4f40528..a38be3b0696b 100644 --- a/docs/content/operations/api-reference.md +++ b/docs/content/operations/api-reference.md @@ -378,6 +378,9 @@ Endpoint for submitting tasks and supervisor specs to the overlord. Returns the Shuts down a task. +* `druid/indexer/v1/task/{dataSource}/shutdownAllTasks` + +Shuts down all tasks for a dataSource. ## MiddleManager diff --git a/indexing-service/src/main/java/io/druid/indexing/overlord/http/OverlordResource.java b/indexing-service/src/main/java/io/druid/indexing/overlord/http/OverlordResource.java index 6eb428c46490..3425a87b35a1 100644 --- a/indexing-service/src/main/java/io/druid/indexing/overlord/http/OverlordResource.java +++ b/indexing-service/src/main/java/io/druid/indexing/overlord/http/OverlordResource.java @@ -337,6 +337,28 @@ public Response apply(TaskQueue taskQueue) ); } + @POST + @Path("/task/{dataSource}/shutdownAllTasks") + @Produces(MediaType.APPLICATION_JSON) + public Response shutdownTasksForDataSource(@PathParam("dataSource") final String dataSource) + { + return asLeaderWith( + taskMaster.getTaskQueue(), + new Function() + { + @Override + public Response apply(TaskQueue taskQueue) + { + final List> tasks = taskStorageQueryAdapter.getActiveTaskInfo(dataSource); + for (final TaskInfo task : tasks) { + taskQueue.shutdown(task.getId()); + } + return Response.ok(ImmutableMap.of("dataSource", dataSource)).build(); + } + } + ); + } + @POST @Path("/taskStatus") @Produces(MediaType.APPLICATION_JSON)