diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-03-18 12:23:38 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-03-18 12:23:38 +0530 |
| commit | c606dc633d93da1f22e759e3ad29e7b0291e7ce9 (patch) | |
| tree | 9011d6bad19e695e63cf335023371f84f562e374 /com.gluster.storage.management.server/src | |
| parent | e7a0887c7e2f47a757fee4c9d15cc72714e7f8e1 (diff) | |
Create Volume functionality
Diffstat (limited to 'com.gluster.storage.management.server/src')
| -rw-r--r-- | com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java | 64 |
1 files changed, 56 insertions, 8 deletions
diff --git a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java index a6017217..abd4411d 100644 --- a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java +++ b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java @@ -20,30 +20,78 @@ */ package com.gluster.storage.management.server.resources; +import java.util.ArrayList; +import java.util.List; + import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.GenericResponse; import com.gluster.storage.management.core.model.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; import com.gluster.storage.management.core.utils.ProcessResult; import com.gluster.storage.management.core.utils.ProcessUtil; -@Path("/cluster") +@Path("/cluster/volumes") public class VolumesResource { @POST - @Path("/createvolume") - @Consumes(MediaType.APPLICATION_XML) - @Produces(MediaType.APPLICATION_XML) - public GenericResponse createVolume(Volume volume) { - ProcessResult result = new ProcessUtil().executeCommand("create-volume.py"); + @Consumes(MediaType.TEXT_XML) + @Produces(MediaType.TEXT_XML) + public GenericResponse<String> 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)); + } + + ProcessResult result = new ProcessUtil().executeCommand(command); + if (!result.isSuccess()) { - return new GenericResponse(Status.STATUS_FAILURE, "Volume creation failed: [" + result.getOutput() + "]"); + return new GenericResponse<String>(Status.STATUS_FAILURE, "Volume creation failed: [" + result.getOutput() + "]"); } - return new GenericResponse(Status.STATUS_SUCCESS, "Volume created successfully!"); + return new GenericResponse<String>(Status.STATUS_SUCCESS, "Volume created successfully!"); + } + + /** + * @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(); + return disk.getServerName() + ":" + dirName; } } |
