summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-07-11 19:02:09 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-07-11 19:02:09 +0530
commite9a60e8c9c81f68fcf6318d5455f0fd012028549 (patch)
treef9a1f1b880b95dfa4b640d4c62520368a842a226 /src
parentc46d6063db71cd34ec6d8c70cdf5cad857f532ba (diff)
parent5451e77260d7bc91c686103b0878e18f6ebc9343 (diff)
Merge branch 'work'
Diffstat (limited to 'src')
-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/views/NavigationView.java19
2 files changed, 20 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 05ff88e9..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);
}
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());
}
};
};