diff options
Diffstat (limited to 'src/com.gluster.storage.management.server')
3 files changed, 50 insertions, 16 deletions
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java index 619e4f55..1430d24f 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java @@ -19,6 +19,7 @@ package com.gluster.storage.management.server.resources.v1_0; import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SERVER_NAME; +import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_FSTYPE; import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME; import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_DISK_NAME; import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_SERVER_NAME; @@ -400,7 +401,8 @@ public class GlusterServersResource extends AbstractServersResource { @Produces(MediaType.APPLICATION_XML) @Path("{" + PATH_PARAM_SERVER_NAME + "}/" + RESOURCE_DISKS + "/{" + PATH_PARAM_DISK_NAME + "}") public Response initializeDisk(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, - @PathParam(PATH_PARAM_SERVER_NAME) String serverName, @PathParam(PATH_PARAM_DISK_NAME) String diskName) { + @PathParam(PATH_PARAM_SERVER_NAME) String serverName, @PathParam(PATH_PARAM_DISK_NAME) String diskName, + @FormParam(FORM_PARAM_FSTYPE) String fsType) { if (clusterName == null || clusterName.isEmpty()) { return badRequestResponse("Cluster name must not be empty!"); @@ -413,8 +415,12 @@ public class GlusterServersResource extends AbstractServersResource { if (diskName == null || diskName.isEmpty()) { return badRequestResponse("Disk name must not be empty!"); } + + if (fsType == null || fsType.isEmpty()) { + return badRequestResponse("FSType must not be empty!"); + } - InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, serverName, diskName); + InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, serverName, diskName, fsType); try { initializeTask.start(); taskResource.addTask(initializeTask); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java index 4592b759..89c8c20f 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java @@ -38,15 +38,17 @@ public class InitializeDiskTask extends Task { private String serverName; private String diskName; + private String fsType; private SshUtil sshUtil = new SshUtil(); private GlusterUtil glusterUtil; - public InitializeDiskTask(ClusterService clusterService, String clusterName, String serverName, String diskName) { + public InitializeDiskTask(ClusterService clusterService, String clusterName, String serverName, String diskName, String fsType) { super(clusterService, clusterName, TASK_TYPE.DISK_FORMAT, diskName, "Initialize disk " + serverName + ":" + diskName, false, false, false); setServerName(serverName); setDiskName(diskName); + setFsType(fsType); } public InitializeDiskTask(ClusterService clusterService, String clusterName, TaskInfo info) { @@ -106,9 +108,17 @@ public class InitializeDiskTask extends Task { } private void startInitializeDisk(String serverName) { - ProcessResult processResult = sshUtil.executeRemote(serverName, INITIALIZE_DISK_SCRIPT + " " + getDiskName()); + ProcessResult processResult = sshUtil.executeRemote(serverName, INITIALIZE_DISK_SCRIPT + " -t " + getFsType() + + " " + getDiskName()); if (processResult.isSuccess()) { getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput()))); + TaskStatus taskStatus = null; + if (fsType.equals("xfs")) { + taskStatus.setPercentageSupported(false); + } else { + taskStatus.setPercentageSupported(true); + } + return; } @@ -143,4 +153,12 @@ public class InitializeDiskTask extends Task { public String getServerName() { return serverName; } + + public void setFsType(String fsType) { + this.fsType = fsType; + } + + public String getFsType() { + return fsType; + } } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java index a24e147c..ec530365 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java @@ -35,6 +35,8 @@ import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Brick.BRICK_STATUS; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; +import com.gluster.storage.management.core.model.InitDiskStatusResponse; +import com.gluster.storage.management.core.model.InitDiskStatusResponse.FORMAT_STATUS; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.TaskStatus; import com.gluster.storage.management.core.model.Volume; @@ -76,6 +78,9 @@ public class GlusterUtil { @Autowired private SshUtil sshUtil; + @Autowired + private ServerUtil serverUtil; + @InjectParam private TasksResource taskResource; @@ -574,21 +579,26 @@ public class GlusterUtil { } public TaskStatus checkInitializeDiskStatus(String serverName, String diskName) { - ProcessResult processResult = sshUtil.executeRemote(serverName, INITIALIZE_DISK_STATUS_SCRIPT + " " + diskName); + Object response = serverUtil.executeOnServer(true, serverName, INITIALIZE_DISK_STATUS_SCRIPT + " " + diskName, + InitDiskStatusResponse.class); + TaskStatus taskStatus = new TaskStatus(); - if (processResult.isSuccess()) { - // TODO: Message needs to change according to the script return - if (processResult.getOutput().trim().matches(".*Initailize completed$")) { - taskStatus.setCode(Status.STATUS_CODE_SUCCESS); - } else { - // TODO: Percentage completed needs to be set, according to the script output - taskStatus.setCode(Status.STATUS_CODE_RUNNING); - // taskStatus.setPercentCompleted(processResult.getOutput()); - } - } else { + if (response instanceof Status) { taskStatus.setCode(Status.STATUS_CODE_FAILURE); + taskStatus.setMessage(((Status) response).getMessage()); + throw new GlusterRuntimeException(((Status) response).getMessage()); } - taskStatus.setMessage(processResult.getOutput()); + + InitDiskStatusResponse initDiskStatusResponse = (InitDiskStatusResponse) response; + + if (initDiskStatusResponse.getStatus() == FORMAT_STATUS.COMPLETED) { + taskStatus.setCode(Status.STATUS_CODE_SUCCESS); + } else if (initDiskStatusResponse.getStatus() == FORMAT_STATUS.IN_PROGRESS) { + taskStatus.setCode(Status.STATUS_CODE_RUNNING); + taskStatus.setPercentCompleted(initDiskStatusResponse.getCompleted() / initDiskStatusResponse.getTotal() * 100); + } + + taskStatus.setMessage(initDiskStatusResponse.getMessage()); return taskStatus; } |
