diff options
Diffstat (limited to 'src')
2 files changed, 9 insertions, 6 deletions
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 ee3667d5..05ff88e9 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 @@ -582,7 +582,12 @@ public class GlusterDataModelManager { Cluster cluster = model.getCluster(); cluster.deleteVolume(volume); - for (ClusterListener listener : listeners) { + // can't use an iterator here. The method AbstractList.Itr#next checks for concurrent modification. + // Since listeners can end up creating new views, which add themselves as listeners, the listeners + // list can be concurrently modified which can result in an exception while using iterator. + // Hence we use List#get instead of the iterator + for(int i = 0; i < listeners.size(); i++) { + ClusterListener listener = listeners.get(i); listener.volumeDeleted(volume); } } 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 0d61b21f..c3607463 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 @@ -18,6 +18,7 @@ *******************************************************************************/ package com.gluster.storage.management.gui.actions; +import org.apache.log4j.Logger; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; @@ -32,6 +33,7 @@ import com.gluster.storage.management.gui.utils.GUIHelper; public class DeleteVolumeAction extends AbstractActionDelegate { private Volume volume; private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + private static final Logger logger = Logger.getLogger(DeleteVolumeAction.class); @Override protected void performAction(final IAction action) { @@ -73,16 +75,12 @@ public class DeleteVolumeAction extends AbstractActionDelegate { showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] deleted successfully!"); modelManager.deleteVolume(volume); } catch (Exception e) { - showErrorDialog(actionDesc, e.getMessage()); - // 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, - // and if so, update the model manager + // volume was deleted, but some other error happened. check if this is the case. if (client.volumeExists(volume.getName())) { showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be deleted! Error: [" + e.getMessage() + "]"); } else { - modelManager.deleteVolume(volume); showWarningDialog(actionDesc, "Volume deleted, but following error(s) occured: " + e.getMessage()); } } |
