summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDhandapani <dhandapani@gluster.com>2011-04-13 13:48:12 +0530
committerDhandapani <dhandapani@gluster.com>2011-04-13 13:48:12 +0530
commit86856e550d8c20b51e1da94a3ca0a3dfed750e06 (patch)
tree40e8766f5931039aa6ab3664d55a562f403acc10 /src
parent5cf991b09c3a04c2d98a2e3e60c6d2797f306038 (diff)
Remote directory creation and directory cleanup script enhanced
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java22
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java88
2 files changed, 75 insertions, 35 deletions
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java
index e880df36..84241624 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java
@@ -25,7 +25,6 @@ import java.util.Set;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.window.Window;
@@ -51,6 +50,7 @@ import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.model.Volume.NAS_PROTOCOL;
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.response.VolumeListResponse;
public class CreateVolumePage1 extends WizardPage {
public static final String PAGE_NAME = "create.volume.page.1";
@@ -114,6 +114,10 @@ public class CreateVolumePage1 extends WizardPage {
setErrorMessage("Please enter Access Control");
}
+ if(volume.getDisks().size() < 1) {
+ setPageComplete(false);
+ setErrorMessage("No disk found");
+ }
// acl validation
String[] aclList = accessControl.split(",");
@@ -286,6 +290,17 @@ public class CreateVolumePage1 extends WizardPage {
return btnStartVolume.getSelection();
}
+ public Boolean isVolumeExist(String volumeName) {
+ List<Volume> volumes = GlusterDataModelManager.getInstance().getModel().getCluster().getVolumes();
+ for (Volume volume : volumes) {
+ if (volume.getName().equals(volumeName)) {
+ setErrorMessage("Volume name already exists.");
+ return false;
+ }
+ }
+ return true;
+ }
+
public Boolean isValidCreateVolumeForm() {
IStructuredSelection selection = (IStructuredSelection)typeComboViewer.getSelection();
if (selection.getFirstElement().equals(VOLUME_TYPE.DISTRIBUTED_MIRROR) && ((int)volume.getDisks().size()) % 2 != 0 ) {
@@ -295,6 +310,11 @@ public class CreateVolumePage1 extends WizardPage {
setErrorMessage("Stripe type volume requires disk in multiples of four");
return false;
}
+
+ if(!isVolumeExist(txtName.getText())) {
+ return false;
+ }
+
return true;
}
}
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 4fe06cc9..c52b1d15 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
@@ -45,6 +45,8 @@ import javax.ws.rs.core.MediaType;
import com.gluster.storage.management.core.constants.RESTConstants;
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.response.GenericResponse;
import com.gluster.storage.management.core.response.VolumeListResponse;
import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse;
import com.gluster.storage.management.core.utils.GlusterUtil;
@@ -56,8 +58,8 @@ import com.sun.jersey.spi.resource.Singleton;
@Singleton
@Path(RESOURCE_PATH_VOLUMES)
public class VolumesResource {
- private static final String PREPARE_BRICK_SCRIPT = "preVolumeCreate.py";
- private static final String VOLUME_DIRECTORY_CLEANUP_SCRIPT = "cleanupVolumeDirectoryCreate.py";
+ private static final String PREPARE_BRICK_SCRIPT = "create_volume_directory.py";
+ private static final String VOLUME_DIRECTORY_CLEANUP_SCRIPT = "clear_volume_directory.py";
@InjectParam
private static ServerUtil serverUtil;
@@ -80,22 +82,21 @@ 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();
- Status result = createDirectory(disks, volume.getName());
- if (result.isSuccess()) {
- List<String> bricks = Arrays.asList(result.getMessage().split(", "));
-
- result = glusterUtil.createVolume(volume, bricks);
- if (!result.isSuccess()) {
- // Perform cleanup on all nodes before returning
+ 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));
+ } else {
cleanupDirectory(disks, volume.getName(), disks.size());
- return result;
}
}
- // Only if volume creation is success, then call the volume set options
- return glusterUtil.createOptions(volume);
+ return result.getStatus();
}
@GET
@@ -140,33 +141,43 @@ 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());
}
- private Status prepareBrick(String disk, String volumeName) {
+ @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 (Status) serverUtil.executeOnServer(true, serverName, PREPARE_BRICK_SCRIPT + " " + volumeName + " "
- + diskName, Status.class);
+ return (GenericResponse) serverUtil.executeOnServer(true, serverName, PREPARE_BRICK_SCRIPT + " " + diskName
+ + " " + volumeName, GenericResponse.class);
}
- @SuppressWarnings("null")
- private Status createDirectory(List<String> disks, String volumeName) {
- List<String> brickNotation = null;
+ @SuppressWarnings({ "rawtypes" })
+ private GenericResponse createDirectory(List<String> disks, String volumeName) {
+ List<String> brickNotation = new ArrayList<String>();
+ GenericResponse response = new GenericResponse();
+
for (int i = 0; i < disks.size(); i++) {
- Status result = prepareBrick(disks.get(i), volumeName);
- if (result.isSuccess()) {
- brickNotation.add(result.getMessage());
+ response = prepareBrick(disks.get(i), volumeName);
+ if (response.getStatus().isSuccess()) {
+ String brick = response.getStatus().getMessage().trim();
+ brick = brick.replace("\n", "");
+ brickNotation.add(disks.get(i).split(":")[0]+ ":" + brick);
} else {
- cleanupDirectory(disks, volumeName, i);
- return new Status(Status.STATUS_CODE_FAILURE, "Error while preparing disk [" + disks.get(i)
- + "] for volume [" + volumeName + "]");
+ Status status = cleanupDirectory(disks, volumeName, i + 1);
+ if (!status.isSuccess()) {
+ response.getStatus().setMessage(response.getStatus().getMessage() + "\n" + status.getMessage());
+ }
+ return response;
}
+// glusterUtil.printObject(brickNotation); // TODO: debug code
}
- return new Status(Status.STATUS_CODE_SUCCESS, brickNotation.toString());
-
+ response.getStatus().setMessage(brickNotation.toString());
+ return response;
}
private Status cleanupDirectory(List<String> disks, String volumeName, int maxIndex) {
@@ -177,8 +188,8 @@ public class VolumesResource {
diskInfo = disks.get(i).split(":");
serverName = diskInfo[0];
diskName = diskInfo[1];
- result = (Status) serverUtil.executeOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT + " " + volumeName + " "
- + diskName, Status.class);
+ result = (Status) serverUtil.executeOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT + " "
+ + diskName + " " + volumeName, Status.class);
if (!result.isSuccess()) {
return result;
}
@@ -188,10 +199,19 @@ public class VolumesResource {
public static void main(String[] args) {
VolumesResource vr = new VolumesResource();
- VolumeListResponse response = vr.getAllVolumes();
- for (Volume volume : response.getVolumes()) {
- System.out.println("\nName:" + volume.getName() + "\nType: " + volume.getVolumeTypeStr() + "\nStatus: "
- + volume.getStatusStr());
- }
+// VolumeListResponse response = vr.getAllVolumes();
+// for (Volume volume : response.getVolumes()) {
+// System.out.println("\nName:" + volume.getName() + "\nType: " + volume.getVolumeTypeStr() + "\nStatus: "
+// + volume.getStatusStr());
+// }
+ Volume volume = new Volume();
+ volume.setName("vol3");
+ volume.setTransportType(TRANSPORT_TYPE.ETHERNET);
+ List<String> disks = new ArrayList<String>();
+ disks.add("192.168.1.210:sdb");
+ volume.addDisks(disks);
+ volume.setAccessControlList("192.168.*");
+ Status status = vr.createVolume(volume);
+ System.out.println(status.getMessage());
}
}