diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-03-23 19:24:44 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-03-23 19:24:44 +0530 |
| commit | 0766ea8fcf31990d07431521c7fc7db7e1acf762 (patch) | |
| tree | 21274f8d8b96d3404609b215824e3d9a786b75f9 /com.gluster.storage.management.core | |
| parent | e4868a85da0ef3db927314e4d724a305cfbda8ae (diff) | |
Create Volume
Diffstat (limited to 'com.gluster.storage.management.core')
4 files changed, 74 insertions, 0 deletions
diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java index 79a2b80e..65d5ebea 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java @@ -75,6 +75,10 @@ public class Cluster extends Entity { this.volumes = volumes; children.add(new EntityGroup<Volume>("Volumes", Volume.class, this, volumes)); } + + public void addVolume(Volume volume) { + this.volumes.add(volume); + } public Cluster(String name, Entity parent) { super(name, parent); diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java index 85cdd872..ce2752a4 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java @@ -38,4 +38,6 @@ public interface ClusterListener { public void volumeRemoved(Volume volume); public void volumeChanged(Volume volume, Event event); + + public void volumeCreated(Volume volume); } diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java index bf76de43..eb974fd9 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java @@ -55,4 +55,8 @@ public class DefaultClusterListener implements ClusterListener { @Override public void discoveredServerRemoved(Server server) { } + + @Override + public void volumeCreated(Volume volume) { + } } diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java index 81208eff..7e2cfc31 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java @@ -24,8 +24,12 @@ import java.util.ArrayList; import java.util.List; import com.gluster.storage.management.core.constants.CoreConstants; +import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; +import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE; +import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; /** * @@ -131,6 +135,7 @@ public class GlusterUtil { return processUtil.executeCommand("gluster", "peer", "probe", serverName); } + public ProcessResult startVolume(String volumeName) { return processUtil.executeCommand("gluster", "volume", "start", volumeName); } @@ -139,6 +144,65 @@ public class GlusterUtil { return processUtil.executeCommand("gluster", "--mode=script", "volume", "stop", volumeName); } + public ProcessResult createVolume(Volume volume) { + int count=1; // replica or stripe count + String volumeType = null; + VOLUME_TYPE volType = volume.getVolumeType(); + if(volType == VOLUME_TYPE.DISTRIBUTED_MIRROR) { + volumeType = "replica"; + count = 2; + } else if(volType == VOLUME_TYPE.DISTRIBUTED_STRIPE) { + volumeType = "stripe"; + count = 4; + } + + String transportTypeStr = null; + TRANSPORT_TYPE transportType = volume.getTransportType(); + transportTypeStr = (transportType == TRANSPORT_TYPE.ETHERNET) ? "tcp" : "rdma"; + + List<String> command = new ArrayList<String>(); + command.add("gluster"); + command.add("volume"); + command.add("create"); + command.add(volume.getName()); + if(volumeType != null) { + command.add(volumeType); + command.add("" + count); + } + command.add("transport"); + command.add(transportTypeStr); + for(Disk disk : volume.getDisks()) { + command.add(getBrickNotation(volume, disk)); + } + return processUtil.executeCommand(command); + } + + public ProcessResult setOption(List<String> command) { + return processUtil.executeCommand(command); + } + + public ProcessResult setVolumeAccessControl(Volume volume) { + List<String> command = new ArrayList<String>(); + command.add("gluster"); + command.add("volume"); + command.add("set"); + command.add(volume.getName()); + command.add("auth.allow"); + command.add(volume.getAccessControlList()); + return setOption(command); + } + + /** + * @param disk + * @return + */ + private String getBrickNotation(Volume vol, Disk disk) { + // TODO: Figure out an appropriate directory INSIDE the DISK having given NAME (e.g. sda, sdb, etc) + // String dirName = "/export/" + vol.getName() + "/" + disk.getName(); + String dirName = "/export/" + vol.getName() ; + return disk.getServerName() + ":" + dirName; + } + public static void main(String args[]) { List<String> names = new GlusterUtil().getGlusterServerNames(); System.out.println(names); |
