summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.core
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.core
parente8f611c7d7f448e7a815c723f90b2f85d96ae300 (diff)
Task#111 - Auto-refresh of data in views
Diffstat (limited to 'src/com.gluster.storage.management.core')
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java30
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java2
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java40
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java29
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java11
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java49
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java52
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java19
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java69
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java111
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java28
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java55
12 files changed, 302 insertions, 193 deletions
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
index fef8f969..0b330514 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
@@ -19,6 +19,7 @@
package com.gluster.storage.management.core.model;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
import com.gluster.storage.management.core.utils.StringUtil;
@@ -35,6 +36,12 @@ public class Brick extends Entity {
public Brick() {
}
+ @Override
+ @XmlTransient
+ public String getName() {
+ return getQualifiedName();
+ }
+
public BRICK_STATUS getStatus() {
return status;
}
@@ -83,7 +90,7 @@ public class Brick extends Entity {
}
public boolean filter(String filterString, boolean caseSensitive) {
- return StringUtil.filterString(getServerName() + getBrickDirectory() + getDiskName(), filterString,
+ return StringUtil.filterString(getServerName() + getBrickDirectory() + getDiskName() + getStatusStr(), filterString,
caseSensitive);
}
@@ -91,4 +98,25 @@ public class Brick extends Entity {
public String toString() {
return getQualifiedName();
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Brick)) {
+ return false;
+ }
+
+ Brick brick = (Brick)obj;
+ if(getQualifiedName().equals(brick.getQualifiedName()) && getStatus() == brick.getStatus()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void copyFrom(Brick newBrick) {
+ setServerName(newBrick.getServerName());
+ setBrickDirectory(newBrick.getBrickDirectory());
+ setDiskName(newBrick.getDiskName());
+ setStatus(newBrick.getStatus());
+ }
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
index 71de5e23..350c9102 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
@@ -27,6 +27,8 @@ public interface ClusterListener {
public void discoveredServerRemoved(Server server);
+ public void discoveredServerChanged(Server server, Event event);
+
public void serverAdded(GlusterServer server);
public void serverRemoved(GlusterServer server);
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
index d3b0e42e..c530fde4 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
@@ -26,79 +26,83 @@ public class DefaultClusterListener implements ClusterListener {
@Override
public void serverAdded(GlusterServer server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void serverRemoved(GlusterServer server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void serverChanged(GlusterServer server, Event event) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeAdded(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeRemoved(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeChanged(Volume volume, Event event) {
- clusterChanged();
+ modelChanged();
}
@Override
public void discoveredServerAdded(Server server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void discoveredServerRemoved(Server server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeCreated(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeDeleted(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void taskAdded(TaskInfo taskInfo) {
- clusterChanged();
+ modelChanged();
}
@Override
public void taskRemoved(TaskInfo taskInfo) {
- clusterChanged();
+ modelChanged();
}
@Override
public void taskUpdated(TaskInfo taskInfo) {
- clusterChanged();
+ modelChanged();
}
-
+
/**
* This method is called by every other event method. Thus, if a view/listener is interested in performing the same
- * task on any change happening in the cluster data model, it can simply override this method and implement the
- * logic. e.g. A view may simply refresh its tree/table viewer whenever the cluster data model changes.
+ * task on any change happening in the data model, it can simply override this method and implement the
+ * logic. e.g. A view may simply refresh its tree/table viewer whenever the data model changes.
*/
- public void clusterChanged() {
+ public void modelChanged() {
}
-
+
+ @Override
+ public void discoveredServerChanged(Server server, Event event) {
+ modelChanged();
+ }
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java
index a399a03a..ecc3a278 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java
@@ -132,4 +132,31 @@ public class Disk extends Entity {
public String getQualifiedBrickName(String volumeName) {
return getServerName() + ":" + getMountPoint() + File.separator + volumeName;
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Disk)) {
+ return false;
+ }
+ Disk disk = (Disk)obj;
+
+ if (getName().equals(disk.getName()) && getServerName().equals(disk.getServerName())
+ && getMountPoint().equals(disk.getMountPoint()) && getDescription().equals(disk.getDescription())
+ && getStatus() == disk.getStatus() && getSpace() == disk.getSpace()
+ && getSpaceInUse() == disk.getSpaceInUse()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void copyFrom(Disk newDisk) {
+ setName(newDisk.getName());
+ setDescription(newDisk.getDescription());
+ setMountPoint(newDisk.getMountPoint());
+ setServerName(newDisk.getServerName());
+ setStatus(newDisk.getStatus());
+ setSpace(newDisk.getSpace());
+ setSpaceInUse(newDisk.getSpaceInUse());
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java
index 1e172d1c..62f70040 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java
@@ -22,12 +22,17 @@ public class Event {
public enum EVENT_TYPE {
BRICKS_ADDED,
BRICKS_REMOVED,
+ BRICKS_CHANGED,
BRICK_REPLACED,
- NETWORK_INTERFACE_ADDED,
- NETWORK_INTERFACE_REMOVED,
VOLUME_STATUS_CHANGED,
VOLUME_OPTIONS_RESET,
- VOLUME_OPTION_SET
+ VOLUME_OPTION_SET,
+ VOLUME_CHANGED,
+ GLUSTER_SERVER_CHANGED,
+ DISKS_ADDED,
+ DISKS_REMOVED,
+ DISKS_CHANGED,
+ DISCOVERED_SERVER_CHANGED
}
private EVENT_TYPE eventType;
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
index 8324b22d..f2ccc5db 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
@@ -88,7 +88,6 @@ public class GlusterDummyModel {
initializeAutoDiscoveredServers(cluster);
initializeDisks();
addDisksToServers();
- addDisksToVolumes();
addVolumeOptions();
createDummyLogMessages();
@@ -170,27 +169,6 @@ public class GlusterDummyModel {
server5.addDisk(s5db);
}
- private void addDisksToVolumes() {
- volume1.addDisk("server1:sda");
-
- volume2.addDisk("server2:sda");
- volume2.addDisk("server1:sdb");
- volume2.addDisk("server3:sda");
- volume2.addDisk("server4:sda");
-
- volume3.addDisk("server2:sdb");
- volume3.addDisk("server4:sda");
- volume3.addDisk("server5:sda");
-
- volume4.addDisk("server1:sda");
- volume4.addDisk("server3:sda");
- volume4.addDisk("server4:sda");
- volume4.addDisk("server5:sdb");
-
- volume5.addDisk("server2:sda");
- volume5.addDisk("server5:sdb");
- }
-
private void initializeGlusterServers(Cluster cluster) {
List<GlusterServer> servers = new ArrayList<GlusterServer>();
server1 = addGlusterServer(servers, cluster, "Server1", SERVER_STATUS.ONLINE, "eth0", 4, 56.3, 16, 8.4);
@@ -254,33 +232,6 @@ public class GlusterDummyModel {
return null;
}
- public List<Disk> getReadyDisksOfVolume(Volume volume) {
- // List<Disk> disks = new ArrayList<Disk>();
- // for (Disk disk : volume.getDisks()) {
- // if (disk.isReady()) {
- // disks.add(disk);
- // }
- // }
- // return disks;
- Disk disk = null;
- List<Disk> volumeDisks = new ArrayList<Disk>();
- for (String volumeDisk : volume.getDisks()) {
- disk = getVolumeDisk(volumeDisk);
- if (disk != null && disk.isReady()) {
- volumeDisks.add(disk);
- }
- }
- return volumeDisks;
- }
-
- public List<Disk> getReadyDisksOfAllVolumes() {
- List<Disk> disks = new ArrayList<Disk>();
- for (Volume volume : ((Cluster) model.getChildren().get(0)).getVolumes()) {
- disks.addAll(getReadyDisksOfVolume(volume));
- }
- return disks;
- }
-
public List<Disk> getReadyDisksOfAllServers() {
return getReadyDisksOfAllServersExcluding(new ArrayList<Disk>());
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
index a9455f48..d6105f23 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
@@ -33,7 +33,6 @@ public class GlusterServer extends Server {
private String uuid;
private SERVER_STATUS status;
- private Cluster cluster;
public GlusterServer() {
}
@@ -48,12 +47,6 @@ public class GlusterServer extends Server {
setStatus(status);
}
- public GlusterServer(String name, Entity parent, SERVER_STATUS status, int numOfCPUs, double cpuUsage,
- double totalMemory, double memoryInUse, Cluster cluster) {
- this(name, parent, status, numOfCPUs, cpuUsage, totalMemory, memoryInUse);
- setCluster(cluster);
- }
-
public Boolean isOnline() {
return getStatus() == SERVER_STATUS.ONLINE;
}
@@ -78,32 +71,31 @@ public class GlusterServer extends Server {
this.uuid = uuid;
}
-
-// public NetworkInterface getPreferredNetworkInterface() {
-// return preferredNetworkInterface;
-// }
-//
-// public void setPreferredNetworkInterface(NetworkInterface preferredNetworkInterface) {
-// this.preferredNetworkInterface = preferredNetworkInterface;
-// preferredNetworkInterface.setPreferred(true);
-// }
-
-
- @XmlTransient
- public Cluster getCluster() {
- return cluster;
- }
-
- public void setCluster(Cluster cluster) {
- this.cluster = cluster;
- }
-
/**
- * Filter matches if any of the properties name, status and primary/secondary/third
- * DNS contains the filter string
+ * Filter matches if any of the properties name and status contains the filter string
*/
@Override
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getStatusStr(), filterString, caseSensitive);
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof GlusterServer)) {
+ return false;
+ }
+ GlusterServer server = (GlusterServer)obj;
+
+ if(super.equals(server) && getUuid().equals(server.getUuid()) && getStatus() == server.getStatus()){
+ return true;
+ }
+
+ return false;
+ }
+
+ public void copyFrom(GlusterServer server) {
+ super.copyFrom(server);
+ setUuid(server.getUuid());
+ setStatus(server.getStatus());
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
index c0521ef3..181b8e66 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
@@ -92,4 +92,21 @@ public class NetworkInterface extends Entity {
this.speed = speed;
}
-}
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof NetworkInterface)) {
+ return false;
+ }
+
+ NetworkInterface networkInterface = (NetworkInterface) obj;
+ if (getName().equals(networkInterface.getName()) && getHwAddr().equals(networkInterface.getHwAddr())
+ && getIpAddress().equals(networkInterface.getIpAddress())
+ && getDefaultGateway().equals(networkInterface.getDefaultGateway())
+ && getNetMask().equals(networkInterface.getNetMask()) && getSpeed().equals(networkInterface.getSpeed())
+ && getModel().equals(networkInterface.getModel())) {
+ return true;
+ }
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
index 487733c3..9e9212dc 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
@@ -19,17 +19,18 @@
package com.gluster.storage.management.core.model;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
+import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.StringUtil;
@XmlRootElement(name = "server")
public class Server extends Entity {
- private List<NetworkInterface> networkInterfaces = new ArrayList<NetworkInterface>();
private int numOfCPUs;
private double cpuUsage;
private double totalMemory;
@@ -37,6 +38,7 @@ public class Server extends Entity {
private double totalDiskSpace = 0;
private double diskSpaceInUse = 0;
private List<Disk> disks = new ArrayList<Disk>();
+ private List<NetworkInterface> networkInterfaces = new ArrayList<NetworkInterface>();
public Server() {
@@ -143,7 +145,7 @@ public class Server extends Entity {
}
}
- public void addDisks(List<Disk> disks) {
+ public void addDisks(Collection<Disk> disks) {
for (Disk disk : disks) {
addDisk(disk);
}
@@ -184,19 +186,54 @@ public class Server extends Entity {
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getIpAddressesAsString(), filterString, caseSensitive);
}
-
+
+ /**
+ * Note: this method doesn't copy the disks. Clients should write separate code to identify added/removed/modified
+ * disks and update the server disks appropriately.
+ *
+ * @param server
+ */
@SuppressWarnings("unchecked")
public void copyFrom(Server server) {
- this.setName(server.getName());
- this.setParent(server.getParent());
- this.setChildren(( List<Entity>) server.getChildren());
- this.setNetworkInterfaces(server.getNetworkInterfaces());
- this.setNumOfCPUs(server.getNumOfCPUs());
- this.setCpuUsage(server.getCpuUsage());
- this.setTotalMemory(server.getTotalMemory());
- this.setMemoryInUse(server.getMemoryInUse());
- this.setTotalDiskSpace(server.getTotalDiskSpace());
- this.setDiskSpaceInUse(server.getDiskSpaceInUse());
- this.setDisks(server.getDisks());
- }
-}
+ setName(server.getName());
+ setParent(server.getParent());
+ setChildren((List<Entity>) server.getChildren());
+ setNetworkInterfaces(server.getNetworkInterfaces());
+ setNumOfCPUs(server.getNumOfCPUs());
+ setCpuUsage(server.getCpuUsage());
+ setTotalMemory(server.getTotalMemory());
+ setMemoryInUse(server.getMemoryInUse());
+ setTotalDiskSpace(server.getTotalDiskSpace());
+ setDiskSpaceInUse(server.getDiskSpaceInUse());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Server)) {
+ return false;
+ }
+ Server server = (Server)obj;
+
+ if (!(getName().equals(server.getName()) && getNumOfCPUs() == server.getNumOfCPUs()
+ && getCpuUsage() == server.getCpuUsage() && getTotalMemory() == server.getTotalMemory()
+ && getMemoryInUse() == server.getMemoryInUse() && getDisks().size() == server.getDisks().size() && getNetworkInterfaces()
+ .size() == server.getNetworkInterfaces().size())) {
+ return false;
+ }
+
+ for(Disk disk : getDisks()) {
+ if (!disk.equals(GlusterCoreUtil.getEntity(server.getDisks(), disk.getName(), false))) {
+ return false;
+ }
+ }
+
+ for (NetworkInterface networkInterface : getNetworkInterfaces()) {
+ if (!networkInterface.equals(GlusterCoreUtil.getEntity(server.getNetworkInterfaces(),
+ networkInterface.getName(), false))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
index 1d5b2fec..006202fb 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
@@ -20,6 +20,7 @@ package com.gluster.storage.management.core.model;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -30,6 +31,7 @@ import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
+import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.StringUtil;
@XmlRootElement
@@ -62,16 +64,12 @@ public class Volume extends Entity {
private static final String[] STATUS_STR = new String[] { "Online", "Offline" };
private static final String[] NAS_PROTOCOL_STR = new String[] { "Gluster", "NFS" };
- private Cluster cluster;
private VOLUME_TYPE volumeType;
private TRANSPORT_TYPE transportType;
private VOLUME_STATUS status;
private int replicaCount;
private int stripeCount;
private VolumeOptions options = new VolumeOptions();
-
- private double totalDiskSpace = 0;
- private List<String> disks = new ArrayList<String>();
private List<Brick> bricks = new ArrayList<Brick>();
public Volume() {
@@ -105,10 +103,6 @@ public class Volume extends Entity {
return STATUS_STR[getStatus().ordinal()];
}
- public int getNumOfDisks() {
- return disks.size();
- }
-
public int getNumOfBricks() {
return bricks.size();
}
@@ -164,15 +158,6 @@ public class Volume extends Entity {
this.status = status;
}
- @XmlTransient
- public Cluster getCluster() {
- return cluster;
- }
-
- public void setCluster(Cluster cluster) {
- this.cluster = cluster;
- }
-
@XmlElementWrapper(name = "nasProtocols")
@XmlElement(name = "nasProtocol", type=NAS_PROTOCOL.class)
public Set<NAS_PROTOCOL> getNASProtocols() {
@@ -214,38 +199,11 @@ public class Volume extends Entity {
this.options.setOptionsMap(options);
}
- public double getTotalDiskSpace() {
- return totalDiskSpace;
- }
-
- public List<String> getDisks() {
- return disks;
- }
-
- public void addDisk(String disk) {
- disks.add(disk);
- }
-
- public void addDisks(List<String> disks) {
- for (String disk : disks) {
- addDisk(disk);
- }
- }
-
- public void removeDisk(String disk) {
- disks.remove(disk);
- }
-
- public void removeAllDisks() {
- disks.clear();
- totalDiskSpace = 0;
- }
-
public void addBrick(Brick brick) {
bricks.add(brick);
}
- public void addBricks(List<Brick> bricks) {
+ public void addBricks(Collection<Brick> bricks) {
this.bricks.addAll(bricks);
}
@@ -264,11 +222,6 @@ public class Volume extends Entity {
return bricks;
}
- public void setDisks(List<String> disks) {
- removeAllDisks();
- addDisks(disks);
- }
-
public void enableNFS() {
nasProtocols.add(NAS_PROTOCOL.NFS);
}
@@ -284,13 +237,6 @@ public class Volume extends Entity {
setStatus(status);
}
- public Volume(String name, Entity parent, Cluster cluster, VOLUME_TYPE volumeType, TRANSPORT_TYPE transportType,
- VOLUME_STATUS status) {
- this(name, parent, volumeType, transportType, status);
-
- setCluster(cluster);
- }
-
/**
* Filter matches if any of the properties name, volume type, transport type, status and number of disks contains
* the filter string
@@ -298,7 +244,7 @@ public class Volume extends Entity {
@Override
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getVolumeTypeStr() + getTransportTypeStr() + getStatusStr()
- + getNumOfDisks(), filterString, caseSensitive);
+ + getNumOfBricks(), filterString, caseSensitive);
}
public List<String> getBrickDirectories() {
@@ -308,4 +254,51 @@ public class Volume extends Entity {
}
return brickDirectories;
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Volume)) {
+ return false;
+ }
+
+ Volume volume = (Volume)obj;
+
+ if (!(getName().equals(volume.getName()) && getVolumeType() == volume.getVolumeType()
+ && getTransportType() == volume.getTransportType() && getStatus() == volume.getStatus()
+ && getReplicaCount() == volume.getReplicaCount() && getStripeCount() == volume.getStripeCount())
+ && getOptions().equals(volume.getOptions())) {
+ return false;
+ }
+
+ for(NAS_PROTOCOL nasProtocol : getNASProtocols()) {
+ if(!(volume.getNASProtocols().contains(nasProtocol))) {
+ return false;
+ }
+ }
+
+ for (Brick brick : getBricks()) {
+ if (!(brick.equals(GlusterCoreUtil.getEntity(volume.getBricks(), brick.getName(), false)))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Note: this method doesn't copy the bricks. Clients should write separate code to identify added/removed/modified
+ * bricks and update the volume bricks appropriately.
+ *
+ * @param newVolume
+ */
+ public void copyFrom(Volume newVolume) {
+ setName(newVolume.getName());
+ setVolumeType(newVolume.getVolumeType());
+ setTransportType(newVolume.getTransportType());
+ setStatus(newVolume.getStatus());
+ setReplicaCount(newVolume.getReplicaCount());
+ setStripeCount(newVolume.getStripeCount());
+ setNASProtocols(newVolume.getNASProtocols());
+ getOptions().copyFrom(newVolume.getOptions());
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java
index f16dd809..f928c241 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java
@@ -86,4 +86,30 @@ public class VolumeOptions {
public boolean containsKey(String key) {
return optionsMap.containsKey(key);
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof VolumeOptions)) {
+ return false;
+ }
+
+ VolumeOptions options = (VolumeOptions)obj;
+ if(getOptions().size() != options.size()) {
+ return false;
+ }
+
+ for(VolumeOption option : getOptions()) {
+ if(!(option.getValue().equals(options.get(option.getKey())))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public void copyFrom(VolumeOptions options) {
+ for(Entry<String, String> entry : options.entrySet()) {
+ optionsMap.put(entry.getKey(), entry.getValue());
+ }
+ }
+} \ No newline at end of file
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 76a7fbfc..838612be 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
@@ -21,7 +21,10 @@
package com.gluster.storage.management.core.utils;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import com.gluster.storage.management.core.model.Brick;
@@ -48,6 +51,25 @@ public class GlusterCoreUtil {
}
/**
+ * Compares the two entity lists and returns the list of entities from first list that have been modified in the second
+ *
+ * @param oldEntities
+ * @param newEntities
+ * @return List of entities that have been modified
+ */
+ public static <T extends Entity> Map<T, T> getModifiedEntities(List<T> oldEntities, List<T> newEntities) {
+ Map<T, T> modifiedEntities = new HashMap<T, T>();
+ for (T oldEntity : oldEntities) {
+ T newEntity = getEntity(newEntities, oldEntity.getName(), false);
+ if(newEntity != null && !oldEntity.equals(newEntity)) {
+ // old and new entities differ. mark it as modified.
+ modifiedEntities.put(oldEntity, newEntity);
+ }
+ }
+ return modifiedEntities;
+ }
+
+ /**
* Compares the two entity lists and returns the list of entities present only in the second argument
* <code>newEntities</code>
*
@@ -56,10 +78,11 @@ public class GlusterCoreUtil {
* @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 <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)) {
+ public static <T extends Entity> Set<T> getAddedEntities(List<T> oldEntities, List<T> newEntities,
+ boolean caseInsensitive) {
+ Set<T> addedEntities = new HashSet<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);
}
@@ -67,22 +90,26 @@ public class GlusterCoreUtil {
return addedEntities;
}
- public static <T extends Entity> boolean containsEntity(List<T> entityList, Entity searchEntity, boolean caseInsensitive) {
- String searchEntityName = searchEntity.getName();
- if(caseInsensitive) {
+ public static <T extends Entity> boolean containsEntity(List<T> entityList, Entity searchEntity,
+ boolean caseInsensitive) {
+ return getEntity(entityList, searchEntity.getName(), caseInsensitive) != null;
+ }
+
+ public static <T extends Entity> T getEntity(List<T> entityList, String searchEntityName, boolean caseInsensitive) {
+ if (caseInsensitive) {
searchEntityName = searchEntityName.toUpperCase();
}
-
- for(T entity : entityList) {
+
+ for (T entity : entityList) {
String nextEntityName = entity.getName();
- if(caseInsensitive) {
+ if (caseInsensitive) {
nextEntityName = nextEntityName.toUpperCase();
}
- if(nextEntityName.equals(searchEntityName)) {
- return true;
+ if (nextEntityName.equals(searchEntityName)) {
+ return entity;
}
}
-
- return false;
+
+ return null;
}
}