summaryrefslogtreecommitdiffstats
path: root/com.gluster.storage.management.server/src
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-03-18 12:23:38 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-03-18 12:23:38 +0530
commitc606dc633d93da1f22e759e3ad29e7b0291e7ce9 (patch)
tree9011d6bad19e695e63cf335023371f84f562e374 /com.gluster.storage.management.server/src
parente7a0887c7e2f47a757fee4c9d15cc72714e7f8e1 (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.java64
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;
}
}