summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-07-11 18:50:35 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-07-11 18:50:35 +0530
commitc46d6063db71cd34ec6d8c70cdf5cad857f532ba (patch)
treec3c391f6cf62228f04db7827ff0c69f628e0539e
parentf2b7db6ce2fd00a95552391e59785a7ea365f26d (diff)
Task#111 - Auto-refresh of data in views
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java7
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java8
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());
}
}