summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShireesh Anjal <anjalshireesh@gmail.com>2011-11-25 05:56:36 -0800
committerShireesh Anjal <anjalshireesh@gmail.com>2011-11-25 05:56:36 -0800
commit92c52d8edf285945d31e446503fc742fde9dcc49 (patch)
tree5789d783a07bfaf883d7e589f42c27987dc0432f
parent45e68b0cae66c4e67098bfab5877c172ed8c584e (diff)
parent229ef07aa2235d92e41c3880099b1257ce0f30fd (diff)
Merge pull request #7 from Selvasundaram/master
Disk Initialization enhanced with user selectable file system and mount point
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java11
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitDiskDialog.java (renamed from src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java)98
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java32
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java2
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/FsTypeListResponse.java47
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/GlusterServersResource.java15
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/GlusterServerService.java23
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java18
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/ServerUtil.java7
9 files changed, 219 insertions, 34 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 3d27afb2..5fefedc0 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
@@ -30,7 +30,9 @@ import javax.ws.rs.core.MultivaluedMap;
import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.ServerStats;
+import com.gluster.storage.management.core.response.FsTypeListResponse;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
+import com.gluster.storage.management.core.response.StringListResponse;
import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.sun.jersey.api.representation.Form;
import com.sun.jersey.core.util.MultivaluedMapImpl;
@@ -76,9 +78,16 @@ public class GlusterServersClient extends AbstractClient {
return postRequest(form);
}
- public URI initializeDisk(String serverName, String diskName, String fsType) {
+ public List<String> getFSTypes(String serverName) {
+ FsTypeListResponse fsTypeListResponse = ((FsTypeListResponse) fetchSubResource(serverName + "/" + RESTConstants.RESOURCE_FSTYPES,
+ FsTypeListResponse.class));
+ return fsTypeListResponse.getFsTypes();
+ }
+
+ public URI initializeDisk(String serverName, String diskName, String fsType, String mountPoint) {
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_FSTYPE, fsType);
+ form.add(RESTConstants.FORM_PARAM_MOUNTPOINT, fsType);
return putRequestURI(serverName + "/" + RESTConstants.RESOURCE_DISKS + "/" + diskName, form);
}
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitDiskDialog.java
index 4b64ea96..870de286 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitDiskDialog.java
@@ -21,35 +21,48 @@
*******************************************************************************/
package com.gluster.storage.management.console.dialogs;
-import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.Hyperlink;
import com.gluster.storage.management.console.utils.GUIHelper;
-import com.gluster.storage.management.core.constants.GlusterConstants;
-public class InitializeDiskTypeSelection extends Dialog {
+public class InitDiskDialog extends Dialog {
private Combo formatTypeCombo = null;
private final GUIHelper guiHelper = GUIHelper.getInstance();
private Composite initializeDiskTypeComposite;
private Composite composite;
private String fsType;
+ private String mountPoint;
+ private Text mountPointText;
+ private String deviceName;
+ private List<String> fsTypes;
+ private static final String DEFAULT_MOUNT_POINT = "/export/";
- public InitializeDiskTypeSelection(Shell parentShell) {
+ public InitDiskDialog(Shell parentShell, String deviceName, List<String> fsTypes) {
super(parentShell);
- // TODO Auto-generated constructor stub
+ this.fsTypes = fsTypes;
+ this.deviceName = deviceName;
}
@Override
@@ -98,32 +111,68 @@ public class InitializeDiskTypeSelection extends Dialog {
GridLayout layout = new GridLayout(3, false);
initializeDiskTypeComposite.setLayout(layout);
- createLabel(initializeDiskTypeComposite, "Format disk using ");
+ createLabel(initializeDiskTypeComposite, "File system ");
createFormatTypeCombo(initializeDiskTypeComposite);
- createLabel(initializeDiskTypeComposite, " file system");
+ createLabel(initializeDiskTypeComposite, "Mount point ");
+ createMountPointText(initializeDiskTypeComposite);
+ createChangeLink(initializeDiskTypeComposite);
}
private void createLabel(Composite composite, String labelText) {
Label formatTypeLabel = new Label(composite, SWT.NONE);
formatTypeLabel.setText(labelText);
- formatTypeLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false));
+ formatTypeLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false));
}
private void createFormatTypeCombo(Composite composite) {
- List<String> fsType = new ArrayList<String>();
- fsType.add(GlusterConstants.FSTYPE_DEFAULT);
- fsType.add(GlusterConstants.FSTYPE_EXT_3);
- fsType.add(GlusterConstants.FSTYPE_EXT_4);
- fsType.add(GlusterConstants.FSTYPE_XFS);
formatTypeCombo = new Combo(composite, SWT.READ_ONLY);
- formatTypeCombo.setItems(fsType.toArray(new String[0]));
+ formatTypeCombo.setItems(fsTypes.toArray(new String[0]));
formatTypeCombo.select(0);
+ new Label(composite, SWT.NONE);
}
+ private void createMountPointText(Composite container) {
+ mountPointText = new Text(container, SWT.BORDER);
+ GridData txtNameData = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1);
+ txtNameData.widthHint = 400;
+ mountPointText.setTextLimit(100);
+ mountPointText.setLayoutData(txtNameData);
+ mountPointText.setText(DEFAULT_MOUNT_POINT + deviceName);
+ mountPointText.setEnabled(false);
+ mountPointText.addModifyListener(new ModifyListener() {
+ @Override
+ public void modifyText(ModifyEvent e) {
+ validateMountPoint();
+ }
+ });
+ }
+
+ private void createChangeLink(Composite container) {
+ final Hyperlink changeLink = new Hyperlink(container, SWT.UNDERLINE_SINGLE);
+ changeLink.setText("change");
+ changeLink.setUnderlined(true);
+ changeLink.setForeground(new Color(Display.getDefault(), 0, 0, 255));
+
+ changeLink.addHyperlinkListener(new HyperlinkAdapter() {
+ @Override
+ public void linkActivated(HyperlinkEvent e) {
+ if (!mountPointText.isEnabled()) {
+ changeLink.setVisible(false);
+ mountPointText.setEnabled(true);
+ }
+ }
+ });
+ }
+
@Override
protected void okPressed() {
- fsType = formatTypeCombo.getText();
- super.okPressed();
+ fsType = formatTypeCombo.getText().trim();
+ mountPoint = mountPointText.getText().trim();
+ if (validateForm()) {
+ super.okPressed();
+ } else {
+ MessageDialog.openError(getShell(), "Initialize Disk - Error", "Please enter a valid mount point");
+ }
}
@Override
@@ -131,6 +180,18 @@ public class InitializeDiskTypeSelection extends Dialog {
super.cancelPressed();
}
+ private boolean validateMountPoint() {
+ String mountPoint = mountPointText.getText().trim();
+ if (mountPoint.isEmpty()) {
+ return false;
+ }
+ return mountPoint.matches("^/.+");
+ }
+
+ private boolean validateForm() {
+ return (!formatTypeCombo.getText().trim().isEmpty() && validateMountPoint());
+ }
+
/**
* Overriding to make sure that the dialog is centered in screen
*/
@@ -142,7 +203,10 @@ public class InitializeDiskTypeSelection extends Dialog {
}
public String getFSType() {
- return fsType.trim();
+ return fsType;
}
+ public String getMountPoint() {
+ return mountPoint;
+ }
}
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java
index 417e67ea..43a7e61a 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java
@@ -19,6 +19,7 @@
package com.gluster.storage.management.console.views.pages;
import java.net.URI;
+import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.MessageDialog;
@@ -44,7 +45,9 @@ import com.gluster.storage.management.client.TasksClient;
import com.gluster.storage.management.console.Application;
import com.gluster.storage.management.console.GlusterDataModelManager;
import com.gluster.storage.management.console.IEntityListener;
-import com.gluster.storage.management.console.dialogs.InitializeDiskTypeSelection;
+import com.gluster.storage.management.console.dialogs.InitDiskDialog;
+import com.gluster.storage.management.console.utils.GlusterLogger;
+import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.DefaultClusterListener;
import com.gluster.storage.management.core.model.Device;
@@ -59,6 +62,7 @@ import com.gluster.storage.management.core.model.TaskInfo;
public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk> implements IEntityListener {
protected List<Disk> disks;
+ protected static final GlusterLogger logger = GlusterLogger.getInstance();
/**
* @return Index of the "status" column in the table. Return -1 if status column is not displayed
@@ -69,7 +73,7 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
super(site, parent, style, false, true, disks);
this.disks = disks;
- // creates hyperlinks for "unitialized" disks
+ // creates hyperlinks for "uninitialized" disks
setupStatusCellEditor();
// Listen for disk status change events
Application.getApplication().addEntityListener(this);
@@ -250,22 +254,31 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
TaskInfo existingTaskInfo = modelManager.getTaskByReference(reference);
if (existingTaskInfo != null && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_SUCCESS
&& existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_FAILURE) {
- MessageDialog.openInformation(getShell(), "Error: Initialize disk", "Initializing disk [" + reference
+ MessageDialog.openInformation(getShell(), "Initialize disk - Error", "Initializing disk [" + reference
+ "] is already in progress! Try later.");
return;
}
- InitializeDiskTypeSelection formatDialog = new InitializeDiskTypeSelection(getShell());
+ // To collect the available fsType
+ GlusterServersClient serversClient = new GlusterServersClient();
+ List<String> fsTypes = new ArrayList<String>();
+ try {
+ fsTypes = serversClient.getFSTypes(device.getServerName());
+ } catch (GlusterRuntimeException e1) {
+ MessageDialog.openError(getShell(), "Initialize disk - Error", e1.getMessage());
+ return;
+ }
+
+ InitDiskDialog formatDialog = new InitDiskDialog(getShell(), device.getName(), fsTypes);
int userAction = formatDialog.open();
if (userAction == Window.CANCEL) {
- formatDialog.cancelPressed();
+ // formatDialog.cancelPressed();
return;
}
- GlusterServersClient serversClient = new GlusterServersClient();
try {
- URI uri = serversClient.initializeDisk(device.getServerName(), device.getName(), formatDialog.getFSType());
+ URI uri = serversClient.initializeDisk(device.getServerName(), device.getName(), formatDialog.getFSType(), formatDialog.getMountPoint());
TasksClient taskClient = new TasksClient();
TaskInfo taskInfo = taskClient.getTaskInfo(uri);
@@ -285,11 +298,12 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
// GlusterDataModelManager.getInstance().updateDeviceStatus(device.getServerName(), device.getName(),
// DEVICE_STATUS.INITIALIZED);
} else {
- MessageDialog.openError(getShell(), "Error: Initialize disk", taskInfo.getStatus().getMessage());
+ MessageDialog.openError(getShell(), "Initialize disk - Error", taskInfo.getStatus().getMessage());
}
guiHelper.showTaskView();
} catch (Exception e1) {
- MessageDialog.openError(getShell(), "Error: Initialize disk", e1.getMessage());
+ logger.error("Exception while initialize disk", e1);
+ MessageDialog.openError(getShell(), "Initialize disk - Error", e1.getMessage());
}
}
}
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 cc32d109..4b1251b6 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
@@ -44,6 +44,7 @@ public class RESTConstants {
public static final String RESOURCE_KEYS = "keys";
public static final String RESOURCE_STATISTICS = "statistics";
public static final String RESOURCE_USERS = "users";
+ public static final String RESOURCE_FSTYPES = "fstypes";
public static final String TASK_START = "start";
public static final String TASK_PAUSE = "pause";
@@ -87,6 +88,7 @@ public class RESTConstants {
public static final String FORM_PARAM_OLD_PASSWORD = "oldPassword";
public static final String FORM_PARAM_NEW_PASSWORD = "newPassword";
public static final String FORM_PARAM_FORCE = "force";
+ public static final String FORM_PARAM_MOUNTPOINT = "mountPoint";
public static final String PATH_PARAM_FORMAT = "format";
public static final String PATH_PARAM_VOLUME_NAME = "volumeName";
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/FsTypeListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/FsTypeListResponse.java
new file mode 100644
index 00000000..0235fa5f
--- /dev/null
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/FsTypeListResponse.java
@@ -0,0 +1,47 @@
+/**
+ * FsTypesListResponse.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.response;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "fsTypes")
+public class FsTypeListResponse {
+ private List<String> fsTypes;
+
+ public FsTypeListResponse() {
+ }
+
+ public FsTypeListResponse(List<String> fsTypes) {
+ setFsTypes(fsTypes);
+ }
+
+ @XmlElement(name = "fsType", type=String.class)
+ public List<String> getFsTypes() {
+ return fsTypes;
+ }
+
+ public void setFsTypes(List<String> fsTypes) {
+ this.fsTypes = fsTypes;
+ }
+}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/GlusterServersResource.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/GlusterServersResource.java
index 8d3784e9..3c6910fd 100644
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/GlusterServersResource.java
+++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/GlusterServersResource.java
@@ -19,6 +19,7 @@
package com.gluster.storage.management.gateway.resources.v1_0;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_FSTYPE;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_MOUNTPOINT;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SERVER_NAME;
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;
@@ -30,6 +31,7 @@ import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_PERIOD;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_TYPE;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_DISKS;
+import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_FSTYPES;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_SERVERS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_STATISTICS;
@@ -61,6 +63,7 @@ import com.gluster.storage.management.core.exceptions.GlusterValidationException
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.ServerStats;
import com.gluster.storage.management.core.model.TaskStatus;
+import com.gluster.storage.management.core.response.FsTypeListResponse;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
import com.gluster.storage.management.core.response.ServerNameListResponse;
import com.gluster.storage.management.gateway.data.ClusterInfo;
@@ -197,12 +200,20 @@ public class GlusterServersResource extends AbstractResource {
return noContentResponse();
}
+ @GET
+ @Produces(MediaType.APPLICATION_XML)
+ @Path("{" + PATH_PARAM_SERVER_NAME + "}/" + RESOURCE_FSTYPES)
+ public FsTypeListResponse getFsTypes(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @PathParam(PATH_PARAM_SERVER_NAME) String serverName) {
+ List<String> fsTypes = glusterServerService.getFsTypes(clusterName, serverName);
+ return new FsTypeListResponse(fsTypes);
+ }
+
@PUT
@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,
- @FormParam(FORM_PARAM_FSTYPE) String fsType) {
+ @FormParam(FORM_PARAM_FSTYPE) String fsType, @FormParam(FORM_PARAM_MOUNTPOINT) String mountPoint) {
if (clusterName == null || clusterName.isEmpty()) {
return badRequestResponse("Cluster name must not be empty!");
@@ -221,7 +232,7 @@ public class GlusterServersResource extends AbstractResource {
// return badRequestResponse("Parameter [" + FORM_PARAM_FSTYPE + "] is missing in request!");
}
- InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, serverName, diskName, fsType);
+ InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, serverName, diskName, fsType, mountPoint);
try {
initializeTask.start();
// Check the initialize disk status
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/GlusterServerService.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/GlusterServerService.java
index da1a8487..b20fb2fe 100644
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/GlusterServerService.java
+++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/GlusterServerService.java
@@ -35,6 +35,7 @@ import com.gluster.storage.management.core.exceptions.GlusterValidationException
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Server.SERVER_STATUS;
+import com.gluster.storage.management.core.response.StringListResponse;
import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.ProcessUtil;
import com.gluster.storage.management.core.utils.StringUtil;
@@ -142,6 +143,20 @@ public class GlusterServerService {
return server;
}
}
+
+ // Server not found. It's possible that the server name returned by glusterfs is actually IP address
+ // Hence fetch details of all servers and then compare the host names again.
+ String errMsg = fetchDetailsOfServers(Collections.synchronizedList(servers));
+ if (!errMsg.isEmpty()) {
+ throw new GlusterRuntimeException("Couldn't fetch details for server(s): " + errMsg);
+ }
+ for (GlusterServer server : servers) {
+ if (server.getName().equalsIgnoreCase(serverName)) {
+ return server;
+ }
+ }
+
+ // still not found!
return null;
}
@@ -504,4 +519,12 @@ public class GlusterServerService {
}
}
}
+
+ public List<String> getFsTypes(String clusterName, String serverName) {
+ if (isValidServer(clusterName, serverName)) {
+ return serverUtil.getFsTypes(serverName);
+ } else {
+ throw new GlusterRuntimeException(serverName + " does not belong to the cluster [" + clusterName + "]");
+ }
+ }
}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java
index 4c437737..73b1e78f 100644
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java
+++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java
@@ -43,10 +43,11 @@ public class InitializeDiskTask extends Task {
private String serverName;
private String diskName;
private String fsType;
+ private String mountPoint;
private ServerUtil serverUtil;
public InitializeDiskTask(ClusterService clusterService, String clusterName, String serverName, String diskName,
- String fsType) {
+ String fsType, String mountPoint) {
// Reference contains "Server:disk"
super(clusterService, clusterName, TASK_TYPE.DISK_FORMAT, serverName + ":" + diskName, "Initialize disk "
+ serverName + ":" + diskName, false, false, false);
@@ -54,6 +55,7 @@ public class InitializeDiskTask extends Task {
setServerName(serverName);
setDiskName(diskName);
setFsType(fsType);
+ setMountpoint(mountPoint);
taskInfo.setName(getId());
init();
}
@@ -117,10 +119,8 @@ public class InitializeDiskTask extends Task {
}
private void startInitializeDisk(String serverName) {
- String fsTypeCommand = (getFsType().equals(GlusterConstants.FSTYPE_DEFAULT)) ? "" : " -t " + getFsType();
-
- String output = serverUtil.executeScriptOnServer(serverName, INITIALIZE_DISK_SCRIPT + fsTypeCommand + " "
- + getDiskName());
+ String output = serverUtil.executeScriptOnServer(serverName, INITIALIZE_DISK_SCRIPT + " " + getFsType() + " \""
+ + getMountpoint() + "\" " + getDiskName() );
TaskStatus taskStatus = new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, output));
taskStatus.setPercentageSupported((getFsType().equals(GlusterConstants.FSTYPE_XFS)) ? false : true);
getTaskInfo().setStatus(taskStatus);
@@ -187,4 +187,12 @@ public class InitializeDiskTask extends Task {
public String getFsType() {
return fsType;
}
+
+ public void setMountpoint(String deviceMountPoint) {
+ this.mountPoint = deviceMountPoint;
+ }
+
+ public String getMountpoint() {
+ return mountPoint;
+ }
}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/ServerUtil.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/ServerUtil.java
index 0d09d616..63f2bbf4 100644
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/ServerUtil.java
+++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/ServerUtil.java
@@ -44,6 +44,7 @@ import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Server.SERVER_STATUS;
import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.core.response.StringListResponse;
import com.gluster.storage.management.core.utils.ProcessResult;
import com.gluster.storage.management.core.utils.ProcessUtil;
import com.gluster.storage.management.gateway.services.GlusterInterfaceService;
@@ -65,6 +66,7 @@ public class ServerUtil {
private static final String SCRIPT_COMMAND = "python";
private static final String REMOTE_SCRIPT_GET_DISK_FOR_DIR = "get_disk_for_dir.py";
private static final String REMOTE_SCRIPT_GET_SERVER_DETAILS = "get_server_details.py";
+ private static final String REMOTE_SCRIPT_GET_FILE_SYSTEM_TYPE = "get_filesystem_type.py";
private static final String REMOTE_SCRIPT_BASE_DIR = "/opt/glustermg";
private static final String REMOTE_SCRIPT_DIR_NAME = "backend";
@@ -360,4 +362,9 @@ public class ServerUtil {
ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();
return ctx.getBean(clazz);
}
+
+ public List<String> getFsTypes(String serverName) {
+ String output = executeScriptOnServer(serverName, REMOTE_SCRIPT_GET_FILE_SYSTEM_TYPE);
+ return Arrays.asList(output.trim().split(CoreConstants.NEWLINE));
+ }
}