diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-07-05 17:43:30 +0530 |
|---|---|---|
| committer | Dhandapani <dhandapani@gluster.com> | 2011-07-05 17:43:30 +0530 |
| commit | a2b74b06a488d0f2a336aef71074c231f0825c98 (patch) | |
| tree | eae5f670b09982dfa6187c73172c5382e21596cf /src | |
| parent | 429d3149d5cf042f1aabc5836d7df451c7da06bd (diff) | |
Initialize disk enhancement
Diffstat (limited to 'src')
7 files changed, 164 insertions, 21 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java index b6d0a426..fa925842 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java @@ -62,8 +62,10 @@ public class GlusterServersClient extends AbstractClient { postRequest(form); } - public void initializeDisk(String serverName, String diskName) { - putRequest(serverName + "/" + RESTConstants.RESOURCE_DISKS + "/" + diskName); + public void initializeDisk(String serverName, String diskName, String fsType) { + Form form = new Form(); + form.add(RESTConstants.FORM_PARAM_FSTYPE, fsType); + putRequest(serverName + "/" + RESTConstants.RESOURCE_DISKS + "/" + diskName, form); } public void removeServer(String serverName) { diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java index 527ae2a1..9450ac48 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java @@ -60,6 +60,7 @@ public class RESTConstants { public static final String FORM_PARAM_BRICKS = "bricks"; public static final String FORM_PARAM_ACCESS_PROTOCOLS = "accessProtocols"; public static final String FORM_PARAM_VOLUME_OPTIONS = "options"; + public static final String FORM_PARAM_FSTYPE = "fsType"; public static final String FORM_PARAM_CLUSTER_NAME = "clusterName"; public static final String FORM_PARAM_SERVER_NAME = "serverName"; diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/InitDiskStatusResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/InitDiskStatusResponse.java new file mode 100644 index 00000000..1a448606 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/InitDiskStatusResponse.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * InitDiskStatusResponse.java + * + * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com> + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * <http://www.gnu.org/licenses/>. + *******************************************************************************/ +package com.gluster.storage.management.core.model; + + +public class InitDiskStatusResponse extends Status { + + public enum FORMAT_STATUS { + IN_PROGRESS, COMPLETED, NOT_RUNNING + }; + + private String[] FORMAT_STATUS_STR = { "Inprogress", "Completed", "Notrunning" }; + + private String device; + private String message; + private float total; + private float completed; + private FORMAT_STATUS status; + + public InitDiskStatusResponse() { + + } + + public void setDevice(String device) { + this.device = device; + } + + public String getDevice() { + return device; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public void setTotal(float total) { + this.total = total; + } + + public float getTotal() { + return total; + } + + public void setCompleted(float completed) { + this.completed = completed; + } + + public float getCompleted() { + return completed; + } + + public String getStatusStr() { + return FORMAT_STATUS_STR[getStatus().ordinal()]; + } + + public FORMAT_STATUS getStatus() { + return status; + } + + public void setStatus(FORMAT_STATUS status) { + this.status = status; + } + +} diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java index 221e82b1..e6145997 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java @@ -20,6 +20,7 @@ package com.gluster.storage.management.gui.views.pages; import java.util.List; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.TableViewer; @@ -46,7 +47,9 @@ import com.gluster.storage.management.core.model.Disk.DISK_STATUS; import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.gui.Application; import com.gluster.storage.management.gui.IEntityListener; +import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.jobs.InitializeDiskJob; +import com.gluster.storage.management.gui.utils.GUIHelper; public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> implements IEntityListener { private List<Disk> disks; @@ -199,11 +202,28 @@ public abstract class AbstractDisksPage extends AbstractTableViewerPage<Disk> im @Override public void linkActivated(HyperlinkEvent e) { + Integer formatOption = new MessageDialog(getShell(), "Initialize Disk", GUIHelper.getInstance().getImage( + IImageKeys.DISK), "Please choose the file system to Initialize the disk?", MessageDialog.QUESTION, new String[] { + "Cancel", "Ext3", "Ext4", "Xfs" }, -1).open(); + + if (formatOption <= 0) { // By Cancel button(0) or Escape key(-1) + return; + } + + String fsType = null; + if (formatOption == 1) { + fsType = "ext3"; + } else if (formatOption == 2) { + fsType = "ext4"; + } else if (formatOption == 3) { + fsType = "xfs"; + } + updateStatus(DISK_STATUS.INITIALIZING, true); - + GlusterServersClient serversClient = new GlusterServersClient(); - serversClient.initializeDisk(disk.getServerName(), disk.getName()); - + serversClient.initializeDisk(disk.getServerName(), disk.getName(), fsType); + guiHelper.showProgressView(); new InitializeDiskJob(disk).schedule(); } 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; } |
