summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-04-14 19:16:42 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-04-14 19:16:42 +0530
commit6044ba8846610911dedbce10eecaef4a7d144abd (patch)
tree1441fef647a4414c63ed4cfc0c862d5ecb2baa88 /src/com.gluster.storage.management.server
parente0efe1a6d06870034ca3eef5f50913a0ef6e957a (diff)
Remote directory creation and directory cleanup script enhanced - incorporated review comments
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.java87
1 files changed, 48 insertions, 39 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 11163756..73aa60d8 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
@@ -42,6 +42,7 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
@@ -82,21 +83,28 @@ public class VolumesResource {
@POST
@Consumes(MediaType.TEXT_XML)
@Produces(MediaType.TEXT_XML)
- @SuppressWarnings("rawtypes")
public Status createVolume(Volume volume) {
// Create the directories for the volume
List<String> disks = volume.getDisks();
- GenericResponse result = createDirectory(disks, volume.getName());
- if (result.getStatus().isSuccess()) {
- List<String> bricks = Arrays.asList(result.getStatus().getMessage().split(", "));
- result.setStatus(glusterUtil.createVolume(volume, bricks));
- if (result.getStatus().isSuccess()) {
- result.setStatus(glusterUtil.createOptions(volume));
+ Status status = createDirectories(disks, volume.getName());
+ if (status.isSuccess()) {
+ List<String> bricks = Arrays.asList(status.getMessage().split(" "));
+ status = glusterUtil.createVolume(volume, bricks);
+ if (status.isSuccess()) {
+ Status optionsStatus = glusterUtil.createOptions(volume);
+ if(!optionsStatus.isSuccess()) {
+ status.setCode(Status.STATUS_CODE_PART_SUCCESS);
+ status.setMessage("Error while setting volume options: " + optionsStatus);
+ }
} else {
- cleanupDirectory(disks, volume.getName(), disks.size());
+ Status cleanupStatus = cleanupDirectories(disks, volume.getName(), disks.size());
+ if(!cleanupStatus.isSuccess()) {
+ status.setMessage(status.getMessage() + CoreConstants.NEWLINE + "Cleanup errors: "
+ + CoreConstants.NEWLINE + cleanupStatus);
+ }
}
}
- return result.getStatus();
+ return status;
}
@GET
@@ -141,56 +149,57 @@ public class VolumesResource {
@Path(SUBRESOURCE_DEFAULT_OPTIONS)
@Produces(MediaType.TEXT_XML)
public VolumeOptionInfoListResponse getDefaultOptions() {
- // TODO: Fetch all volume options with their default values from
- // GlusterFS
+ // TODO: Fetch all volume options with their default values from GlusterFS
// whenever such a CLI command is made available in GlusterFS
return new VolumeOptionInfoListResponse(Status.STATUS_SUCCESS, volumeOptionsDefaults.getDefaults());
}
@SuppressWarnings("rawtypes")
- private GenericResponse prepareBrick(String disk, String volumeName) {
- System.out.println("Disk : " + disk);
- String serverName = disk.split(":")[0];
- String diskName = disk.split(":")[1];
- return (GenericResponse) serverUtil.executeOnServer(true, serverName, PREPARE_BRICK_SCRIPT + " " + diskName
- + " " + volumeName, GenericResponse.class);
+ private Status prepareBrick(String serverName, String diskName, String volumeName) {
+ return (Status) ((GenericResponse) serverUtil.executeOnServer(true, serverName, PREPARE_BRICK_SCRIPT + " "
+ + diskName + " " + volumeName, GenericResponse.class)).getStatus();
}
- @SuppressWarnings({ "rawtypes" })
- private GenericResponse createDirectory(List<String> disks, String volumeName) {
- List<String> brickNotation = new ArrayList<String>();
- GenericResponse response = new GenericResponse();
-
+ private Status createDirectories(List<String> disks, String volumeName) {
+ List<String> bricks = new ArrayList<String>();
+ Status status = null;
for (int i = 0; i < disks.size(); i++) {
- response = prepareBrick(disks.get(i), volumeName);
- if (response.getStatus().isSuccess()) {
- String brick = response.getStatus().getMessage().trim().toString().replace("\n", "");
- brickNotation.add(disks.get(i).split(":")[0]+ ":" + brick);
+ String disk = disks.get(i);
+
+ String[] diskParts = disk.split(":");
+ String serverName = diskParts[0];
+ String diskName = diskParts[1];
+
+ status = prepareBrick(serverName, diskName, volumeName);
+ if (status.isSuccess()) {
+ String brickDir = status.getMessage().trim().replace(CoreConstants.NEWLINE, "");
+ bricks.add(serverName + ":" + brickDir);
} else {
- Status status = cleanupDirectory(disks, volumeName, i + 1);
- if (!status.isSuccess()) {
- response.getStatus().setMessage(response.getStatus().getMessage() + "\n" + status.getMessage());
+ // Brick preparation failed. Cleanup directories already created and return failure status
+ Status cleanupStatus = cleanupDirectories(disks, volumeName, i + 1);
+ if (!cleanupStatus.isSuccess()) {
+ // append cleanup error to prepare brick error
+ status.setMessage(status.getMessage() + CoreConstants.NEWLINE + status.getMessage());
}
- return response;
+ return status;
}
}
- response.getStatus().setMessage(constructBrickNotation(brickNotation));
- return response;
+ status.setMessage(bricksAsString(bricks));
+ return status;
}
- private String constructBrickNotation(List<String> bricks) {
- String brick = "";
+ private String bricksAsString(List<String> bricks) {
+ String bricksStr = "";
for (String brickInfo : bricks) {
- brick += brickInfo + " ";
+ bricksStr += brickInfo + " ";
}
- return brick;
+ return bricksStr.trim();
}
- private Status cleanupDirectory(List<String> disks, String volumeName, int maxIndex) {
+ private Status cleanupDirectories(List<String> disks, String volumeName, int maxIndex) {
String serverName, diskName, diskInfo[];
Status result;
for (int i = 0; i < maxIndex; i++) {
- // TODO: Call to delete the volume directory
diskInfo = disks.get(i).split(":");
serverName = diskInfo[0];
diskName = diskInfo[1];
@@ -200,7 +209,7 @@ public class VolumesResource {
return result;
}
}
- return new Status(Status.STATUS_CODE_SUCCESS, "Directories cleanedup...");
+ return new Status(Status.STATUS_CODE_SUCCESS, "Directories cleaned up successfully!");
}
public static void main(String[] args) {