diff options
Diffstat (limited to 'src/com.gluster.storage.management.server')
2 files changed, 61 insertions, 14 deletions
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java index 0bf781cf..92fba9f3 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java @@ -36,6 +36,7 @@ import java.util.Arrays; import java.util.List; import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; @@ -61,6 +62,7 @@ import com.gluster.storage.management.server.constants.VolumeOptionsDefaults; import com.gluster.storage.management.server.utils.GlusterUtil; import com.gluster.storage.management.server.utils.ServerUtil; import com.sun.jersey.api.core.InjectParam; +import com.sun.jersey.api.representation.Form; import com.sun.jersey.spi.resource.Singleton; @Singleton @@ -101,13 +103,13 @@ public class VolumesResource { status = glusterUtil.createVolume(volume, bricks); if (status.isSuccess()) { Status optionsStatus = glusterUtil.createOptions(volume); - if(!optionsStatus.isSuccess()) { + if (!optionsStatus.isSuccess()) { status.setCode(Status.STATUS_CODE_PART_SUCCESS); status.setMessage("Error while setting volume options: " + optionsStatus); } } else { Status cleanupStatus = cleanupDirectories(disks, volume.getName(), disks.size()); - if(!cleanupStatus.isSuccess()) { + if (!cleanupStatus.isSuccess()) { status.setMessage(status.getMessage() + CoreConstants.NEWLINE + "Cleanup errors: " + CoreConstants.NEWLINE + cleanupStatus); } @@ -138,6 +140,41 @@ public class VolumesResource { return new Status(Status.STATUS_CODE_FAILURE, "Invalid operation code [" + operation + "]"); } + @DELETE + @Path("{" + PATH_PARAM_VOLUME_NAME + "}") + @Produces(MediaType.TEXT_XML) + public Status deleteVolume(@QueryParam("volumeName") String volumeName, @QueryParam("deleteOption") int deleteOption) { + Volume volume = glusterUtil.getVolume(volumeName); + Status status = glusterUtil.deleteVolume(volumeName); + + if (status.isSuccess()) { + List<String> disks = volume.getDisks(); + Status postDeleteStatus = postDelete(volumeName, disks, deleteOption); + + if (!postDeleteStatus.isSuccess()) { + status.setCode(Status.STATUS_CODE_PART_SUCCESS); + status.setMessage("Error while post deletion operation: " + postDeleteStatus); + } + } + return status; + } + + private Status postDelete(String volumeName, List<String> disks, int deleteFlag) { + String serverName, diskName, diskInfo[]; + Status result; + for (int i = 0; i < disks.size(); i++) { + diskInfo = disks.get(i).split(":"); + serverName = diskInfo[0]; + diskName = diskInfo[1]; + result = (Status) serverUtil.executeOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT + " " + + diskName + " " + volumeName + " " + deleteFlag, Status.class); + if (!result.isSuccess()) { + return result; + } + } + return new Status(Status.STATUS_CODE_SUCCESS, "Post volume delete operation successfully initiated"); + } + @POST @Path("{" + PATH_PARAM_VOLUME_NAME + " }/" + SUBRESOURCE_OPTIONS) @Produces(MediaType.TEXT_XML) @@ -175,13 +212,13 @@ public class VolumesResource { for (int i = 0; i < disks.size(); i++) { String disk = disks.get(i); - String[] diskParts = disk.split(":"); + String[] diskParts = disk.split(":"); String serverName = diskParts[0]; String diskName = diskParts[1]; - + status = prepareBrick(serverName, diskName, volumeName); if (status.isSuccess()) { - String brickDir = status.getMessage().trim().replace(CoreConstants.NEWLINE, ""); + String brickDir = status.getMessage().trim().replace(CoreConstants.NEWLINE, ""); bricks.add(serverName + ":" + brickDir); } else { // Brick preparation failed. Cleanup directories already created and return failure status @@ -204,7 +241,7 @@ public class VolumesResource { } return bricksStr.trim(); } - + private Status cleanupDirectories(List<String> disks, String volumeName, int maxIndex) { String serverName, diskName, diskInfo[]; Status result; @@ -271,13 +308,13 @@ public class VolumesResource { return new LogMessageListResponse(Status.STATUS_SUCCESS, logMessages); } - public static void main(String[] args) { + public static void main(String[] args) throws ClassNotFoundException { VolumesResource vr = new VolumesResource(); -// VolumeListResponse response = vr.getAllVolumes(); -// for (Volume volume : response.getVolumes()) { -// System.out.println("\nName:" + volume.getName() + "\nType: " + volume.getVolumeTypeStr() + "\nStatus: " -// + volume.getStatusStr()); -// } + // VolumeListResponse response = vr.getAllVolumes(); + // for (Volume volume : response.getVolumes()) { + // System.out.println("\nName:" + volume.getName() + "\nType: " + volume.getVolumeTypeStr() + "\nStatus: " + // + volume.getStatusStr()); + // } Volume volume = new Volume(); volume.setName("vol3"); volume.setTransportType(TRANSPORT_TYPE.ETHERNET); @@ -285,7 +322,13 @@ public class VolumesResource { disks.add("192.168.1.210:sdb"); volume.addDisks(disks); volume.setAccessControlList("192.168.*"); - Status status = vr.createVolume(volume); - System.out.println(status.getMessage()); + // Status status = vr.createVolume(volume); + // System.out.println(status.getMessage()); + Form form = new Form(); + form.add(RESTConstants.FORM_PARAM_VOLUME_NAME, volume.getName()); + form.add(RESTConstants.FORM_PARAM_DELETE_OPTION, 1); + Status status = vr.deleteVolume("Vol2", 1); + System.out.println("Code : " + status.getCode()); + System.out.println("Message " + status.getMessage()); } } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java index dd72ab86..6a60962f 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java @@ -232,6 +232,10 @@ public class GlusterUtil { return new Status(processUtil.executeCommand(command)); } + public Status deleteVolume(String volumeName) { + return new Status(processUtil.executeCommand("gluster", "--mode=script", "volume", "delete", volumeName)); + } + private String getVolumeInfo(String volumeName) { ProcessResult result = new ProcessUtil().executeCommand("gluster", "volume", "info", volumeName); if (!result.isSuccess()) { |
