diff options
author | Dhandapani <dhandapani@gluster.com> | 2011-04-21 15:24:30 +0530 |
---|---|---|
committer | Dhandapani <dhandapani@gluster.com> | 2011-04-25 14:24:48 +0530 |
commit | 9d8fdadfeedbd132ab01dd0cdd79f21f52f90a4e (patch) | |
tree | 387453bee4d3581158942f3cf3a20308117943ed /src | |
parent | 1bf13c069eff1230f768bb8611a3e643ff4334f5 (diff) | |
parent | 2f7b2e1e712fe6ff51590b50c3b7215c5c0879f9 (diff) |
Merge branch 'deletevolume'
Diffstat (limited to 'src')
10 files changed, 213 insertions, 51 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java index 807e32a3..e8877321 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java @@ -19,12 +19,12 @@ public abstract class AbstractClient { protected WebResource resource;
private String securityToken;
private String authHeader;
-
+
public AbstractClient() {
URI baseURI = new ClientUtil().getServerBaseURI();
resource = Client.create(new DefaultClientConfig()).resource(baseURI).path(getResourceName());
}
-
+
public AbstractClient(String securityToken) {
this();
setSecurityToken(securityToken);
@@ -93,8 +93,11 @@ public abstract class AbstractClient { /**
* Submits given Form using POST method to the resource and returns the object received as response
- * @param responseClass Class of the object expected as response
- * @param form Form to be submitted
+ *
+ * @param responseClass
+ * Class of the object expected as response
+ * @param form
+ * Form to be submitted
* @return Object of given class received as response
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@@ -105,9 +108,13 @@ public abstract class AbstractClient { /**
* Submits given Form using POST method to the given sub-resource and returns the object received as response
- * @param subResourceName Name of the sub-resource to which the request is to be posted
- * @param responseClass Class of the object expected as response
- * @param form Form to be submitted
+ *
+ * @param subResourceName
+ * Name of the sub-resource to which the request is to be posted
+ * @param responseClass
+ * Class of the object expected as response
+ * @param form
+ * Form to be submitted
* @return Object of given class received as response
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@@ -118,9 +125,13 @@ public abstract class AbstractClient { /**
* Submits given Form using PUT method to the given sub-resource and returns the object received as response
- * @param subResourceName Name of the sub-resource to which the request is to be posted
- * @param responseClass Class of the object expected as response
- * @param form Form to be submitted
+ *
+ * @param subResourceName
+ * Name of the sub-resource to which the request is to be posted
+ * @param responseClass
+ * Class of the object expected as response
+ * @param form
+ * Form to be submitted
* @return Object of given class received as response
*/
protected Object putRequest(String subResourceName, Class responseClass, Form form) {
@@ -130,8 +141,11 @@ public abstract class AbstractClient { /**
* Submits given Form using PUT method to the given sub-resource and returns the object received as response
- * @param subResourceName Name of the sub-resource to which the request is to be posted
- * @param responseClass Class of the object expected as response
+ *
+ * @param subResourceName
+ * Name of the sub-resource to which the request is to be posted
+ * @param responseClass
+ * Class of the object expected as response
* @return Object of given class received as response
*/
protected Object putRequest(String subResourceName, Class responseClass) {
@@ -141,8 +155,11 @@ public abstract class AbstractClient { /**
* Submits given object to the resource and returns the object received as response
- * @param responseClass Class of the object expected as response
- * @param requestObject the Object to be submitted
+ *
+ * @param responseClass
+ * Class of the object expected as response
+ * @param requestObject
+ * the Object to be submitted
* @return Object of given class received as response
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@@ -151,6 +168,18 @@ public abstract class AbstractClient { .post(responseClass, requestObject);
}
+ @SuppressWarnings("unchecked")
+ protected Object deleteResource(Class responseClass, Form form) {
+ return resource.header(HTTP_HEADER_AUTH, authHeader).delete(responseClass);
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ protected Object deleteSubResource(String subResourceName, Class responseClass, String volumeName,
+ String deleteOption) {
+ return resource.path(subResourceName).queryParam("volumeName", volumeName)
+ .queryParam("deleteOption", deleteOption).header(HTTP_HEADER_AUTH, authHeader).delete(responseClass);
+ }
+
public abstract String getResourceName();
/**
@@ -161,7 +190,8 @@ public abstract class AbstractClient { }
/**
- * @param securityToken the securityToken to set
+ * @param securityToken
+ * the securityToken to set
*/
protected void setSecurityToken(String securityToken) {
this.securityToken = securityToken;
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java index 2a6f053a..9e031ad3 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java @@ -120,7 +120,6 @@ public class GlusterDataModelManager { initializeGlusterServers(cluster); initializeVolumes(cluster); - initializeAutoDiscoveredServers(cluster); initializeDisks(); @@ -138,8 +137,9 @@ public class GlusterDataModelManager { private void initializeVolumeOptionsDefaults() { VolumeOptionInfoListResponse response = new VolumesClient(getSecurityToken()).getVolumeOptionsDefaults(); - if(!response.getStatus().isSuccess()) { - throw new GlusterRuntimeException("Error fetching volume option defaults: [" + response.getStatus().getMessage() + "]"); + if (!response.getStatus().isSuccess()) { + throw new GlusterRuntimeException("Error fetching volume option defaults: [" + + response.getStatus().getMessage() + "]"); } this.volumeOptionsDefaults = response.getOptions(); } @@ -165,7 +165,7 @@ public class GlusterDataModelManager { private void initializeVolumes(Cluster cluster) { VolumesClient volumeClient = new VolumesClient(securityToken); VolumeListResponse response = volumeClient.getAllVolumes(); - if(!response.getStatus().isSuccess()) { + if (!response.getStatus().isSuccess()) { throw new GlusterRuntimeException("Error fetching volume list: [" + response.getStatus() + "]"); } cluster.setVolumes(response.getVolumes()); @@ -299,8 +299,8 @@ public class GlusterDataModelManager { /* * TODO: review the logic * - * List<Disk> disks = new ArrayList<Disk>(); for (Disk disk : - * volume.getDisks()) { if (disk.isReady()) { disks.add(disk); } } + * List<Disk> disks = new ArrayList<Disk>(); for (Disk disk : volume.getDisks()) { if (disk.isReady()) { + * disks.add(disk); } } */ Disk disk = null; List<Disk> volumeDisks = new ArrayList<Disk>(); @@ -364,23 +364,32 @@ public class GlusterDataModelManager { } } + public void deleteVolume(Volume volume) { + Cluster cluster = model.getCluster(); + cluster.deleteVolume(volume); + + for (ClusterListener listener : listeners) { + listener.volumeDeleted(volume); + } + } + public void updateVolumeStatus(Volume volume, VOLUME_STATUS newStatus) { volume.setStatus(newStatus); for (ClusterListener listener : listeners) { listener.volumeChanged(volume, new Event(EVENT_TYPE.VOLUME_STATUS_CHANGED, newStatus)); } } - + public void resetVolumeOptions(Volume volume) { volume.getOptions().clear(); for (ClusterListener listener : listeners) { listener.volumeChanged(volume, new Event(EVENT_TYPE.VOLUME_OPTIONS_RESET, null)); } } - + public void setVolumeOption(Volume volume, Entry<String, String> entry) { volume.setOption(entry.getKey(), (String) entry.getValue()); - for(ClusterListener listener : listeners) { + for (ClusterListener listener : listeners) { listener.volumeChanged(volume, new Event(EVENT_TYPE.VOLUME_OPTION_SET, entry)); } } @@ -393,25 +402,25 @@ public class GlusterDataModelManager { listener.volumeCreated(volume); } } - + public List<VolumeOptionInfo> getVolumeOptionsDefaults() { return volumeOptionsDefaults; } public VolumeOptionInfo getVolumeOptionInfo(String optionKey) { - for(VolumeOptionInfo info : volumeOptionsDefaults) { - if(info.getName().equals(optionKey)) { + for (VolumeOptionInfo info : volumeOptionsDefaults) { + if (info.getName().equals(optionKey)) { return info; } } throw new GlusterRuntimeException("Invalid option key [" + optionKey + "] passed to GlusterDataModelManager#getVolumeOptionInfo"); } - + public String getVolumeOptionDefaultValue(String optionKey) { return getVolumeOptionInfo(optionKey).getDefaultValue(); } - + public String getVolumeOptionDesc(String optionKey) { return getVolumeOptionInfo(optionKey).getDescription(); } @@ -420,13 +429,14 @@ public class GlusterDataModelManager { volume.setAccessControlList(accessControlList); setVolumeOption(volume, getOptionEntry(volume, Volume.OPTION_AUTH_ALLOW)); } - + private Entry<String, String> getOptionEntry(Volume volume, String optionKey) { - for(Entry entry : volume.getOptions().entrySet()) { - if(entry.getKey().equals(optionKey)) { + for (Entry entry : volume.getOptions().entrySet()) { + if (entry.getKey().equals(optionKey)) { return entry; } } - throw new GlusterRuntimeException("Couldn't find entry for option [" + optionKey + "] on volume [" + volume.getName()); + throw new GlusterRuntimeException("Couldn't find entry for option [" + optionKey + "] on volume [" + + volume.getName()); } } diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java index 1d9ddbff..05b89306 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java @@ -20,12 +20,9 @@ */ package com.gluster.storage.management.client; -import java.util.List; - import com.gluster.storage.management.core.constants.RESTConstants; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.VolumeOptionInfo; import com.gluster.storage.management.core.response.VolumeListResponse; import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse; import com.sun.jersey.api.representation.Form; @@ -78,6 +75,10 @@ public class VolumesClient extends AbstractClient { public Volume getVolume(String volumeName) { return (Volume) fetchSubResource(volumeName, Volume.class); } + + public Status deleteVolume(Volume volume, String deleteOption) { + return (Status) deleteSubResource(volume.getName(), Status.class, volume.getName(), deleteOption); + } public VolumeOptionInfoListResponse getVolumeOptionsDefaults() { return ((VolumeOptionInfoListResponse) fetchSubResource(RESTConstants.SUBRESOURCE_DEFAULT_OPTIONS, diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java index 3fb22ff6..f44b24e5 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java @@ -35,9 +35,11 @@ public class RESTConstants { public static final String FORM_PARAM_VALUE_START = "start"; public static final String FORM_PARAM_VALUE_STOP = "stop"; public static final String FORM_PARAM_OPTION_KEY = "key"; + public static final String FORM_PARAM_VOLUME_NAME = "volumeName"; public static final String FORM_PARAM_OPTION_VALUE = "value"; public static final String PATH_PARAM_VOLUME_NAME = "volumeName"; + public static final String FORM_PARAM_DELETE_OPTION = "value"; public static final String QUERY_PARAM_DISK_NAME = "diskName"; public static final String QUERY_PARAM_LINE_COUNT = "lineCount"; diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java index 1af57266..8d1eb624 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java @@ -54,6 +54,10 @@ public class Cluster extends Entity { discoveredServers.remove(server); } + public void deleteVolume(Volume volume) { + volumes.remove(volume); + } + public void setServers(List<GlusterServer> servers) { this.servers = servers; children.add(new EntityGroup<GlusterServer>("Servers", GlusterServer.class, this, servers)); diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java index ce2752a4..f96116ed 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java @@ -40,4 +40,6 @@ public interface ClusterListener { public void volumeChanged(Volume volume, Event event); public void volumeCreated(Volume volume); + + public void volumeDeleted(Volume volume); } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java index 1a39a014..e226d51b 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java @@ -69,6 +69,11 @@ public class DefaultClusterListener implements ClusterListener { clusterChanged(); } + @Override + public void volumeDeleted(Volume volume) { + clusterChanged(); + } + /** * This method is called by every other event method. Thus, if a view/listener is interested in performing the same * task on any change happening in the cluster data model, it can simply override this method and implement the diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java index 82ac1663..2a213acc 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java @@ -19,15 +19,76 @@ package com.gluster.storage.management.gui.actions; import org.eclipse.jface.action.IAction; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; + +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.client.VolumesClient; +import com.gluster.storage.management.core.model.Status; +import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; +import com.gluster.storage.management.gui.IImageKeys; +import com.gluster.storage.management.gui.utils.GUIHelper; public class DeleteVolumeAction extends AbstractActionDelegate { + private Volume volume; + private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + @Override protected void performAction(IAction action) { - System.out.println("Running [" + this.getClass().getSimpleName() + "]"); + final String actionDesc = action.getDescription(); + + String warningMessage; + if (volume.getStatus() == VOLUME_STATUS.OFFLINE) { + warningMessage = "Are you sure to delete the Volume[" + volume.getName() + "] ?"; + } else { + warningMessage = "Volume [" + volume.getName() + "] is running, \nAre you sure to continue?"; + } + + Integer deleteOption = new MessageDialog(getShell(), "Gluster Storage Platform", GUIHelper.getInstance().getImage( + IImageKeys.SERVER), warningMessage, MessageDialog.INFORMATION, new String[] { "Cancel", + "Delete volume and it's data", "Delete volume, keep back-up of data" }, 2).open(); + if (deleteOption == 0) { + return; + } + + VolumesClient client = new VolumesClient(modelManager.getSecurityToken()); + + Status status; + if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // To stop the volume service, if running + status = client.stopVolume(volume.getName()); + if (!status.isSuccess()) { + showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be stopped! Error: [" + status.getMessage() + + "]"); + return; + } + } + + status = client.deleteVolume(volume, deleteOption.toString()); + if (status.isSuccess()) { + showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] deleted successfully!"); + modelManager.deleteVolume(volume); + } else { + if (status.isPartSuccess()) { + showWarningDialog(actionDesc, "Volume deleted, but following error(s) occured: " + status.getMessage()); + modelManager.deleteVolume(volume); + } else { + showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be deleted! Error: [" + status.getMessage() + + "]"); + } + } } @Override public void dispose() { System.out.println("Disposing [" + this.getClass().getSimpleName() + "]"); } + + @Override + public void selectionChanged(IAction action, ISelection selection) { + super.selectionChanged(action, selection); + if (selectedEntity instanceof Volume) { + volume = (Volume) selectedEntity; + } + } } 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()) { |