summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.client
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-07-01 20:29:40 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-07-04 23:07:24 +0530
commit428b944c60244d4a7dd37fb69ae125272525d7ea (patch)
tree612207c63d8364d5613b17e28a733787d0d9906c /src/com.gluster.storage.management.client
parente8f611c7d7f448e7a815c723f90b2f85d96ae300 (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.java173
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java2
2 files changed, 163 insertions, 12 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 a9c966c3..221651a3 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
@@ -20,6 +20,7 @@ package com.gluster.storage.management.client;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -29,7 +30,6 @@ import com.gluster.storage.management.core.model.Cluster;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.Disk;
import com.gluster.storage.management.core.model.Disk.DISK_STATUS;
-import com.gluster.storage.management.core.model.Entity;
import com.gluster.storage.management.core.model.Event;
import com.gluster.storage.management.core.model.Event.EVENT_TYPE;
import com.gluster.storage.management.core.model.GlusterDataModel;
@@ -111,44 +111,173 @@ public class GlusterDataModelManager {
private void updateModel(GlusterDataModel model) {
updateVolumes(model);
- updateServers(model);
- // TODO: Update other entities like discovered servers
+ updateGlusterServers(model);
+ updateDiscoveredServers(model);
}
- private void updateServers(GlusterDataModel newModel) {
+ private void updateDiscoveredServers(GlusterDataModel newModel) {
+ List<Server> oldServers = model.getCluster().getAutoDiscoveredServers();
+ List<Server> newServers = newModel.getCluster().getAutoDiscoveredServers();
+
+ Set<Server> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
+ for (Server addedServer : addedServers) {
+ addDiscoveredServer(addedServer);
+ }
+
+ Set<Server> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
+ for (Server removedServer : removedServers) {
+ removeDiscoveredServer(removedServer);
+ }
+
+ Map<Server, Server> modifiedServers = GlusterCoreUtil.getModifiedEntities(oldServers, newServers);
+ for(Entry<Server, Server> entry : modifiedServers.entrySet()) {
+ discoveredServerChanged(entry.getKey(), entry.getValue());
+ }
+ }
+
+ private void updateGlusterServers(GlusterDataModel newModel) {
List<GlusterServer> oldServers = model.getCluster().getServers();
List<GlusterServer> newServers = newModel.getCluster().getServers();
- List<GlusterServer> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
+ Set<GlusterServer> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
for (GlusterServer addedServer : addedServers) {
addGlusterServer(addedServer);
}
- List<GlusterServer> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
+ Set<GlusterServer> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
for (GlusterServer removedServer : removedServers) {
removeGlusterServer(removedServer);
}
- // TODO: Refresh "modified" servers
+ Map<GlusterServer, GlusterServer> modifiedServers = GlusterCoreUtil.getModifiedEntities(oldServers, newServers);
+ for(Entry<GlusterServer, GlusterServer> entry : modifiedServers.entrySet()) {
+ glusterServerChanged(entry.getKey(), entry.getValue());
+ }
+ }
+
+ public void glusterServerChanged(GlusterServer oldServer, GlusterServer newServer) {
+ oldServer.copyFrom(newServer);
+ for (ClusterListener listener : listeners) {
+ listener.serverChanged(oldServer, new Event(EVENT_TYPE.GLUSTER_SERVER_CHANGED, newServer));
+ }
+
+ updateDisks(oldServer, oldServer.getDisks(), newServer.getDisks());
+ }
+
+ private void updateDisks(Server server, List<Disk> oldDisks, List<Disk> newDisks) {
+ Set<Disk> addedDisks = GlusterCoreUtil.getAddedEntities(oldDisks, newDisks, false);
+ addDisks(server, addedDisks);
+
+ Set<Disk> removedDisks = GlusterCoreUtil.getAddedEntities(newDisks, oldDisks, false);
+ removeDisks(server, removedDisks);
+
+ Map<Disk, Disk> modifiedDisks = GlusterCoreUtil.getModifiedEntities(oldDisks, newDisks);
+ disksChanged(server, modifiedDisks);
+ }
+
+ private void disksChanged(Server server, Map<Disk, Disk> modifiedDisks) {
+ if(modifiedDisks.size() == 0) {
+ return;
+ }
+
+ for (Entry<Disk, Disk> entry : modifiedDisks.entrySet()) {
+ entry.getKey().copyFrom(entry.getValue());
+ }
+ for (ClusterListener listener : listeners) {
+ if (server instanceof GlusterServer) {
+ listener.serverChanged((GlusterServer) server, new Event(EVENT_TYPE.DISKS_CHANGED, modifiedDisks));
+ } else {
+ listener.discoveredServerChanged(server, new Event(EVENT_TYPE.DISKS_CHANGED, modifiedDisks));
+ }
+ }
+ }
+
+ public void addDisks(Server server, Set<Disk> disks) {
+ if(disks.size() == 0) {
+ return;
+ }
+
+ server.addDisks(disks);
+ for (ClusterListener listener : listeners) {
+ if(server instanceof GlusterServer) {
+ listener.serverChanged((GlusterServer)server, new Event(EVENT_TYPE.DISKS_ADDED, disks));
+ } else {
+ listener.discoveredServerChanged(server, new Event(EVENT_TYPE.DISKS_ADDED, disks));
+ }
+ }
+ }
+
+ public void removeDisks(Server server, Set<Disk> disks) {
+ if(disks.size() == 0) {
+ return;
+ }
+
+ for(Disk disk : disks) {
+ server.removeDisk(disk);
+ }
+
+ for (ClusterListener listener : listeners) {
+ if(server instanceof GlusterServer) {
+ listener.serverChanged((GlusterServer)server, new Event(EVENT_TYPE.DISKS_REMOVED, disks));
+ } else {
+ listener.discoveredServerChanged(server, new Event(EVENT_TYPE.DISKS_REMOVED, disks));
+ }
+ }
}
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);
+ Set<Volume> addedVolumes = GlusterCoreUtil.getAddedEntities(oldVolumes, newVolumes, false);
for (Volume addedVolume : addedVolumes) {
addVolume(addedVolume);
}
- List<Volume> removedVolumes = GlusterCoreUtil.getAddedEntities(newVolumes, oldVolumes, false);
+ Set<Volume> removedVolumes = GlusterCoreUtil.getAddedEntities(newVolumes, oldVolumes, false);
for (Volume removedVolume : removedVolumes) {
deleteVolume(removedVolume);
}
- // TODO: Refresh "modified" volumes
+ Map<Volume, Volume> modifiedVolumes = GlusterCoreUtil.getModifiedEntities(oldVolumes, newVolumes);
+ for(Entry<Volume, Volume> entry : modifiedVolumes.entrySet()) {
+ volumeChanged(entry.getKey(), entry.getValue());
+ }
}
+ private void volumeChanged(Volume oldVolume, Volume newVolume) {
+ oldVolume.copyFrom(newVolume);
+ for (ClusterListener listener : listeners) {
+ listener.volumeChanged(oldVolume, new Event(EVENT_TYPE.VOLUME_CHANGED, newVolume));
+ }
+ updateBricks(oldVolume, oldVolume.getBricks(), newVolume.getBricks());
+ }
+
+ private void updateBricks(Volume volume, List<Brick> oldBricks, List<Brick> newBricks) {
+ Set<Brick> addedBricks = GlusterCoreUtil.getAddedEntities(oldBricks, newBricks, false);
+ addBricks(volume, addedBricks);
+
+ Set<Brick> removedBricks = GlusterCoreUtil.getAddedEntities(newBricks, oldBricks, false);
+ removeBricks(volume, removedBricks);
+
+ Map<Brick, Brick> modifiedBricks = GlusterCoreUtil.getModifiedEntities(oldBricks, newBricks);
+ bricksChanged(volume, modifiedBricks);
+ }
+
+ public void bricksChanged(Volume volume, Map<Brick, Brick> modifiedBricks) {
+ if(modifiedBricks.size() == 0) {
+ return;
+ }
+
+ for(Entry<Brick, Brick> entry : modifiedBricks.entrySet()) {
+ entry.getKey().copyFrom(entry.getValue());
+ }
+
+ for (ClusterListener listener : listeners) {
+ listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_CHANGED, modifiedBricks));
+ }
+ }
+
private void initializeGlusterServers(Cluster cluster) {
cluster.setServers(new GlusterServersClient().getServers());
}
@@ -341,6 +470,14 @@ public class GlusterDataModelManager {
}
}
+ public void discoveredServerChanged(Server oldServer, Server newServer) {
+ oldServer.copyFrom(newServer);
+ for (ClusterListener listener : listeners) {
+ listener.discoveredServerChanged(oldServer, new Event(EVENT_TYPE.DISCOVERED_SERVER_CHANGED, newServer));
+ }
+ updateDisks(oldServer, oldServer.getDisks(), newServer.getDisks());
+ }
+
public void removeDiscoveredServer(String serverName) {
Cluster cluster = model.getCluster();
// TODO: Move auto-discovered servers outside the cluster
@@ -398,13 +535,27 @@ public class GlusterDataModelManager {
}
}
- public void addBricks(Volume volume, List<Brick> bricks) {
+ public void addBricks(Volume volume, Set<Brick> bricks) {
+ if(bricks.size() == 0) {
+ return;
+ }
+
+ volume.addBricks(bricks);
for (ClusterListener listener : listeners) {
listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_ADDED, bricks));
}
}
public void removeBricks(Volume volume, Set<Brick> bricks) {
+ if(bricks.size() == 0) {
+ return;
+ }
+
+ // Remove the bricks from the volume object
+ for (Brick brick : bricks) {
+ volume.removeBrick(brick);
+ }
+
for (ClusterListener listener : listeners) {
listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_REMOVED, bricks));
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
index 2866a8e1..7beb8433 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
@@ -139,7 +139,7 @@ public class VolumesClient extends AbstractClient {
VolumeOptionInfoListResponse.class)).getOptions();
}
- public void addBricks(String volumeName, List<String> brickList) {
+ public void addBricks(String volumeName, Set<String> brickList) {
String bricks = StringUtil.collectionToString(brickList, ",");
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_BRICKS, bricks);