diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-04-07 10:58:53 +0530 |
|---|---|---|
| committer | Dhandapani <dhandapani@gluster.com> | 2011-04-07 10:58:53 +0530 |
| commit | 9cc77baa3c96fa74afbb3807dd01525e28638934 (patch) | |
| tree | 41fa1ccf522fa8a1b103ee0bdefc0014b621d2ab /src/com.gluster.storage.management.server | |
| parent | 5c39a47fdd3987bb5eee35f7f7397ce127c8919e (diff) | |
Volume re-export directory creation task in remote servers
Diffstat (limited to 'src/com.gluster.storage.management.server')
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 |
