summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.client
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-07-06 18:00:42 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-07-07 13:12:00 +0530
commitd84a23a9ee8d9f44dc738824aab63d0ceb32323e (patch)
tree508515b1d8f56bfb8a102fa70bfa926a625fee38 /src/com.gluster.storage.management.client
parent550c02e275f8dac0f2ef08eed351db223719fb1b (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.java45
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) {