summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-07-01 20:29:40 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-07-01 20:29:40 +0530
commit5cb94f565f49b2a952d941df18507049364a1b6d (patch)
treed71bade80bbe496ff564687859c39d20ec93feb3 /src
parent2c4ea3418784160bdf4f186b2488e974465161e7 (diff)
Task#111 - Auto-refresh of data in views
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java76
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java13
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java1
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java5
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java33
5 files changed, 73 insertions, 55 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 be7a9023..f3feb1cb 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
@@ -105,45 +105,50 @@ public class GlusterDataModelManager {
return model;
}
- public void updateModel(GlusterDataModel model) {
+ public void refreshModel() {
+ updateModel(fetchData(clusterName));
+ }
+
+ private void updateModel(GlusterDataModel model) {
updateVolumes(model);
+ updateServers(model);
+ // TODO: Update other entities like discovered servers
}
- private void updateVolumes(GlusterDataModel model) {
- List<Volume> currentVolumes = this.model.getCluster().getVolumes();
- List<Volume> latestVolumes = model.getCluster().getVolumes();
+ private void updateServers(GlusterDataModel newModel) {
+ List<GlusterServer> oldServers = model.getCluster().getServers();
+ List<GlusterServer> newServers = newModel.getCluster().getServers();
- List<Volume> addedVolumes = getAddedVolumes(currentVolumes, latestVolumes);
- for(ClusterListener listener : listeners) {
- for(Volume addedVolume : addedVolumes) {
- listener.volumeAdded(addedVolume);
- }
+ List<GlusterServer> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
+ for (GlusterServer addedServer : addedServers) {
+ addGlusterServer(addedServer);
}
-
- List<Volume> removedVolumes = getRemovedVolumes(currentVolumes, latestVolumes);
- for(ClusterListener listener : listeners) {
- for(Volume removedVolume : addedVolumes) {
- listener.volumeRemoved(removedVolume);
- }
+
+ List<GlusterServer> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
+ for (GlusterServer removedServer : removedServers) {
+ removeGlusterServer(removedServer);
}
- }
-
- private List<Volume> getRemovedVolumes(List<Volume> currentVolumes, List<Volume> latestVolumes) {
- // TODO Auto-generated method stub
- return null;
+
+ // TODO: Refresh "modified" servers
}
- private List<Volume> getAddedVolumes(List<Volume> currentVolumes, List<Volume> newVolumes) {
- List<Volume> addedVolumes = new ArrayList<Volume>();
- for(Volume newVolume : addedVolumes) {
- if(!GlusterCoreUtil.containsEntity(currentVolumes, newVolume, false)) {
- // current volume list doesn't contain this volume. mark it.
- addedVolumes.add(newVolume);
- }
+ private void updateVolumes(GlusterDataModel newModel) {
+ List<Volume> oldVolumes = model.getCluster().getVolumes();
+ List<Volume> newVolumes = newModel.getCluster().getVolumes();
+
+ List<Volume> addedVolumes = GlusterCoreUtil.getAddedEntities(oldVolumes, newVolumes, false);
+ for (Volume addedVolume : addedVolumes) {
+ addVolume(addedVolume);
}
- return addedVolumes;
+
+ List<Volume> removedVolumes = GlusterCoreUtil.getAddedEntities(newVolumes, oldVolumes, false);
+ for (Volume removedVolume : removedVolumes) {
+ deleteVolume(removedVolume);
+ }
+
+ // TODO: Refresh "modified" volumes
}
-
+
private void initializeGlusterServers(Cluster cluster) {
cluster.setServers(new GlusterServersClient().getServers());
}
@@ -323,6 +328,8 @@ public class GlusterDataModelManager {
for (ClusterListener listener : listeners) {
listener.serverAdded(server);
}
+
+ removeDiscoveredServer(server.getName());
}
public void addDiscoveredServer(Server server) {
@@ -333,6 +340,17 @@ public class GlusterDataModelManager {
listener.discoveredServerAdded(server);;
}
}
+
+ public void removeDiscoveredServer(String serverName) {
+ Cluster cluster = model.getCluster();
+ // TODO: Move auto-discovered servers outside the cluster
+ for(Server server : cluster.getAutoDiscoveredServers()) {
+ if(server.getName().toUpperCase().equals(serverName.toUpperCase())) {
+ removeDiscoveredServer(server);
+ break;
+ }
+ }
+ }
public void removeDiscoveredServer(Server server) {
Cluster cluster = model.getCluster();
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
index 20b652f4..76a7fbfc 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
@@ -53,12 +53,13 @@ public class GlusterCoreUtil {
*
* @param oldEntities
* @param newEntities
+ * @param caseInsensitive If true, the entity name comparison will be done in case insensitive manner
* @return List of entities that are present only in the second argument <code>newEntities</code>
*/
- public static List<Entity> getAddedEntities(List<? extends Entity> oldEntities, List<Entity> newEntities) {
- List<Entity> addedEntities = new ArrayList<Entity>();
- for(Entity newEntity : newEntities) {
- if(!containsEntity(oldEntities, newEntity, false)) {
+ public static <T extends Entity> List<T> getAddedEntities(List<T> oldEntities, List<T> newEntities, boolean caseInsensitive) {
+ List<T> addedEntities = new ArrayList<T>();
+ for(T newEntity : newEntities) {
+ if(!containsEntity(oldEntities, newEntity, caseInsensitive)) {
// old entity list doesn't contain this entity. mark it as new.
addedEntities.add(newEntity);
}
@@ -66,13 +67,13 @@ public class GlusterCoreUtil {
return addedEntities;
}
- public static boolean containsEntity(List<? extends Entity> entityList, Entity searchEntity, boolean caseInsensitive) {
+ public static <T extends Entity> boolean containsEntity(List<T> entityList, Entity searchEntity, boolean caseInsensitive) {
String searchEntityName = searchEntity.getName();
if(caseInsensitive) {
searchEntityName = searchEntityName.toUpperCase();
}
- for(Entity entity : entityList) {
+ for(T entity : entityList) {
String nextEntityName = entity.getName();
if(caseInsensitive) {
nextEntityName = nextEntityName.toUpperCase();
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
index 4d1a87c9..18731632 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
@@ -55,7 +55,6 @@ public class AddServerAction extends AbstractActionDelegate {
try {
glusterServersClient.addServer(server);
- modelManager.removeDiscoveredServer(server);
modelManager.addGlusterServer(glusterServersClient.getGlusterServer(server.getName()));
successServers.add(server);
} catch(Exception e) {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java
index 4a569c50..fe358caa 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java
@@ -20,6 +20,8 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
+import com.gluster.storage.management.client.GlusterDataModelManager;
+
/**
*
*/
@@ -39,7 +41,6 @@ public class RefreshDataAction extends AbstractActionDelegate {
*/
@Override
protected void performAction(IAction action) {
- // TODO Auto-generated method stub
-
+ GlusterDataModelManager.getInstance().refreshModel();
}
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java
index d56cd47c..4f0b04cf 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java
@@ -226,6 +226,10 @@ public class SshUtil {
return conn;
}
+ private boolean wasTerminated(int condition) {
+ return ((condition | ChannelCondition.EXIT_SIGNAL) == condition);
+ }
+
private boolean hasErrors(int condition, Session session) {
return (hasErrorStream(condition) || (exitedGracefully(condition) && exitedWithError(session)));
}
@@ -239,7 +243,7 @@ public class SshUtil {
}
private boolean exitedGracefully(int condition) {
- return (condition == ChannelCondition.EXIT_STATUS);
+ return (condition | ChannelCondition.EXIT_STATUS) == condition;
}
private boolean hasErrorStream(int condition) {
@@ -292,24 +296,19 @@ public class SshUtil {
private ProcessResult prepareProcessResult(Session session, int condition, String output) {
ProcessResult result = null;
- switch(condition) {
- case ChannelCondition.TIMEOUT:
- result = new ProcessResult(ProcessResult.FAILURE, "Command timed out!");
- break;
- case ChannelCondition.EXIT_SIGNAL:
- // terminated
+
+ if (wasTerminated(condition)) {
result = new ProcessResult(ProcessResult.FAILURE, output);
- break;
- default:
- if (hasErrors(condition, session)) {
- Integer exitStatus = session.getExitStatus();
- int statusCode = (exitStatus == null ? ProcessResult.FAILURE : exitStatus);
- result = new ProcessResult(statusCode, output);
- } else {
- result = new ProcessResult(ProcessResult.SUCCESS, output);
- }
- break;
+ } else if (timedOut(condition)) {
+ result = new ProcessResult(ProcessResult.FAILURE, "Command timed out!");
+ } else if (hasErrors(condition, session)) {
+ Integer exitStatus = session.getExitStatus();
+ int statusCode = (exitStatus == null ? ProcessResult.FAILURE : exitStatus);
+ result = new ProcessResult(statusCode, output);
+ } else {
+ result = new ProcessResult(ProcessResult.SUCCESS, output);
}
+
return result;
}