summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSelvam <selvam@gluster.com>2011-04-15 16:10:10 +0530
committerSelvam <selvam@gluster.com>2011-04-15 16:35:19 +0530
commit7e6efca549922972ab18074af8337b5105f0cfcd (patch)
tree107570fb0213d379e1703bcad912644b99729725 /src
parent0260cedde3b852047b7b6bf2fd1843a7a4e3f934 (diff)
[Bug 2693] New: Volumes are not listed in the Volumes node
Alert section implemented in the volume summary page
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java33
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java5
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java25
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java3
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java)23
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java11
9 files changed, 69 insertions, 37 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index 8d6d5002..815ba853 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -118,13 +118,10 @@ public class GlusterDataModelManager {
setSecurityToken(securityToken);
Cluster cluster = new Cluster("Home", model);
- VolumesClient volumeClient = new VolumesClient(securityToken);
initializeGlusterServers(cluster);
-
- // initializeVolumes(cluster);
- VolumeListResponse response = volumeClient.getAllVolumes();
- cluster.setVolumes(response.getVolumes());
+ initializeVolumes(cluster);
+
initializeAutoDiscoveredServers(cluster);
initializeDisks();
@@ -167,26 +164,12 @@ public class GlusterDataModelManager {
}
private void initializeVolumes(Cluster cluster) {
- List<Volume> volumes = new ArrayList<Volume>();
-
- volume1 = addVolume(volumes, "Volume1", cluster, VOLUME_TYPE.PLAIN_DISTRIBUTE, TRANSPORT_TYPE.ETHERNET,
- VOLUME_STATUS.ONLINE);
-
- volume2 = addVolume(volumes, "Volume2", cluster, VOLUME_TYPE.PLAIN_DISTRIBUTE, TRANSPORT_TYPE.ETHERNET,
- VOLUME_STATUS.ONLINE);
-
- volume3 = addVolume(volumes, "Volume3", cluster, VOLUME_TYPE.DISTRIBUTED_MIRROR, TRANSPORT_TYPE.ETHERNET,
- VOLUME_STATUS.OFFLINE);
- volume3.setReplicaCount(2);
-
- volume4 = addVolume(volumes, "Volume4", cluster, VOLUME_TYPE.PLAIN_DISTRIBUTE, TRANSPORT_TYPE.ETHERNET,
- VOLUME_STATUS.ONLINE);
-
- volume5 = addVolume(volumes, "Volume5", cluster, VOLUME_TYPE.DISTRIBUTED_STRIPE, TRANSPORT_TYPE.INFINIBAND,
- VOLUME_STATUS.OFFLINE);
- volume5.setStripeCount(3);
-
- cluster.setVolumes(volumes);
+ VolumesClient volumeClient = new VolumesClient(securityToken);
+ VolumeListResponse response = volumeClient.getAllVolumes();
+ if(!response.getStatus().isSuccess()) {
+ throw new GlusterRuntimeException("Error fetching volume list: [" + response.getStatus() + "]");
+ }
+ cluster.setVolumes(response.getVolumes());
}
private void initializeDisks() {
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
index daa96cd4..054df413 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
@@ -71,9 +71,10 @@ public class Volume extends Entity {
public Volume() {
}
- // GlusterFS export is always enabled
+ // GlusterFS and NFS export is always enabled
+ // Note: logic needs to make NFS optional
private Set<NAS_PROTOCOL> nasProtocols = new LinkedHashSet<NAS_PROTOCOL>(
- Arrays.asList(new NAS_PROTOCOL[] { NAS_PROTOCOL.GLUSTERFS }));
+ Arrays.asList(new NAS_PROTOCOL[] { NAS_PROTOCOL.GLUSTERFS, NAS_PROTOCOL.NFS }));
private String accessControlList = "*";
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java
index fe583a67..d837c8a4 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java
@@ -1,5 +1,6 @@
package com.gluster.storage.management.gui.views;
+import java.util.List;
import java.util.Map;
import org.eclipse.jface.dialogs.ErrorDialog;
@@ -22,6 +23,8 @@ import org.eclipse.ui.part.ViewPart;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.VolumesClient;
+import com.gluster.storage.management.core.model.Alert;
+import com.gluster.storage.management.core.model.Cluster;
import com.gluster.storage.management.core.model.DefaultClusterListener;
import com.gluster.storage.management.core.model.Event;
import com.gluster.storage.management.core.model.Event.EVENT_TYPE;
@@ -38,13 +41,13 @@ import com.gluster.storage.management.gui.utils.GUIHelper;
public class VolumeSummaryView extends ViewPart {
public static final String ID = VolumeSummaryView.class.getName();
private static final GUIHelper guiHelper = GUIHelper.getInstance();
+ private static final String VOLUME_OPTION_AUTH_ALLOW = "auth.allow";
+
private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
private ScrolledForm form;
private Volume volume;
private CLabel lblStatusValue;
private DefaultClusterListener volumeChangedListener;
-
- private static final String VOLUME_OPTION_AUTH_ALLOW = "auth.allow";
@Override
public void createPartControl(Composite parent) {
@@ -89,8 +92,22 @@ public class VolumeSummaryView extends ViewPart {
}
private void createVolumeAlertsSection() {
- Composite section = guiHelper.createSection(form, toolkit, "Alerts", null, 3, false);
- toolkit.createLabel(section, "Volume related alerts will be displayed here");
+ Composite section = guiHelper.createSection(form, toolkit, "Alerts", null, 1, false);
+ List<Alert> alerts = GlusterDataModelManager.getInstance().getModel().getCluster().getAlerts();
+
+ for (int i = 0; i < alerts.size(); i++) {
+ if (alerts.get(i).getType() == Alert.ALERT_TYPES.OFFLINE_VOLUME_DISKS_ALERT
+ && alerts.get(i).getReference().split(":")[0].trim().equals(volume.getName())) {
+ addAlertLabel(section, alerts.get(i));
+ }
+ }
+ }
+
+ private void addAlertLabel(Composite section, Alert alert) {
+ CLabel lblAlert = new CLabel(section, SWT.NONE);
+ lblAlert.setImage(guiHelper.getImage(IImageKeys.DISK_OFFLINE));
+ lblAlert.setText(alert.getMessage());
+ lblAlert.redraw();
}
private void createVolumeMountingInfoSection() {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java
index 8c39fbeb..0d8f114a 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java
@@ -99,9 +99,9 @@ public class VolumesSummaryView extends ViewPart {
if (alert.getType() == Alert.ALERT_TYPES.DISK_USAGE_ALERT
|| alert.getType() == Alert.ALERT_TYPES.OFFLINE_VOLUME_DISKS_ALERT) {
CLabel lblAlert = new CLabel(section, SWT.NONE);
- lblAlert.setText(alert.getMessage());
lblAlert.setImage((alert.getType() == Alert.ALERT_TYPES.DISK_USAGE_ALERT) ? guiHelper
.getImage(IImageKeys.LOW_DISK_SPACE) : guiHelper.getImage(IImageKeys.DISK_OFFLINE));
+ lblAlert.setText(alert.getMessage());
lblAlert.redraw();
}
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java
index c4948596..e33e06c9 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java
@@ -53,7 +53,7 @@ public class AlertsResource {
// Alert #4
alert = new Alert();
alert.setId("0004");
- alert.setReference("Volume2:server2:sda1"); // volume:[Disk name]
+ alert.setReference("Volume3:server2:sda1"); // volume:[Disk name]
alert.setType(Alert.ALERT_TYPES.OFFLINE_VOLUME_DISKS_ALERT);
alert.setMessage(alert.getAlertType(alert.getType()) + " in volume [" + alert.getReference().split(":")[0]
+ "] disk [" + alert.getReference().split(":")[1] + ":" + alert.getReference().split(":")[2] + "]");
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
index 42f7760e..c1f0435c 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
@@ -37,8 +37,8 @@ import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
import com.gluster.storage.management.core.response.GlusterServerResponse;
-import com.gluster.storage.management.core.utils.GlusterUtil;
import com.gluster.storage.management.core.utils.ProcessResult;
+import com.gluster.storage.management.server.utils.GlusterUtil;
import com.sun.jersey.spi.resource.Singleton;
@Component
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 73aa60d8..a4ecfcc6 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
@@ -50,8 +50,8 @@ 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;
import com.gluster.storage.management.server.constants.VolumeOptionsDefaults;
+import com.gluster.storage.management.server.utils.GlusterUtil;
import com.gluster.storage.management.server.utils.ServerUtil;
import com.sun.jersey.api.core.InjectParam;
import com.sun.jersey.spi.resource.Singleton;
@@ -76,6 +76,7 @@ public class VolumesResource {
return new VolumeListResponse(Status.STATUS_SUCCESS, glusterUtil.getAllVolumes());
} catch (Exception e) {
// TODO: log the error
+ e.printStackTrace();
return new VolumeListResponse(new Status(Status.STATUS_CODE_FAILURE, e.getMessage()), null);
}
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
index 5bfe01c8..dd72ab86 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
@@ -18,7 +18,7 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
-package com.gluster.storage.management.core.utils;
+package com.gluster.storage.management.server.utils;
import java.util.ArrayList;
import java.util.List;
@@ -34,6 +34,8 @@ import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE;
import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE;
+import com.gluster.storage.management.core.utils.ProcessResult;
+import com.gluster.storage.management.core.utils.ProcessUtil;
public class GlusterUtil {
private static final String glusterFSminVersion = "3.1";
@@ -280,7 +282,24 @@ public class GlusterUtil {
private boolean readBrick(Volume volume, String line) {
if (line.matches("Brick[0-9]+:.*")) {
// line: "Brick1: server1:/export/md0/volume-name"
- volume.addDisk(line.split(":")[2].trim().split("/")[2].trim());
+ String[] brickParts = line.split(":");
+ String serverName = brickParts[1].trim();
+ String brickDir = brickParts[2].trim();
+ // brick directory should be of the form /export/<diskname>/volume-name
+ try {
+ volume.addDisk(serverName + ":" + brickDir.split("/")[2].trim());
+ } catch(ArrayIndexOutOfBoundsException e) {
+ // brick directory of a different form, most probably created manually
+ // connect to the server and get disk for the brick directory
+ Status status = new ServerUtil().getDiskForDir(serverName, brickDir);
+ if(status.isSuccess()) {
+ volume.addDisk(serverName + ":" + status.getMessage());
+ } else {
+ // Couldn't fetch disk for the brick directory. Log error and add "unknown" as disk name.
+ System.out.println("Couldn't fetch disk name for brick [" + serverName + ":" + brickDir + "]");
+ volume.addDisk(serverName + ":unknown");
+ }
+ }
return true;
}
return false;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
index 645b7991..4f99172d 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
@@ -39,6 +39,7 @@ import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.utils.ProcessResult;
import com.gluster.storage.management.core.utils.ProcessUtil;
@@ -49,6 +50,7 @@ public class ServerUtil {
private static final String SCRIPT_DIR = "scripts";
private static final String SCRIPT_COMMAND = "python";
+ private static final String REMOTE_SCRIPT_GET_DISK_FOR_DIR = "get_disk_for_dir.py";
public ProcessResult executeGlusterScript(boolean runInForeground, String scriptName, List<String> arguments) {
List<String> command = new ArrayList<String>();
@@ -133,4 +135,13 @@ public class ServerUtil {
// CreateVolumeExportDirectory.py md0 testvol
System.out.println(new ServerUtil().executeOnServer(true, "localhost", "python CreateVolumeExportDirectory.py md0 testvol", Status.class));
}
+
+ /**
+ * @param serverName Server on which the directory is present
+ * @param brickDir Directory whose disk is to be fetched
+ * @return Status object containing the disk name, or error message in case the remote script fails.
+ */
+ public Status getDiskForDir(String serverName, String brickDir) {
+ return (Status) executeOnServer(true, serverName, REMOTE_SCRIPT_GET_DISK_FOR_DIR + " " + brickDir, Status.class);
+ }
} \ No newline at end of file