diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-07-06 18:00:42 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-07-07 13:12:00 +0530 |
| commit | d84a23a9ee8d9f44dc738824aab63d0ceb32323e (patch) | |
| tree | 508515b1d8f56bfb8a102fa70bfa926a625fee38 /src/com.gluster.storage.management.client | |
| parent | 550c02e275f8dac0f2ef08eed351db223719fb1b (diff) | |
Task#111 - Auto-refresh of data in views
Diffstat (limited to 'src/com.gluster.storage.management.client')
| -rw-r--r-- | src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java | 45 |
1 files changed, 44 insertions, 1 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 dbb1f46f..8477bc99 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 @@ -19,11 +19,14 @@ package com.gluster.storage.management.client; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.apache.log4j.Logger; + import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Cluster; @@ -53,6 +56,8 @@ public class GlusterDataModelManager { private List<ClusterListener> listeners = new ArrayList<ClusterListener>(); private List<VolumeOptionInfo> volumeOptionsDefaults; private String clusterName; + private static Boolean syncInProgress = false; + private static final Logger logger = Logger.getLogger(GlusterDataModelManager.class); private GlusterDataModelManager() { } @@ -106,13 +111,51 @@ public class GlusterDataModelManager { } public void refreshModel() { - updateModel(fetchData(clusterName)); + synchronized (syncInProgress) { + if(syncInProgress) { + logger.info("Previous data sync is still running. Skipping this one."); + return; + } + syncInProgress = true; + } + + logger.info("Starting data sync"); + try { + updateModel(fetchData(clusterName)); + } catch(Exception e) { + logger.error("Error in data sync!", e); + } finally { + syncInProgress = false; + } } private void updateModel(GlusterDataModel model) { updateVolumes(model); updateGlusterServers(model); updateDiscoveredServers(model); + updateTasks(model); + } + + private void updateTasks(GlusterDataModel newModel) { + List<TaskInfo> oldTasks = model.getCluster().getTaskInfoList(); + List<TaskInfo> newTasks = newModel.getCluster().getTaskInfoList(); + + Set<TaskInfo> addedTasks = GlusterCoreUtil.getAddedEntities(oldTasks, newTasks, true); + for(TaskInfo task : addedTasks) { + addTask(task); + } + + Set<TaskInfo> removedTasks = GlusterCoreUtil.getAddedEntities(newTasks, oldTasks, true); + for(TaskInfo task : removedTasks) { + removeTask(task); + } + + Map<TaskInfo, TaskInfo> modifiedTasks = GlusterCoreUtil.getModifiedEntities(oldTasks, newTasks); + for(Entry<TaskInfo, TaskInfo> entry : modifiedTasks.entrySet()) { + TaskInfo modifiedTask = entry.getKey(); + modifiedTask.copyFrom(entry.getValue()); + updateTask(modifiedTask); + } } private void updateDiscoveredServers(GlusterDataModel newModel) { |
