summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server
diff options
context:
space:
mode:
authorDhandapani <dhandapani@gluster.com>2011-04-07 10:58:53 +0530
committerDhandapani <dhandapani@gluster.com>2011-04-07 10:58:53 +0530
commit9cc77baa3c96fa74afbb3807dd01525e28638934 (patch)
tree41fa1ccf522fa8a1b103ee0bdefc0014b621d2ab /src/com.gluster.storage.management.server
parent5c39a47fdd3987bb5eee35f7f7397ce127c8919e (diff)
Volume re-export directory creation task in remote servers
Diffstat (limited to 'src/com.gluster.storage.management.server')
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java45
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java22
2 files changed, 62 insertions, 5 deletions
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
index dfa5a5cc..9ac1f9d6 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
@@ -27,7 +27,8 @@ import static com.gluster.storage.management.core.constants.RESTConstants.PATH_P
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_VOLUMES;
import static com.gluster.storage.management.core.constants.RESTConstants.SUBRESOURCE_DEFAULT_OPTIONS;
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
@@ -39,24 +40,46 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import org.springframework.beans.factory.annotation.Autowired;
+
+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.utils.GlusterUtil;
import com.gluster.storage.management.core.utils.ProcessResult;
import com.gluster.storage.management.server.constants.VolumeOptionsDefaults;
+import com.gluster.storage.management.server.utils.ServerUtil;
import com.sun.jersey.spi.resource.Singleton;
@Singleton
@Path(RESOURCE_PATH_VOLUMES)
public class VolumesResource {
+
+ private static final String SCRIPT_NAME = "CreateVolumeExportDirectory.py";
+
+ @Autowired
+ private static ServerUtil serverUtil;
+
private final GlusterUtil glusterUtil = new GlusterUtil();
@POST
@Consumes(MediaType.TEXT_XML)
@Produces(MediaType.TEXT_XML)
public GenericResponse<String> createVolume(Volume volume) {
- ProcessResult response = glusterUtil.createVolume(volume);
+ //Create the directories for the volume
+ List<String> bricks = new ArrayList<String>();
+ for(Disk disk : volume.getDisks()) {
+
+ String brickNotation = getBrickNotation(volume, disk);
+ if (brickNotation != null) {
+ bricks.add(brickNotation);
+ } else {
+ return new GenericResponse<String>(Status.STATUS_FAILURE, "Disk is not mounted properly. Pls mount the disk.");
+ }
+ }
+
+ ProcessResult response = glusterUtil.createVolume(volume, bricks);
if (!response.isSuccess()) {
return new GenericResponse<String>(Status.STATUS_FAILURE, "Volume creation failed: ["
+ response.getOutput() + "]");
@@ -90,4 +113,22 @@ public class VolumesResource {
// whenever such a CLI command is made available in GlusterFS
return new VolumeOptionsDefaults().getDefaults();
}
+
+ private String getBrickNotation(Volume vol, Disk disk) {
+ Status result = serverUtil.executeOnServer(true, disk.getServerName(), "python CreateVolumeExportDirectory.py " + disk + " " + vol.getName());
+
+ if(result.getCode() == 0) {
+ String dirName = "/export/" + disk + "/" + vol.getName() ;
+ return disk.getServerName() + ":" + dirName;
+ } else {
+ return null;
+ // return result.getMessage();
+ }
+
+ }
+
+ public static void main(String args[]) {
+ // Disk disk = null;
+ serverUtil.executeOnServer(true, "localhost", "CreateVolumeExportDirectory.py md0 testvol");
+ }
} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
index b07873f1..b2264ffa 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
@@ -21,6 +21,8 @@
package com.gluster.storage.management.server.utils;
import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
@@ -29,11 +31,15 @@ import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
+import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.utils.ProcessResult;
import com.gluster.storage.management.core.utils.ProcessUtil;
import com.sun.jersey.spi.resource.Singleton;
@@ -69,7 +75,7 @@ public class ServerUtil {
* @param commandWithArgs
* @return Response from remote execution of the command
*/
- public String executeOnServer(boolean runInForeground, String serverName, String commandWithArgs) {
+ public Status executeOnServer(boolean runInForeground, String serverName, String commandWithArgs) {
try {
InetAddress address = InetAddress.getByName(serverName);
Socket connection = new Socket(address, 50000);
@@ -87,7 +93,16 @@ public class ServerUtil {
}
connection.close();
- return output.toString();
+ System.out.println("The ouput string is : " + output.toString());
+ // create JAXB context and instantiate marshaller
+ JAXBContext context = JAXBContext.newInstance(Status.class);
+
+ Unmarshaller um = context.createUnmarshaller();
+ Status result = (Status) um.unmarshal(new ByteArrayInputStream(output.toString().getBytes()));
+
+ return result;
+
+ // return new ProcessResult( 0, output.toString());
} catch (Exception e) {
e.printStackTrace();
}
@@ -95,6 +110,7 @@ public class ServerUtil {
}
public static void main(String args[]) {
- System.out.println(new ServerUtil().executeOnServer(true, "localhost", "ls -lrt"));
+ // CreateVolumeExportDirectory.py md0 testvol
+ System.out.println(new ServerUtil().executeOnServer(true, "localhost", "python CreateVolumeExportDirectory.py md0 testvol").getMessage());
}
} \ No newline at end of file