From e6f419d9d4b2bd33c20efa166565306bbbfb7a64 Mon Sep 17 00:00:00 2001 From: Sylvain Boily Date: Wed, 2 Sep 2015 16:34:16 -0400 Subject: [PATCH] Adding new rest API: get Repair Schedule by Keyspace and by Keyspace and Cluster as well as get Clusters associated with a seed host. --- .../reaper/resources/ClusterResource.java | 10 ++++++-- .../resources/RepairScheduleResource.java | 23 +++++++++++++++--- .../com/spotify/reaper/storage/IStorage.java | 4 ++++ .../spotify/reaper/storage/MemoryStorage.java | 24 +++++++++++++++++++ .../reaper/storage/PostgresStorage.java | 18 ++++++++++++++ 5 files changed, 74 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/spotify/reaper/resources/ClusterResource.java b/src/main/java/com/spotify/reaper/resources/ClusterResource.java index 2ee20f752..6129d17a2 100644 --- a/src/main/java/com/spotify/reaper/resources/ClusterResource.java +++ b/src/main/java/com/spotify/reaper/resources/ClusterResource.java @@ -58,12 +58,18 @@ public ClusterResource(AppContext context) { } @GET - public Response getClusterList() { + public Response getClusterList(@QueryParam("seedHost") Optional seedHost) { LOG.debug("get cluster list called"); Collection clusters = context.storage.getClusters(); List clusterNames = new ArrayList<>(); for (Cluster cluster : clusters) { - clusterNames.add(cluster.getName()); + if(seedHost.isPresent()) { + if(cluster.getSeedHosts().contains(seedHost.get())) + clusterNames.add(cluster.getName()); + } + else { + clusterNames.add(cluster.getName()); + } } return Response.ok().entity(clusterNames).build(); } diff --git a/src/main/java/com/spotify/reaper/resources/RepairScheduleResource.java b/src/main/java/com/spotify/reaper/resources/RepairScheduleResource.java index 33bb9bc47..1cf69985a 100644 --- a/src/main/java/com/spotify/reaper/resources/RepairScheduleResource.java +++ b/src/main/java/com/spotify/reaper/resources/RepairScheduleResource.java @@ -277,6 +277,8 @@ public Response getRepairSchedule(@PathParam("id") Long repairScheduleId) { } /** + * @param cluster_name The cluster_name for which the Repair Schedule belongs + * @param keyspace The keyspace for which the Repair Schedule belongs * @return all know repair schedules for a cluster. */ @GET @@ -325,10 +327,11 @@ private URI buildRepairScheduleURI(UriInfo uriInfo, RepairSchedule repairSchedul * @return All schedules in the system. */ @GET - public Response listSchedules() { - LOG.debug("list all repair schedules called"); + public Response listSchedules(@QueryParam("clusterName") Optional clusterName, + @QueryParam("keyspace") Optional keyspaceName) { List scheduleStatuses = Lists.newArrayList(); - Collection schedules = context.storage.getAllRepairSchedules(); + Collection schedules = getScheduleList(clusterName, keyspaceName); + for (RepairSchedule schedule : schedules) { Optional unit = context.storage.getRepairUnit(schedule.getRepairUnitId()); if (unit.isPresent()) { @@ -343,6 +346,20 @@ public Response listSchedules() { return Response.status(Response.Status.OK).entity(scheduleStatuses).build(); } +private Collection getScheduleList(Optional clusterName, Optional keyspaceName) { + Collection schedules; + + if(clusterName.isPresent() && keyspaceName.isPresent()) + schedules = context.storage.getRepairSchedulesForClusterAndKeyspace(clusterName.get(), keyspaceName.get()); + else if (clusterName.isPresent()) + schedules = context.storage.getRepairSchedulesForCluster(clusterName.get()); + else if (keyspaceName.isPresent()) + schedules = context.storage.getRepairSchedulesForKeyspace(keyspaceName.get()); + else + schedules = context.storage.getAllRepairSchedules(); + return schedules; +} + /** * Delete a RepairSchedule object with given id. * diff --git a/src/main/java/com/spotify/reaper/storage/IStorage.java b/src/main/java/com/spotify/reaper/storage/IStorage.java index 5d389ce6d..1057fa402 100644 --- a/src/main/java/com/spotify/reaper/storage/IStorage.java +++ b/src/main/java/com/spotify/reaper/storage/IStorage.java @@ -123,6 +123,10 @@ Optional getRepairUnit(String cluster, String keyspace, Collection getRepairSchedulesForCluster(String clusterName); + Collection getRepairSchedulesForKeyspace(String keyspaceName); + + Collection getRepairSchedulesForClusterAndKeyspace(String clusterName, String keyspaceName); + Collection getAllRepairSchedules(); boolean updateRepairSchedule(RepairSchedule newRepairSchedule); diff --git a/src/main/java/com/spotify/reaper/storage/MemoryStorage.java b/src/main/java/com/spotify/reaper/storage/MemoryStorage.java index ab1ce667d..3656d8ece 100644 --- a/src/main/java/com/spotify/reaper/storage/MemoryStorage.java +++ b/src/main/java/com/spotify/reaper/storage/MemoryStorage.java @@ -354,6 +354,30 @@ public Collection getRepairSchedulesForCluster(String clusterNam } return foundRepairSchedules; } + + @Override + public Collection getRepairSchedulesForKeyspace(String keyspaceName) { + Collection foundRepairSchedules = new ArrayList<>(); + for (RepairSchedule repairSchedule : repairSchedules.values()) { + RepairUnit repairUnit = getRepairUnit(repairSchedule.getRepairUnitId()).get(); + if (repairUnit.getKeyspaceName().equals(keyspaceName)) { + foundRepairSchedules.add(repairSchedule); + } + } + return foundRepairSchedules; + } + + @Override + public Collection getRepairSchedulesForClusterAndKeyspace(String clusterName, String keyspaceName) { + Collection foundRepairSchedules = new ArrayList<>(); + for (RepairSchedule repairSchedule : repairSchedules.values()) { + RepairUnit repairUnit = getRepairUnit(repairSchedule.getRepairUnitId()).get(); + if (repairUnit.getClusterName().equals(clusterName) && repairUnit.getKeyspaceName().equals(keyspaceName)) { + foundRepairSchedules.add(repairSchedule); + } + } + return foundRepairSchedules; + } @Override public Collection getAllRepairSchedules() { diff --git a/src/main/java/com/spotify/reaper/storage/PostgresStorage.java b/src/main/java/com/spotify/reaper/storage/PostgresStorage.java index 50abe25ff..9e6d2222e 100644 --- a/src/main/java/com/spotify/reaper/storage/PostgresStorage.java +++ b/src/main/java/com/spotify/reaper/storage/PostgresStorage.java @@ -421,7 +421,25 @@ public Collection getRepairSchedulesForCluster(String clusterNam } return result; } + + @Override + public Collection getRepairSchedulesForKeyspace(String keyspaceName) { + Collection result; + try (Handle h = jdbi.open()) { + result = getPostgresStorage(h).getRepairSchedulesForKeyspace(keyspaceName); + } + return result; + } + @Override + public Collection getRepairSchedulesForClusterAndKeyspace(String clusterName, String keyspaceName) { + Collection result; + try (Handle h = jdbi.open()) { + result = getPostgresStorage(h).getRepairSchedulesForClusterAndKeySpace(clusterName, keyspaceName); + } + return result; + } + @Override public Collection getAllRepairSchedules() { Collection result;