summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDhandapani <dhandapani@gluster.com>2011-07-05 17:43:30 +0530
committerDhandapani <dhandapani@gluster.com>2011-07-05 17:43:30 +0530
commita2b74b06a488d0f2a336aef71074c231f0825c98 (patch)
treeeae5f670b09982dfa6187c73172c5382e21596cf /src
parent429d3149d5cf042f1aabc5836d7df451c7da06bd (diff)
Initialize disk enhancement
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java6
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java1
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/InitDiskStatusResponse.java86
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java26
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java10
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java22
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java34
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;
}