diff options
author | Selvasundaram <selvam@gluster.com> | 2011-08-15 20:00:25 +0530 |
---|---|---|
committer | Selvasundaram <selvam@gluster.com> | 2011-08-15 20:00:25 +0530 |
commit | d657b548cad06b5ea99f12a3ca3e6a75f3333233 (patch) | |
tree | 998f64b0b623597cd3887c468ae3a9eb320ac4f3 | |
parent | 24626d10f27ba77056e26554686e2a2fc1d3c6a7 (diff) | |
parent | 1396e04466d5cb940411e2ce20d730e7f6c2f6c6 (diff) |
Merge branch 'bugs'
6 files changed, 175 insertions, 122 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 bc3f4e04..c9ef9281 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 @@ -25,6 +25,8 @@ import java.util.Set; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.console.GlusterDataModelManager; @@ -39,11 +41,11 @@ public class DeleteVolumeAction extends AbstractActionDelegate { private List<Volume> selectedVolumes = new ArrayList<Volume>(); private List<String> selectedVolumeNames = new ArrayList<String>(); private List<String> onlineVolumeNames = new ArrayList<String>(); - + private GUIHelper guiHelper = GUIHelper.getInstance(); + @Override protected void performAction(final IAction action) { final String actionDesc = action.getDescription(); - VolumesClient vc = new VolumesClient(); collectVolumeNames(); String warningMessage; @@ -54,54 +56,62 @@ public class DeleteVolumeAction extends AbstractActionDelegate { warningMessage = "Are you sure to delete the volumes " + selectedVolumeNames + " ?"; } - Integer deleteOption = new MessageDialog(getShell(), "Delete Volume", GUIHelper.getInstance().getImage( + final Integer directoryDeleteOption = new MessageDialog(getShell(), "Delete Volume", GUIHelper.getInstance().getImage( IImageKeys.VOLUME_16x16), warningMessage, MessageDialog.QUESTION, new String[] { "Cancel", "Delete volume and data", "Delete volume, keep data" }, -1).open(); - if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1) + if (directoryDeleteOption <= 0) { // By Cancel button(0) or Escape key(-1) return; } - boolean confirmDelete = (deleteOption == 1) ? true : false; - List<String> deletedVolumeNames = new ArrayList<String>(); - List<String> failedVolumes = new ArrayList<String>(); - String errorMessage = ""; + + BusyIndicator.showWhile(Display.getDefault(), new Runnable() { + @Override + public void run() { + VolumesClient vc = new VolumesClient(); + boolean confirmDeleteDir = (directoryDeleteOption == 1) ? true : false; + List<String> deletedVolumeNames = new ArrayList<String>(); + List<String> failedVolumes = new ArrayList<String>(); + String errorMessage = ""; - for (Volume volume : selectedVolumes.toArray(new Volume[0])) { - try { - if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // stop if online volume - vc.stopVolume(volume.getName()); + for (Volume volume : selectedVolumes.toArray(new Volume[0])) { + try { + guiHelper.setStatusMessage("Deleting volume [" + volume.getName() + "]"); + if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // stop if online volume + vc.stopVolume(volume.getName()); + } + vc.deleteVolume(volume.getName(), confirmDeleteDir); + modelManager.deleteVolume(volume); + deletedVolumeNames.add(volume.getName()); + } catch (Exception e) { + // 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()); + } else { + errorMessage += CoreConstants.NEWLINE + "Volume deleted, but following error occured: [" + + e.getMessage() + "]"; + modelManager.deleteVolume(volume); + deletedVolumeNames.add(volume.getName()); + } + } } - vc.deleteVolume(volume.getName(), confirmDelete); - modelManager.deleteVolume(volume); - deletedVolumeNames.add(volume.getName()); - } catch (Exception e) { - // there is a possibility that the error was in post-delete operation, which means - // volume was deleted, but some other error happened. check if this is the case. - if (vc.volumeExists(volume.getName())) { - errorMessage += CoreConstants.NEWLINE + "[" + volume.getName() + "] : [" + e.getMessage() + "]"; - failedVolumes.add(volume.getName()); + + // 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 { - errorMessage += CoreConstants.NEWLINE + "Volume deleted, but following error occured: [" - + e.getMessage() + "]"; - modelManager.deleteVolume(volume); - deletedVolumeNames.add(volume.getName()); + String info = "Volumes " + deletedVolumeNames + " deleted successfully!"; + if (errorMessage != "") { + info += CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " + failedVolumes + + " could not be deleted! [" + errorMessage + "]"; + } + showInfoDialog(actionDesc, info); } } - } - - // 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 != "") { - info += CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " - + failedVolumes + " could not be deleted! [" - + errorMessage + "]"; - } - showInfoDialog(actionDesc, info); - } + }); + guiHelper.clearStatusMessage(); } private void collectVolumeNames() { diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StartVolumeAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StartVolumeAction.java index c86b66cf..e3324a12 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StartVolumeAction.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StartVolumeAction.java @@ -24,6 +24,8 @@ import java.util.Set; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.console.GlusterDataModelManager; @@ -38,11 +40,11 @@ public class StartVolumeAction extends AbstractActionDelegate { private List<Volume> selectedVolumes = new ArrayList<Volume>(); private List<String> selectedVolumeNames = new ArrayList<String>(); private List<String> offlineVolumeNames = new ArrayList<String>(); + private GUIHelper guiHelper = GUIHelper.getInstance(); @Override protected void performAction(IAction action) { final String actionDesc = action.getDescription(); - VolumesClient vc = new VolumesClient(); collectVolumeNames(); @@ -50,41 +52,55 @@ public class StartVolumeAction extends AbstractActionDelegate { showWarningDialog(actionDesc, "Volumes " + selectedVolumeNames + " already started!"); return; // Volume already started. Don't do anything. } - - List<String> startedVolumes = new ArrayList<String>(); - List<String> failedVolumes = new ArrayList<String>(); - String errorMessage = ""; - - for (Volume volume : selectedVolumes.toArray(new Volume[0])) { - if (volume.getStatus() == VOLUME_STATUS.ONLINE) { - continue; // skip if already started - } - try { - vc.startVolume(volume.getName()); - modelManager.updateVolumeStatus(volume, VOLUME_STATUS.ONLINE); - startedVolumes.add(volume.getName()); - }catch (Exception e) { - failedVolumes.add(volume.getName()); - // If any post volume start activity failed, update the volume status - if (vc.getVolume(volume.getName()).getStatus() == VOLUME_STATUS.ONLINE) { - modelManager.updateVolumeStatus(volume, VOLUME_STATUS.ONLINE); + BusyIndicator.showWhile(Display.getDefault(), new Runnable() { + @Override + public void run() { + VolumesClient vc = new VolumesClient(); + Volume newVolume = new Volume(); + List<String> startedVolumes = new ArrayList<String>(); + List<String> failedVolumes = new ArrayList<String>(); + String errorMessage = ""; + + for (Volume volume : selectedVolumes.toArray(new Volume[0])) { + if (volume.getStatus() == VOLUME_STATUS.ONLINE) { + continue; // skip if already started + } + try { + guiHelper.setStatusMessage("Starting volume [" + volume.getName() + "]"); + vc.startVolume(volume.getName()); + startedVolumes.add(volume.getName()); + } catch (Exception e) { + failedVolumes.add(volume.getName()); + // If any post volume start activity failed, update the volume status + if (vc.getVolume(volume.getName()).getStatus() == VOLUME_STATUS.ONLINE) { + modelManager.updateVolumeStatus(volume, VOLUME_STATUS.ONLINE); + } + errorMessage += e.getMessage(); + } + // Update the model by fetching latest volume info (NOT JUST STATUS) + try { + newVolume = vc.getVolume(volume.getName()); + modelManager.volumeChanged(volume, newVolume); + } catch (Exception e) { + errorMessage += "Updating volume info failed on UI. [" + e.getMessage() + "]"; + } } - errorMessage += e.getMessage(); - } - } - // Display the success or failure info - if (startedVolumes.size() == 0) { // No volume(s) started successfully - showErrorDialog(actionDesc, "Following volumes " + failedVolumes + " could not be start!" - + CoreConstants.NEWLINE + "Error: [" + errorMessage + "]"); - } else { - String info = "Volumes " + startedVolumes + " started successfully!"; - if (errorMessage != "") { - info += CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " + failedVolumes - + " failed to start! [" + errorMessage + "]"; + // Display the success or failure info + if (startedVolumes.size() == 0) { // No volume(s) started successfully + showErrorDialog(actionDesc, "Following volumes " + failedVolumes + " could not be start!" + + CoreConstants.NEWLINE + "Error: [" + errorMessage + "]"); + } else { + String info = "Volumes " + startedVolumes + " started successfully!"; + if (errorMessage != "") { + info += CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " + failedVolumes + + " failed to start! [" + errorMessage + "]"; + } + showInfoDialog(actionDesc, info); + } } - showInfoDialog(actionDesc, info); - } + }); + guiHelper.clearStatusMessage(); } private void collectVolumeNames() { diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StopVolumeAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StopVolumeAction.java index 6e5b4d30..974534c5 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StopVolumeAction.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/StopVolumeAction.java @@ -25,6 +25,8 @@ import java.util.Set; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.console.GlusterDataModelManager; @@ -36,14 +38,14 @@ import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; public class StopVolumeAction extends AbstractActionDelegate { private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); - private List<Volume> volumes = new ArrayList<Volume>(); + private List<Volume> selectedVolumes = new ArrayList<Volume>(); private List<String> selectedVolumeNames = new ArrayList<String>(); private List<String> onlineVolumeNames = new ArrayList<String>(); - + private GUIHelper guiHelper = GUIHelper.getInstance(); + @Override protected void performAction(final IAction action) { final String actionDesc = action.getDescription(); - VolumesClient vc = new VolumesClient(); collectVolumeNames(); @@ -61,46 +63,64 @@ public class StopVolumeAction extends AbstractActionDelegate { return; } - List<String> stoppedVolumes = new ArrayList<String>(); - List<String> failedVolumes = new ArrayList<String>(); - String errorMessage = ""; - - for (Volume volume : volumes.toArray(new Volume[0])) { - if (volume.getStatus() == VOLUME_STATUS.OFFLINE) { - continue; // skip if already stopped - } - try { - vc.stopVolume(volume.getName()); - modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE); - stoppedVolumes.add(volume.getName()); - } catch (Exception e) { - failedVolumes.add(volume.getName()); - // If any post volume stop activity failed, update the volume status - if (vc.getVolume(volume.getName()).getStatus() == VOLUME_STATUS.OFFLINE) { - modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE); + + BusyIndicator.showWhile(Display.getDefault(), new Runnable() { + @Override + public void run() { + VolumesClient vc = new VolumesClient(); + List<String> stoppedVolumes = new ArrayList<String>(); + List<String> failedVolumes = new ArrayList<String>(); + String errorMessage = ""; + + Volume newVolume = new Volume(); + + for (Volume volume : selectedVolumes.toArray(new Volume[0])) { + if (volume.getStatus() == VOLUME_STATUS.OFFLINE) { + continue; // skip if already stopped + } + try { + guiHelper.setStatusMessage("Stopping volume [" + volume.getName() + "]"); + vc.stopVolume(volume.getName()); + // modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE); + stoppedVolumes.add(volume.getName()); + } catch (Exception e) { + failedVolumes.add(volume.getName()); + // If any post volume stop activity failed, update the volume status + if (vc.getVolume(volume.getName()).getStatus() == VOLUME_STATUS.OFFLINE) { + modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE); + } + errorMessage += e.getMessage(); + } + + // Update the model by fetching latest volume info (NOT JUST STATUS) + try { + newVolume = vc.getVolume(volume.getName()); + modelManager.volumeChanged(volume, newVolume); + } catch (Exception e) { + errorMessage += "Failed to update volume info on UI. [" + e.getMessage() + "]"; + } + } + // Display the success or failure info + if (stoppedVolumes.size() == 0) { // No volume(s) stopped successfully + showErrorDialog(actionDesc, "Volumes " + failedVolumes + " could not be stopped! " + + CoreConstants.NEWLINE + "Error: [" + errorMessage + "]"); + } else { + String info = "Volumes " + stoppedVolumes + " stopped successfully!"; + if (errorMessage != "") { + info += CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " + failedVolumes + + " failed to stop! [" + errorMessage + "]"; + } + showInfoDialog(actionDesc, info); } - errorMessage += e.getMessage(); - } - } - - // Display the success or failure info - if (stoppedVolumes.size() == 0) { // No volume(s) stopped successfully - showErrorDialog(actionDesc, "Volumes " + failedVolumes + " could not be stopped! " + CoreConstants.NEWLINE - + "Error: [" + errorMessage + "]"); - } else { - String info = "Volumes " + stoppedVolumes + " stopped successfully!"; - if (errorMessage != "") { - info += CoreConstants.NEWLINE + CoreConstants.NEWLINE + "Volumes " + failedVolumes - + " failed to stop! [" + errorMessage + "]"; } - showInfoDialog(actionDesc, info); - } + }); + guiHelper.clearStatusMessage(); } private void collectVolumeNames() { selectedVolumeNames.clear(); onlineVolumeNames.clear(); - for (Volume volume : volumes) { + for (Volume volume : selectedVolumes) { selectedVolumeNames.add(volume.getName()); if (volume.getStatus() == VOLUME_STATUS.ONLINE) { onlineVolumeNames.add(volume.getName()); @@ -121,21 +141,20 @@ public class StopVolumeAction extends AbstractActionDelegate { */ @Override public void selectionChanged(IAction action, ISelection selection) { - - Set<Volume> selectedVolumes = GUIHelper.getInstance().getSelectedEntities(getWindow(), Volume.class); - volumes.clear(); - if (selectedVolumes == null || selectedVolumes.isEmpty()) { + Set<Volume> selectedVolumeNames = GUIHelper.getInstance().getSelectedEntities(getWindow(), Volume.class); + selectedVolumes.clear(); + if (selectedVolumeNames == null || selectedVolumeNames.isEmpty()) { super.selectionChanged(action, selection); if (selectedEntity instanceof Volume) { - volumes.add((Volume) selectedEntity); + selectedVolumes.add((Volume) selectedEntity); } } else { - volumes.addAll(selectedVolumes); //TODO reverse the collection to maintain the selected order + selectedVolumes.addAll(selectedVolumeNames); //TODO reverse the collection to maintain the selected order } action.setEnabled(false); // To enable the action - for (Volume volume : volumes) { + for (Volume volume : selectedVolumes) { if (volume.getStatus() == VOLUME_STATUS.ONLINE) { action.setEnabled(true); break; // If find an online volume, enable the action diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java index c538e431..5de35000 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java @@ -3,12 +3,10 @@ package com.gluster.storage.management.console.views; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.fieldassist.ControlDecoration; -import org.eclipse.osgi.service.resolver.DisabledInfo; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.custom.CLabel; @@ -111,7 +109,6 @@ public class VolumeSummaryView extends ViewPart { toolbarManager.updateToolbar(volume); cifsCheckbox.setSelection(volume.isCifsEnable()); populateCifsUsersText(); - } @Override @@ -420,11 +417,13 @@ public class VolumeSummaryView extends ViewPart { BusyIndicator.showWhile(Display.getDefault(), new Runnable() { @Override public void run() { + VolumesClient vc = new VolumesClient(); + Volume newVolume = new Volume(); try { - new VolumesClient().setCifsConfig(volume.getName(), cifsCheckbox.getSelection(), cifsUsers); + vc.setCifsConfig(volume.getName(), cifsCheckbox.getSelection(), cifsUsers); enableCifsUsersControls(false); - modelManager.setCifsConfig(volume, cifsCheckbox.getSelection(), - Arrays.asList(cifsUsers.split(","))); + newVolume = vc.getVolume(volume.getName()); + modelManager.volumeChanged(volume, newVolume); } catch (Exception e) { MessageDialog.openError(Display.getDefault().getActiveShell(), "Cifs Configuration", e.getMessage()); diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java index 985c05dd..01d3e7b0 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/VolumesPage.java @@ -32,6 +32,7 @@ import org.eclipse.ui.IWorkbenchSite; import com.gluster.storage.management.console.EntityGroupContentProvider; import com.gluster.storage.management.console.VolumeTableLabelProvider; +import com.gluster.storage.management.console.toolbar.GlusterToolbarManager; import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.model.ClusterListener; import com.gluster.storage.management.core.model.DefaultClusterListener; @@ -42,6 +43,8 @@ import com.gluster.storage.management.core.model.Volume; public class VolumesPage extends AbstractTableViewerPage<Volume> { private List<Volume> volumes; + final GlusterToolbarManager toolbarManager = new GlusterToolbarManager( site.getWorkbenchWindow()); + public enum VOLUME_TABLE_COLUMN_INDICES { NAME, VOLUME_TYPE, NUM_OF_BRICKS, TRANSPORT_TYPE, VOLUME_STATUS }; @@ -83,18 +86,21 @@ public class VolumesPage extends AbstractTableViewerPage<Volume> { public void volumeCreated(Volume volume) { tableViewer.add(volume); parent.update(); + toolbarManager.updateToolbar(volume); } @Override public void volumeDeleted(Volume volume) { tableViewer.remove(volume); parent.update(); + toolbarManager.updateToolbar(volume); } @Override public void volumeChanged(Volume volume, Event event) { tableViewer.update(volume, null); parent.update(); + toolbarManager.updateToolbar(volume); } }; } diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/VolumeService.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/VolumeService.java index 1a7fa38f..69fe01c1 100644 --- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/VolumeService.java +++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/VolumeService.java @@ -750,6 +750,9 @@ public class VolumeService { try { postDelete(volumeName, bricks, deleteFlag); if (volume.isCifsEnable()) { + if (volume.getStatus() == VOLUME_STATUS.ONLINE) { + stopCifsReExport(clusterName, volumeName); + } deleteCifsUsers(clusterName, volumeName); } } catch(Exception e) { |