summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java')
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java67
1 files changed, 48 insertions, 19 deletions
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java
index f5f7d209..d764dcc0 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/DeleteVolumeAction.java
@@ -40,6 +40,9 @@ public class DeleteVolumeAction extends AbstractMonitoredActionDelegate {
private List<Volume> selectedVolumes = new ArrayList<Volume>();
private List<String> selectedVolumeNames = new ArrayList<String>();
private List<String> onlineVolumeNames = new ArrayList<String>();
+ private List<String> deletedVolumeNames = new ArrayList<String>();
+ private List<Volume> failedVolumes = new ArrayList<Volume>();
+ private List<String> failedVolumeNames = new ArrayList<String>();
@Override
protected void performAction(final IAction action, IProgressMonitor monitor) {
@@ -76,18 +79,55 @@ public class DeleteVolumeAction extends AbstractMonitoredActionDelegate {
return;
}
+ String errorMessage = performDeleteVolume(monitor,selectedVolumes, directoryDeleteOption, false);
+
+ // Display the success or failure info
+ if (deletedVolumeNames.size() == 0) { // No volume(s) deleted successfully
+ String message = "volumes " + failedVolumeNames + " could not be delete! " + CoreConstants.NEWLINE
+ + "Error: [" + errorMessage + "]";
+ errorMessage = performForceStopAndDeleteVolume(monitor, actionDesc, failedVolumes, directoryDeleteOption,
+ message);
+ } else {
+ String info = "Volumes " + deletedVolumeNames + " deleted successfully!";
+ if (!errorMessage.equals("")) {
+ String message = info + CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " + failedVolumeNames
+ + " could not be deleted! [" + errorMessage + "]";
+ errorMessage = performForceStopAndDeleteVolume(monitor, actionDesc, failedVolumes,
+ directoryDeleteOption, message);
+ }
+ if (errorMessage.equals("")) {
+ errorMessage = info;
+ }
+ }
+ showInfoDialog(actionDesc, errorMessage);
+ }
+
+ private String performForceStopAndDeleteVolume(IProgressMonitor monitor, String actionDesc, List<Volume> volumesToDelete,
+ Integer directoryDeleteOption, String message) {
+ boolean forceStop = showConfirmDialog(actionDesc, message + CoreConstants.NEWLINE + CoreConstants.NEWLINE
+ + "Do you want to stop forcefully and delete?");
+ if (!forceStop) {
+ return "";
+ }
+ return performDeleteVolume(monitor, volumesToDelete, directoryDeleteOption, true);
+ }
+
+ private String performDeleteVolume(IProgressMonitor monitor, List<Volume> volumeNeedsToDelete,
+ final Integer directoryDeleteOption, Boolean force) {
+ deletedVolumeNames.clear();
+ failedVolumeNames.clear();
+ failedVolumes.clear();
VolumesClient vc = new VolumesClient();
boolean confirmDeleteDir = (directoryDeleteOption == 1) ? true : false;
- List<String> deletedVolumeNames = new ArrayList<String>();
- List<String> failedVolumes = new ArrayList<String>();
+
String errorMessage = "";
- monitor.beginTask("Deleting Selected Volumes...", selectedVolumes.size());
- for (Volume volume : selectedVolumes.toArray(new Volume[0])) {
+ monitor.beginTask("Deleting Selected Volumes...", volumeNeedsToDelete.size());
+ for (Volume volume : volumeNeedsToDelete.toArray(new Volume[0])) {
try {
monitor.setTaskName("Deleting volume [" + volume.getName() + "]");
if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // stop if online volume
- vc.stopVolume(volume.getName(), false);
+ vc.stopVolume(volume.getName(), force);
}
vc.deleteVolume(volume.getName(), confirmDeleteDir);
modelManager.deleteVolume(volume);
@@ -96,7 +136,8 @@ public class DeleteVolumeAction extends AbstractMonitoredActionDelegate {
// Volume delete succeeded and post delete operation (directory cleanup, CIFS etc) may fail
if (vc.volumeExists(volume.getName())) {
errorMessage += CoreConstants.NEWLINE + "[" + volume.getName() + "] : [" + e.getMessage() + "]";
- failedVolumes.add(volume.getName());
+ failedVolumeNames.add(volume.getName());
+ failedVolumes.add(volume);
} else {
errorMessage += CoreConstants.NEWLINE + "Volume deleted, but following error occured: ["
+ e.getMessage() + "]";
@@ -107,19 +148,7 @@ public class DeleteVolumeAction extends AbstractMonitoredActionDelegate {
monitor.worked(1);
}
monitor.done();
-
- // Display the success or failure info
- if (deletedVolumeNames.size() == 0) { // No volume(s) deleted successfully
- showErrorDialog(actionDesc, "volumes " + failedVolumes + " could not be delete! " + CoreConstants.NEWLINE
- + "Error: [" + errorMessage + "]");
- } else {
- String info = "Volumes " + deletedVolumeNames + " deleted successfully!";
- if (!errorMessage.equals("")) {
- info += CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " + failedVolumes
- + " could not be deleted! [" + errorMessage + "]";
- }
- showInfoDialog(actionDesc, info);
- }
+ return errorMessage;
}
private void collectVolumeNames() {