diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-07-01 20:29:40 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-07-01 20:29:40 +0530 |
| commit | 5cb94f565f49b2a952d941df18507049364a1b6d (patch) | |
| tree | d71bade80bbe496ff564687859c39d20ec93feb3 /src | |
| parent | 2c4ea3418784160bdf4f186b2488e974465161e7 (diff) | |
Task#111 - Auto-refresh of data in views
Diffstat (limited to 'src')
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; } |
