summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java14
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java8
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java19
3 files changed, 29 insertions, 12 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..4585aca6 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
@@ -568,7 +568,12 @@ public class GlusterDataModelManager {
Cluster cluster = model.getCluster();
cluster.removeServer(server);
- 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.serverRemoved(server);
}
@@ -582,7 +587,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());
}
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java
index f684a0f7..b60bc37b 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java
@@ -39,12 +39,12 @@ import com.gluster.storage.management.core.model.DefaultClusterListener;
import com.gluster.storage.management.core.model.Entity;
import com.gluster.storage.management.core.model.Event;
import com.gluster.storage.management.core.model.GlusterDataModel;
+import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.gui.toolbar.GlusterToolbarManager;
public class NavigationView extends ViewPart implements ISelectionListener {
public static final String ID = NavigationView.class.getName();
- private GlusterDataModel model;
private TreeViewer treeViewer;
private IAdapterFactory adapterFactory = new ClusterAdapterFactory();
private GlusterToolbarManager toolbarManager;
@@ -65,7 +65,7 @@ public class NavigationView extends ViewPart implements ISelectionListener {
}
private void createNavigationTree(Composite parent) {
- model = GlusterDataModelManager.getInstance().getModel();
+ GlusterDataModel model = GlusterDataModelManager.getInstance().getModel();
Platform.getAdapterManager().registerAdapters(adapterFactory, Entity.class);
treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
@@ -95,12 +95,21 @@ public class NavigationView extends ViewPart implements ISelectionListener {
}
}
+ @Override
public void volumeDeleted(Volume volume) {
super.volumeDeleted(volume);
if(volume == entity) {
- // volume deleted was deleted. selected the root element in the tree.
- treeViewer.setSelection(new StructuredSelection(GlusterDataModelManager.getInstance().getModel()
- .getCluster()));
+ // volume selected was deleted. select the root element in the tree.
+ selectEntity(GlusterDataModelManager.getInstance().getModel().getCluster());
+ }
+ }
+
+ @Override
+ public void serverRemoved(GlusterServer server) {
+ super.serverRemoved(server);
+ if(server == entity) {
+ // server selected was removed. select the root element in the tree.
+ selectEntity(GlusterDataModelManager.getInstance().getModel().getCluster());
}
};
};