From 585603532b2fea19e2784a4aa8e0dbf904e7b4d6 Mon Sep 17 00:00:00 2001 From: Shireesh Anjal Date: Fri, 3 Jun 2011 20:03:04 +0530 Subject: Design changes - introducing cluster-server mapping on gateway --- .../management/server/resources/ClustersResource.java | 1 - .../com/gluster/storage/management/server/utils/SshUtil.java | 12 ++++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'src/com.gluster.storage.management.server') diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java index 6955b723..e1971322 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java @@ -93,7 +93,6 @@ public class ClustersResource { return new StringListResponse(clusterList); } - @SuppressWarnings("unchecked") @POST @Produces(MediaType.TEXT_XML) public Status createCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName) { diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java index 82cec63b..1cc51d23 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java @@ -55,6 +55,7 @@ public class SshUtil { private LRUCache sshConnCache = new LRUCache(10); private static final File PEM_FILE = new File(CoreConstants.USER_HOME + File.separator + ".ssh/id_rsa"); private static final File PUBLIC_KEY_FILE = new File(CoreConstants.USER_HOME + File.separator + ".ssh/id_rsa.pub"); + private static final String SCRIPT_DISABLE_SSH_PASSWORD_AUTH = "disable-ssh-password-auth.sh"; // TODO: Make user name configurable private static final String USER_NAME = "root"; @@ -89,7 +90,6 @@ public class SshUtil { localTempFile.delete(); } try { - // get authorized_keys from server scpClient.get(SSH_AUTHORIZED_KEYS_PATH, TEMP_DIR); } catch (IOException e) { @@ -119,7 +119,15 @@ public class SshUtil { throw new GlusterRuntimeException("Couldn't add public key to server [" + serverName + "]", e); } - // TODO: Disable password based ssh connections + disableSshPasswordLogin(serverName, scpClient); + } + + private void disableSshPasswordLogin(String serverName, SCPClient scpClient) { + ProcessResult result = executeRemote(serverName, SCRIPT_DISABLE_SSH_PASSWORD_AUTH); + if(!result.isSuccess()) { + throw new GlusterRuntimeException("Couldn't disable SSH password authentication on [" + serverName + + "]. Error: " + result); + } } private Connection getConnectionWithPassword(String serverName) { -- cgit From 4d109b1521c1f6e09f007aeacbb319443c45dfc8 Mon Sep 17 00:00:00 2001 From: Shireesh Anjal Date: Mon, 6 Jun 2011 13:37:16 +0530 Subject: Design changes - introducing cluster-server mapping on gateway --- .../server/resources/GlusterServersResource.java | 68 +++-------------- .../server/resources/VolumesResource.java | 31 ++++++-- .../management/server/services/ClusterService.java | 87 ++++++++++++++++++++++ 3 files changed, 119 insertions(+), 67 deletions(-) create mode 100644 src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java (limited to 'src/com.gluster.storage.management.server') 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 608783a1..7de9015d 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 @@ -18,16 +18,15 @@ *******************************************************************************/ package com.gluster.storage.management.server.resources; +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_SERVER_NAME; -import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SERVER_NAME; import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS; import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_SERVERS; import java.util.ArrayList; import java.util.List; -import javax.persistence.EntityTransaction; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; import javax.ws.rs.GET; @@ -42,7 +41,6 @@ import org.springframework.stereotype.Component; import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.exceptions.ConnectionException; -import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; 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.Status; @@ -50,8 +48,8 @@ import com.gluster.storage.management.core.response.GlusterServerListResponse; import com.gluster.storage.management.core.response.GlusterServerResponse; import com.gluster.storage.management.core.utils.LRUCache; import com.gluster.storage.management.server.data.ClusterInfo; -import com.gluster.storage.management.server.data.PersistenceDao; import com.gluster.storage.management.server.data.ServerInfo; +import com.gluster.storage.management.server.services.ClusterService; import com.gluster.storage.management.server.utils.GlusterUtil; import com.gluster.storage.management.server.utils.SshUtil; import com.sun.jersey.api.core.InjectParam; @@ -69,7 +67,7 @@ public class GlusterServersResource extends AbstractServersResource { private DiscoveredServersResource discoveredServersResource; @Autowired - private PersistenceDao clusterDao; + private ClusterService clusterService; @Autowired private SshUtil sshUtil; @@ -103,8 +101,7 @@ public class GlusterServersResource extends AbstractServersResource { // Doesn't use cache public GlusterServer getNewOnlineServer(String clusterName, String exceptServerName) { - // no known online server for this cluster. find one. - ClusterInfo cluster = getCluster(clusterName); + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return null; } @@ -129,7 +126,7 @@ public class GlusterServersResource extends AbstractServersResource { @PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) { List glusterServers = new ArrayList(); - ClusterInfo cluster = getCluster(clusterName); + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + "] doesn't exist!"), null); @@ -226,7 +223,7 @@ public class GlusterServersResource extends AbstractServersResource { @Produces(MediaType.TEXT_XML) public GlusterServerResponse addServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @FormParam(FORM_PARAM_SERVER_NAME) String serverName) { - ClusterInfo cluster = getCluster(clusterName); + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + "] doesn't exist!"), null); @@ -255,7 +252,7 @@ public class GlusterServersResource extends AbstractServersResource { try { // add the cluster-server mapping - addServerToCluster(clusterName, serverName); + clusterService.mapServerToCluster(clusterName, serverName); } catch (Exception e) { return new GlusterServerResponse(new Status(Status.STATUS_CODE_PART_SUCCESS, e.getMessage()), null); } @@ -281,59 +278,12 @@ public class GlusterServersResource extends AbstractServersResource { return serverResponse; } - private void addServerToCluster(String clusterName, String serverName) { - EntityTransaction txn = clusterDao.startTransaction(); - ClusterInfo cluster = getCluster(clusterName); - ServerInfo server = new ServerInfo(serverName); - server.setCluster(cluster); - try { - clusterDao.save(server); - cluster.addServer(server); - clusterDao.update(cluster); - txn.commit(); - } catch (Exception e) { - txn.rollback(); - throw new GlusterRuntimeException("Couldn't create cluster-server mapping [" + clusterName + "][" - + serverName + "]! Error: " + e.getMessage(), e); - } - } - - private void removeServerFromCluster(String clusterName, String serverName) { - EntityTransaction txn = clusterDao.startTransaction(); - ClusterInfo cluster = getCluster(clusterName); - List servers = cluster.getServers(); - for(ServerInfo server : servers) { - if(server.getName().equals(serverName)) { - servers.remove(server); - clusterDao.delete(server); - break; - } - } - try { - clusterDao.update(cluster); - txn.commit(); - } catch(Exception e) { - txn.rollback(); - throw new GlusterRuntimeException("Couldn't unmap server [" + serverName + "] from cluster [" + clusterName - + "]! Error: " + e.getMessage(), e); - } - } - - private ClusterInfo getCluster(String clusterName) { - List clusters = clusterDao.findBy("name = ?1", clusterName); - if(clusters.size() == 0) { - return null; - } - - return clusters.get(0); - } - @DELETE @Produces(MediaType.TEXT_XML) @Path("{" + PATH_PARAM_SERVER_NAME + "}") public Status removeServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @PathParam(PATH_PARAM_SERVER_NAME) String serverName) { - ClusterInfo cluster = getCluster(clusterName); + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + "] doesn't exist!"); } @@ -379,7 +329,7 @@ public class GlusterServersResource extends AbstractServersResource { try { - removeServerFromCluster(clusterName, serverName); + clusterService.unmapServerFromCluster(clusterName, serverName); } catch (Exception e) { return new Status(Status.STATUS_CODE_PART_SUCCESS, e.getMessage()); } 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 d16f7678..204d23a9 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 @@ -29,9 +29,8 @@ import static com.gluster.storage.management.core.constants.RESTConstants.FORM_P import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME; import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_VOLUME_NAME; import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_BRICKS; +import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_BRICK_NAME; import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DELETE_OPTION; -import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DISK_NAME; -import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DOWNLOAD; import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_FROM_TIMESTAMP; import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_LINE_COUNT; import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_LOG_SEVERITY; @@ -69,6 +68,8 @@ import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.StreamingOutput; +import org.springframework.beans.factory.annotation.Autowired; + import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.constants.RESTConstants; import com.gluster.storage.management.core.exceptions.ConnectionException; @@ -87,6 +88,8 @@ import com.gluster.storage.management.core.utils.FileUtil; import com.gluster.storage.management.core.utils.GlusterCoreUtil; import com.gluster.storage.management.core.utils.ProcessUtil; import com.gluster.storage.management.server.constants.VolumeOptionsDefaults; +import com.gluster.storage.management.server.data.ClusterInfo; +import com.gluster.storage.management.server.services.ClusterService; import com.gluster.storage.management.server.utils.GlusterUtil; import com.gluster.storage.management.server.utils.ServerUtil; import com.sun.jersey.api.core.InjectParam; @@ -102,11 +105,14 @@ public class VolumesResource { @InjectParam private GlusterServersResource glusterServersResource; - @InjectParam + @Autowired private ServerUtil serverUtil; - @InjectParam + @Autowired private GlusterUtil glusterUtil; + + @Autowired + private ClusterService clusterService; private FileUtil fileUtil = new FileUtil(); @@ -467,17 +473,26 @@ public class VolumesResource { @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_LOGS) public LogMessageListResponse getLogs(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, - @QueryParam(QUERY_PARAM_DISK_NAME) String brickName, + @QueryParam(QUERY_PARAM_BRICK_NAME) String brickName, @QueryParam(QUERY_PARAM_LOG_SEVERITY) String severity, @QueryParam(QUERY_PARAM_FROM_TIMESTAMP) String fromTimestamp, @QueryParam(QUERY_PARAM_TO_TIMESTAMP) String toTimestamp, - @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, - @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) { + @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount) { List logMessages = null; + ClusterInfo cluster = clusterService.getCluster(clusterName); + if(cluster == null) { + return new LogMessageListResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + + "] doesn't exist!"), null); + } + try { - // TODO: Fetch logs from brick(s) of given cluster only Volume volume = (Volume)getVolume(clusterName, volumeName).getData(); + if(volume == null) { + return new LogMessageListResponse(new Status(Status.STATUS_CODE_FAILURE, "Volume [" + volumeName + + "] doesn't exist in cluster [" + clusterName + "]!"), null); + } + if (brickName == null || brickName.isEmpty() || brickName.equals(CoreConstants.ALL)) { logMessages = getLogsForAllBricks(volume, lineCount); } else { diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java new file mode 100644 index 00000000..d043278c --- /dev/null +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2011 Gluster, Inc. + * 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 + * . + *******************************************************************************/ +package com.gluster.storage.management.server.services; + +import java.util.List; + +import javax.persistence.EntityTransaction; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; +import com.gluster.storage.management.server.data.ClusterInfo; +import com.gluster.storage.management.server.data.PersistenceDao; +import com.gluster.storage.management.server.data.ServerInfo; + +/** + * Service class for functionality related to clusters + */ +@Component +public class ClusterService { + @Autowired + private PersistenceDao clusterDao; + + public ClusterInfo getCluster(String clusterName) { + List clusters = clusterDao.findBy("name = ?1", clusterName); + if(clusters.size() == 0) { + return null; + } + + return clusters.get(0); + } + + public void mapServerToCluster(String clusterName, String serverName) { + EntityTransaction txn = clusterDao.startTransaction(); + ClusterInfo cluster = getCluster(clusterName); + ServerInfo server = new ServerInfo(serverName); + server.setCluster(cluster); + try { + clusterDao.save(server); + cluster.addServer(server); + clusterDao.update(cluster); + txn.commit(); + } catch (Exception e) { + txn.rollback(); + throw new GlusterRuntimeException("Couldn't create cluster-server mapping [" + clusterName + "][" + + serverName + "]! Error: " + e.getMessage(), e); + } + } + + public void unmapServerFromCluster(String clusterName, String serverName) { + EntityTransaction txn = clusterDao.startTransaction(); + ClusterInfo cluster = getCluster(clusterName); + List servers = cluster.getServers(); + for(ServerInfo server : servers) { + if(server.getName().equals(serverName)) { + servers.remove(server); + clusterDao.delete(server); + break; + } + } + try { + clusterDao.update(cluster); + txn.commit(); + } catch(Exception e) { + txn.rollback(); + throw new GlusterRuntimeException("Couldn't unmap server [" + serverName + "] from cluster [" + clusterName + + "]! Error: " + e.getMessage(), e); + } + } +} -- cgit From f21ed62520fe8a8fec4f6180ebaab070b2a24598 Mon Sep 17 00:00:00 2001 From: Dhandapani Date: Mon, 6 Jun 2011 14:56:31 +0530 Subject: UI Changes - Disk to brick label changes --- .../server/resources/AlertsResource.java | 2 +- .../server/resources/RunningTaskResource.java | 4 +-- .../server/resources/VolumesResource.java | 33 +++++++++++----------- 3 files changed, 20 insertions(+), 19 deletions(-) (limited to 'src/com.gluster.storage.management.server') 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 4283b5d6..060ce60c 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 @@ -54,7 +54,7 @@ public class AlertsResource { alert = new Alert(); alert.setId("0004"); alert.setReference("Volume3:server2:sda1"); // volume:[Disk name] - alert.setType(Alert.ALERT_TYPES.OFFLINE_VOLUME_DISKS_ALERT); + alert.setType(Alert.ALERT_TYPES.OFFLINE_VOLUME_BRICKS_ALERT); alert.setMessage(alert.getAlertType(alert.getType()) + " in volume [" + alert.getReference().split(":")[0] + "] disk [" + alert.getReference().split(":")[1] + ":" + alert.getReference().split(":")[2] + "]"); alerts.add(alert); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java index 10ce5da3..c9eb0ecd 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java @@ -76,10 +76,10 @@ public class RunningTaskResource { // MigrateDisk task = new RunningTask(); task.setId("0003"); - task.setType(RunningTask.TASK_TYPES.DISK_MIGRATE); + task.setType(RunningTask.TASK_TYPES.BRICK_MIGRATE); task.setReference("Volume3:server1:sda1"); // Disk reference task.setTaskInfo(task.getTaskType(task.getType()) + " for volume [" + task.getReference().split(":")[0] - + "] disk [" + task.getReference().split(":")[1] + ":" + task.getReference().split(":")[2] + "]"); + + "] brick [" + task.getReference().split(":")[1] + ":" + task.getReference().split(":")[2] + "]"); task.setStatus(taskStatus); runningTasks.add(task); 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 d16f7678..92a4e0cf 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 @@ -75,9 +75,9 @@ import com.gluster.storage.management.core.exceptions.ConnectionException; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.GlusterServer; -import com.gluster.storage.management.core.model.LogMessage; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.core.model.VolumeLogMessage; import com.gluster.storage.management.core.response.GenericResponse; import com.gluster.storage.management.core.response.LogMessageListResponse; import com.gluster.storage.management.core.response.VolumeListResponse; @@ -385,7 +385,7 @@ public class VolumesResource { return new Status(Status.STATUS_CODE_SUCCESS, "Directories cleaned up successfully!"); } - private List getBrickLogs(Volume volume, Brick brick, Integer lineCount) + private List getBrickLogs(Volume volume, Brick brick, Integer lineCount) throws GlusterRuntimeException { String logDir = glusterUtil.getLogLocation(volume.getName(), brick.getQualifiedName(), brick.getServerName()); String logFileName = glusterUtil.getLogFileNameForBrickDir(brick.getBrickDirectory()); @@ -408,9 +408,10 @@ public class VolumesResource { } // populate disk and trim other fields - List logMessages = response.getLogMessages(); - for (LogMessage logMessage : logMessages) { + List logMessages = response.getLogMessages(); + for (VolumeLogMessage logMessage : logMessages) { logMessage.setDisk(brick.getDiskName()); + logMessage.setBrickDirectory(brick.getBrickDirectory()); logMessage.setMessage(logMessage.getMessage().trim()); logMessage.setSeverity(logMessage.getSeverity().trim()); } @@ -473,7 +474,7 @@ public class VolumesResource { @QueryParam(QUERY_PARAM_TO_TIMESTAMP) String toTimestamp, @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) { - List logMessages = null; + List logMessages = null; try { // TODO: Fetch logs from brick(s) of given cluster only @@ -498,7 +499,7 @@ public class VolumesResource { return new LogMessageListResponse(Status.STATUS_SUCCESS, logMessages); } - private void filterLogsByTime(List logMessages, String fromTimestamp, String toTimestamp) { + private void filterLogsByTime(List logMessages, String fromTimestamp, String toTimestamp) { Date fromTime = null, toTime = null; if (fromTimestamp != null && !fromTimestamp.isEmpty()) { @@ -509,8 +510,8 @@ public class VolumesResource { toTime = DateUtil.stringToDate(toTimestamp); } - List messagesToRemove = new ArrayList(); - for (LogMessage logMessage : logMessages) { + List messagesToRemove = new ArrayList(); + for (VolumeLogMessage logMessage : logMessages) { Date logTimestamp = logMessage.getTimestamp(); if (fromTime != null && logTimestamp.before(fromTime)) { messagesToRemove.add(logMessage); @@ -524,13 +525,13 @@ public class VolumesResource { logMessages.removeAll(messagesToRemove); } - private void filterLogsBySeverity(List logMessages, String severity) { + private void filterLogsBySeverity(List logMessages, String severity) { if (severity == null || severity.isEmpty()) { return; } - List messagesToRemove = new ArrayList(); - for (LogMessage logMessage : logMessages) { + List messagesToRemove = new ArrayList(); + for (VolumeLogMessage logMessage : logMessages) { if (!logMessage.getSeverity().equals(severity)) { messagesToRemove.add(logMessage); } @@ -538,18 +539,18 @@ public class VolumesResource { logMessages.removeAll(messagesToRemove); } - private List getLogsForAllBricks(Volume volume, Integer lineCount) { - List logMessages; - logMessages = new ArrayList(); + private List getLogsForAllBricks(Volume volume, Integer lineCount) { + List logMessages; + logMessages = new ArrayList(); // fetch logs for every brick of the volume for (Brick brick : volume.getBricks()) { logMessages.addAll(getBrickLogs(volume, brick, lineCount)); } // Sort the log messages based on log timestamp - Collections.sort(logMessages, new Comparator() { + Collections.sort(logMessages, new Comparator() { @Override - public int compare(LogMessage message1, LogMessage message2) { + public int compare(VolumeLogMessage message1, VolumeLogMessage message2) { return message1.getTimestamp().compareTo(message2.getTimestamp()); } }); -- cgit From 623a16fef5f5e1885dbc273b1220430c7d1e79ce Mon Sep 17 00:00:00 2001 From: Dhandapani Date: Mon, 6 Jun 2011 14:56:31 +0530 Subject: UI Changes - Disk to brick label changes --- .../server/resources/AlertsResource.java | 2 +- .../server/resources/RunningTaskResource.java | 4 +-- .../server/resources/VolumesResource.java | 34 +++++++++++----------- 3 files changed, 20 insertions(+), 20 deletions(-) (limited to 'src/com.gluster.storage.management.server') 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 4283b5d6..060ce60c 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 @@ -54,7 +54,7 @@ public class AlertsResource { alert = new Alert(); alert.setId("0004"); alert.setReference("Volume3:server2:sda1"); // volume:[Disk name] - alert.setType(Alert.ALERT_TYPES.OFFLINE_VOLUME_DISKS_ALERT); + alert.setType(Alert.ALERT_TYPES.OFFLINE_VOLUME_BRICKS_ALERT); alert.setMessage(alert.getAlertType(alert.getType()) + " in volume [" + alert.getReference().split(":")[0] + "] disk [" + alert.getReference().split(":")[1] + ":" + alert.getReference().split(":")[2] + "]"); alerts.add(alert); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java index 10ce5da3..c9eb0ecd 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java @@ -76,10 +76,10 @@ public class RunningTaskResource { // MigrateDisk task = new RunningTask(); task.setId("0003"); - task.setType(RunningTask.TASK_TYPES.DISK_MIGRATE); + task.setType(RunningTask.TASK_TYPES.BRICK_MIGRATE); task.setReference("Volume3:server1:sda1"); // Disk reference task.setTaskInfo(task.getTaskType(task.getType()) + " for volume [" + task.getReference().split(":")[0] - + "] disk [" + task.getReference().split(":")[1] + ":" + task.getReference().split(":")[2] + "]"); + + "] brick [" + task.getReference().split(":")[1] + ":" + task.getReference().split(":")[2] + "]"); task.setStatus(taskStatus); runningTasks.add(task); 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 d16f7678..b3f7f365 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 @@ -75,9 +75,9 @@ import com.gluster.storage.management.core.exceptions.ConnectionException; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.GlusterServer; -import com.gluster.storage.management.core.model.LogMessage; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.core.model.VolumeLogMessage; import com.gluster.storage.management.core.response.GenericResponse; import com.gluster.storage.management.core.response.LogMessageListResponse; import com.gluster.storage.management.core.response.VolumeListResponse; @@ -385,7 +385,7 @@ public class VolumesResource { return new Status(Status.STATUS_CODE_SUCCESS, "Directories cleaned up successfully!"); } - private List getBrickLogs(Volume volume, Brick brick, Integer lineCount) + private List getBrickLogs(Volume volume, Brick brick, Integer lineCount) throws GlusterRuntimeException { String logDir = glusterUtil.getLogLocation(volume.getName(), brick.getQualifiedName(), brick.getServerName()); String logFileName = glusterUtil.getLogFileNameForBrickDir(brick.getBrickDirectory()); @@ -408,9 +408,9 @@ public class VolumesResource { } // populate disk and trim other fields - List logMessages = response.getLogMessages(); - for (LogMessage logMessage : logMessages) { - logMessage.setDisk(brick.getDiskName()); + List logMessages = response.getLogMessages(); + for (VolumeLogMessage logMessage : logMessages) { + logMessage.setBrickDirectory(brick.getBrickDirectory()); logMessage.setMessage(logMessage.getMessage().trim()); logMessage.setSeverity(logMessage.getSeverity().trim()); } @@ -473,7 +473,7 @@ public class VolumesResource { @QueryParam(QUERY_PARAM_TO_TIMESTAMP) String toTimestamp, @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) { - List logMessages = null; + List logMessages = null; try { // TODO: Fetch logs from brick(s) of given cluster only @@ -498,7 +498,7 @@ public class VolumesResource { return new LogMessageListResponse(Status.STATUS_SUCCESS, logMessages); } - private void filterLogsByTime(List logMessages, String fromTimestamp, String toTimestamp) { + private void filterLogsByTime(List logMessages, String fromTimestamp, String toTimestamp) { Date fromTime = null, toTime = null; if (fromTimestamp != null && !fromTimestamp.isEmpty()) { @@ -509,8 +509,8 @@ public class VolumesResource { toTime = DateUtil.stringToDate(toTimestamp); } - List messagesToRemove = new ArrayList(); - for (LogMessage logMessage : logMessages) { + List messagesToRemove = new ArrayList(); + for (VolumeLogMessage logMessage : logMessages) { Date logTimestamp = logMessage.getTimestamp(); if (fromTime != null && logTimestamp.before(fromTime)) { messagesToRemove.add(logMessage); @@ -524,13 +524,13 @@ public class VolumesResource { logMessages.removeAll(messagesToRemove); } - private void filterLogsBySeverity(List logMessages, String severity) { + private void filterLogsBySeverity(List logMessages, String severity) { if (severity == null || severity.isEmpty()) { return; } - List messagesToRemove = new ArrayList(); - for (LogMessage logMessage : logMessages) { + List messagesToRemove = new ArrayList(); + for (VolumeLogMessage logMessage : logMessages) { if (!logMessage.getSeverity().equals(severity)) { messagesToRemove.add(logMessage); } @@ -538,18 +538,18 @@ public class VolumesResource { logMessages.removeAll(messagesToRemove); } - private List getLogsForAllBricks(Volume volume, Integer lineCount) { - List logMessages; - logMessages = new ArrayList(); + private List getLogsForAllBricks(Volume volume, Integer lineCount) { + List logMessages; + logMessages = new ArrayList(); // fetch logs for every brick of the volume for (Brick brick : volume.getBricks()) { logMessages.addAll(getBrickLogs(volume, brick, lineCount)); } // Sort the log messages based on log timestamp - Collections.sort(logMessages, new Comparator() { + Collections.sort(logMessages, new Comparator() { @Override - public int compare(LogMessage message1, LogMessage message2) { + public int compare(VolumeLogMessage message1, VolumeLogMessage message2) { return message1.getTimestamp().compareTo(message2.getTimestamp()); } }); -- cgit From bfedf9c486788a74cae2c8cb8d97d52fab67bbeb Mon Sep 17 00:00:00 2001 From: Shireesh Anjal Date: Mon, 6 Jun 2011 13:37:16 +0530 Subject: Design changes - introducing cluster-server mapping on gateway --- .../management/server/resources/VolumesResource.java | 20 ++++++++++++++------ .../storage/management/server/utils/ServerUtil.java | 4 ++-- .../storage/management/server/utils/SshUtil.java | 11 +++++++++++ 3 files changed, 27 insertions(+), 8 deletions(-) (limited to 'src/com.gluster.storage.management.server') 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 c14290f8..7ef917bd 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 @@ -427,15 +427,24 @@ public class VolumesResource { @GET @Produces(MediaType.APPLICATION_OCTET_STREAM) @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_LOGS + "/" + RESOURCE_DOWNLOAD) - public StreamingOutput getLogs(@PathParam(PATH_PARAM_CLUSTER_NAME) final String clusterName, + public StreamingOutput downloadLogs(@PathParam(PATH_PARAM_CLUSTER_NAME) final String clusterName, @PathParam(PATH_PARAM_VOLUME_NAME) final String volumeName) { + final ClusterInfo cluster = clusterService.getCluster(clusterName); + if(cluster == null) { + throw new GlusterRuntimeException("Cluster [" + clusterName + "] doesn't exist!"); + } + + final Volume volume = (Volume)getVolume(clusterName, volumeName).getData(); + if(volume == null) { + throw new GlusterRuntimeException("Volume [" + volumeName + "] doesn't exist in cluster [" + clusterName + + "]!"); + } + return new StreamingOutput() { @Override public void write(OutputStream output) throws IOException, WebApplicationException { - Volume volume = (Volume)getVolume(clusterName, volumeName).getData(); try { - // TODO: pass clusterName to downloadLogs File archiveFile = new File(downloadLogs(volume)); output.write(fileUtil.readFileAsByteArray(archiveFile)); archiveFile.delete(); @@ -457,8 +466,7 @@ public class VolumesResource { String logFileName = glusterUtil.getLogFileNameForBrickDir(brick.getBrickDirectory()); String logFilePath = logDir + CoreConstants.FILE_SEPARATOR + logFileName; - String logContents = serverUtil.getFileFromServer(brick.getServerName(), logFilePath); - fileUtil.createTextFile(tempDirPath + CoreConstants.FILE_SEPARATOR + logFileName, logContents); + serverUtil.getFileFromServer(brick.getServerName(), logFilePath, tempDirPath); } String gzipPath = fileUtil.getTempDirName() + CoreConstants.FILE_SEPARATOR + volume.getName() + "-logs.tar.gz"; @@ -479,7 +487,7 @@ public class VolumesResource { @QueryParam(QUERY_PARAM_FROM_TIMESTAMP) String fromTimestamp, @QueryParam(QUERY_PARAM_TO_TIMESTAMP) String toTimestamp, @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount) { - List logMessages = null; + List logMessages = null; ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { 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 2a055ee8..ed1aea75 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 @@ -161,8 +161,8 @@ public class ServerUtil { // } // } - public String getFileFromServer(String serverName, String fileName) { - return executeOnServer(serverName, "get_file " + fileName); + public void getFileFromServer(String serverName, String remoteFileName, String localDirName) { + sshUtil.getFile(serverName, remoteFileName, localDirName); } /** diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java index 1cc51d23..a4728d21 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java @@ -80,6 +80,17 @@ public class SshUtil { } } + public void getFile(String serverName, String remoteFile, String localDir) { + try { + Connection conn = getConnection(serverName); + SCPClient scpClient = new SCPClient(conn); + scpClient.get(remoteFile, localDir); + } catch (IOException e) { + throw new GlusterRuntimeException("Error while fetching file [" + remoteFile + "] from server [" + + serverName + "]", e); + } + } + public synchronized void installPublicKey(String serverName) { Connection conn = getConnectionWithPassword(serverName); SCPClient scpClient = new SCPClient(conn); -- cgit From 3607009ba67b77a2cdbddeccd48e458d78077bcd Mon Sep 17 00:00:00 2001 From: selvam Date: Tue, 7 Jun 2011 16:55:29 +0530 Subject: Remove server / Add server issue fix Autowired modified to InjectParam in resource side --- .../management/server/resources/GlusterServersResource.java | 2 +- .../storage/management/server/resources/VolumesResource.java | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) (limited to 'src/com.gluster.storage.management.server') 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 7de9015d..b96b1ddb 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 @@ -307,7 +307,7 @@ public class GlusterServersResource extends AbstractServersResource { } try { - return glusterUtil.removeServer(onlineServer.getName(), serverName); + status = glusterUtil.removeServer(onlineServer.getName(), serverName); } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = getNewOnlineServer(clusterName, serverName); 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 7ef917bd..05ea58ce 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 @@ -68,8 +68,6 @@ import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.StreamingOutput; -import org.springframework.beans.factory.annotation.Autowired; - import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.constants.RESTConstants; import com.gluster.storage.management.core.exceptions.ConnectionException; @@ -105,20 +103,20 @@ public class VolumesResource { @InjectParam private GlusterServersResource glusterServersResource; - @Autowired + @InjectParam private ServerUtil serverUtil; - @Autowired + @InjectParam private GlusterUtil glusterUtil; - @Autowired + @InjectParam private ClusterService clusterService; - private FileUtil fileUtil = new FileUtil(); - @InjectParam private VolumeOptionsDefaults volumeOptionsDefaults; + private FileUtil fileUtil = new FileUtil(); + @GET @Produces(MediaType.TEXT_XML) public VolumeListResponse getAllVolumes(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) { -- cgit From feeb2bf9ce16c9e6ac4268cae4d9c5e94d805fd2 Mon Sep 17 00:00:00 2001 From: Shireesh Anjal Date: Tue, 7 Jun 2011 21:38:15 +0530 Subject: add/remove server --- .../storage/management/server/resources/GlusterServersResource.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/com.gluster.storage.management.server') 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 b96b1ddb..728da2dc 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 @@ -206,7 +206,11 @@ public class GlusterServersResource extends AbstractServersResource { Status status; try { - status = glusterUtil.addServer(serverName, onlineServer.getName()); + status = glusterUtil.addServer(onlineServer.getName(), serverName); + if(status.isSuccess()) { + // other peer probe to ensure that host names appear in peer probe on both sides + status = glusterUtil.addServer(serverName, onlineServer.getName()); + } } catch(ConnectionException e) { onlineServer = getNewOnlineServer(clusterName); if(onlineServer == null) { -- cgit From c604f66c85de5fcda8ce36be22b34be06ad34704 Mon Sep 17 00:00:00 2001 From: Shireesh Anjal Date: Wed, 8 Jun 2011 16:47:11 +0530 Subject: add/remove servers --- .../server/resources/GlusterServersResource.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/com.gluster.storage.management.server') 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 728da2dc..27f0829b 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 @@ -227,6 +227,16 @@ public class GlusterServersResource extends AbstractServersResource { @Produces(MediaType.TEXT_XML) public GlusterServerResponse addServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @FormParam(FORM_PARAM_SERVER_NAME) String serverName) { + if(clusterName.isEmpty()) { + return new GlusterServerResponse( + new Status(Status.STATUS_CODE_FAILURE, "Cluster name should not be empty!"), null); + } + + if(serverName == null || serverName.isEmpty()) { + return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE, "Form parameter [" + + FORM_PARAM_SERVER_NAME + "] is mandatory!"), null); + } + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName @@ -287,6 +297,15 @@ public class GlusterServersResource extends AbstractServersResource { @Path("{" + PATH_PARAM_SERVER_NAME + "}") public Status removeServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @PathParam(PATH_PARAM_SERVER_NAME) String serverName) { + if (clusterName.isEmpty()) { + return new Status(Status.STATUS_CODE_FAILURE, "Cluster name should not be empty!"); + } + + if(serverName == null || serverName.isEmpty()) { + return new Status(Status.STATUS_CODE_FAILURE, "Form parameter [" + FORM_PARAM_SERVER_NAME + + "] is mandatory!"); + } + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + "] doesn't exist!"); -- cgit From 5f1c439181a2445e505243ea0feedbc1bb7e3460 Mon Sep 17 00:00:00 2001 From: Dhandapani Date: Thu, 9 Jun 2011 16:01:03 +0530 Subject: Bug 2990 - Create volume operation throws error message --- .../server/resources/VolumesResource.java | 195 +++++++++++---------- .../management/server/utils/GlusterUtil.java | 2 +- 2 files changed, 103 insertions(+), 94 deletions(-) (limited to 'src/com.gluster.storage.management.server') 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 d6c41475..fe6de156 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 @@ -102,14 +102,14 @@ public class VolumesResource { private static final String VOLUME_BRICK_LOG_SCRIPT = "get_volume_brick_log.py"; @InjectParam - private GlusterServersResource glusterServersResource; - + private GlusterServersResource glusterServersResource; + @InjectParam private ServerUtil serverUtil; @InjectParam private GlusterUtil glusterUtil; - + @InjectParam private ClusterService clusterService; @@ -117,24 +117,24 @@ public class VolumesResource { private VolumeOptionsDefaults volumeOptionsDefaults; private FileUtil fileUtil = new FileUtil(); - + @GET @Produces(MediaType.TEXT_XML) public VolumeListResponse getAllVolumes(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) { GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName); - if(onlineServer == null) { + if (onlineServer == null) { return new VolumeListResponse(Status.STATUS_SUCCESS, new ArrayList()); } - + try { return new VolumeListResponse(Status.STATUS_SUCCESS, glusterUtil.getAllVolumes(onlineServer.getName())); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = glusterServersResource.getNewOnlineServer(clusterName); - if(onlineServer == null) { + if (onlineServer == null) { return new VolumeListResponse(Status.STATUS_SUCCESS, new ArrayList()); } - + return new VolumeListResponse(Status.STATUS_SUCCESS, glusterUtil.getAllVolumes(onlineServer.getName())); } } @@ -146,18 +146,19 @@ public class VolumesResource { List brickDirectories = GlusterCoreUtil.getQualifiedBrickList(volume.getBricks()); GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName); - if(onlineServer == null) { + if (onlineServer == null) { return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); } - + Status status = null; try { status = glusterUtil.createVolume(volume, brickDirectories, onlineServer.getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = glusterServersResource.getNewOnlineServer(clusterName); - if(onlineServer == null) { - return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); + if (onlineServer == null) { + return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + + "]"); } status = glusterUtil.createVolume(volume, brickDirectories, onlineServer.getName()); } @@ -171,20 +172,24 @@ public class VolumesResource { public GenericResponse getVolume(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName) { GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName); - if(onlineServer == null) { - return new GenericResponse(new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"), null); + if (onlineServer == null) { + return new GenericResponse(new Status(Status.STATUS_CODE_FAILURE, + "No online servers found in cluster [" + clusterName + "]"), null); } - + try { - return new GenericResponse(Status.STATUS_SUCCESS, glusterUtil.getVolume(volumeName, onlineServer.getName())); - } catch(ConnectionException e) { + return new GenericResponse(Status.STATUS_SUCCESS, glusterUtil.getVolume(volumeName, + onlineServer.getName())); + } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = glusterServersResource.getNewOnlineServer(clusterName); - if(onlineServer == null) { - return new GenericResponse(new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"), null); + if (onlineServer == null) { + return new GenericResponse(new Status(Status.STATUS_CODE_FAILURE, + "No online servers found in cluster [" + clusterName + "]"), null); } - - return new GenericResponse(Status.STATUS_SUCCESS, glusterUtil.getVolume(volumeName, onlineServer.getName())); + + return new GenericResponse(Status.STATUS_SUCCESS, glusterUtil.getVolume(volumeName, + onlineServer.getName())); } } @@ -194,7 +199,7 @@ public class VolumesResource { public Status performOperation(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, @FormParam(FORM_PARAM_OPERATION) String operation) { GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName); - if(onlineServer == null) { + if (onlineServer == null) { return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); } @@ -203,8 +208,9 @@ public class VolumesResource { } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = glusterServersResource.getNewOnlineServer(clusterName); - if(onlineServer == null) { - return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); + if (onlineServer == null) { + return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + + "]"); } return performOperation(volumeName, operation, onlineServer); } @@ -227,27 +233,27 @@ public class VolumesResource { @QueryParam(QUERY_PARAM_VOLUME_NAME) String volumeName, @QueryParam(QUERY_PARAM_DELETE_OPTION) boolean deleteFlag) { GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName); - if(onlineServer == null) { + if (onlineServer == null) { return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); } - + Volume volume = null; try { volume = glusterUtil.getVolume(volumeName, onlineServer.getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = glusterServersResource.getNewOnlineServer(clusterName); - if(onlineServer == null) { - return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); + if (onlineServer == null) { + return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + + "]"); } volume = glusterUtil.getVolume(volumeName, onlineServer.getName()); } - + List bricks = volume.getBricks(); Status status = glusterUtil.deleteVolume(volumeName, onlineServer.getName()); if (status.isSuccess()) { - List disks = volume.getDisks(); - Status postDeleteStatus = postDelete(volumeName, disks, deleteFlag); + Status postDeleteStatus = postDelete(volumeName, bricks, deleteFlag); if (!postDeleteStatus.isSuccess()) { status.setCode(Status.STATUS_CODE_PART_SUCCESS); @@ -261,23 +267,25 @@ public class VolumesResource { @Path("{" + QUERY_PARAM_VOLUME_NAME + "}/" + RESOURCE_DISKS) @Produces(MediaType.TEXT_XML) public Status removeBricks(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, - @PathParam(QUERY_PARAM_VOLUME_NAME) String volumeName, @QueryParam(QUERY_PARAM_BRICKS) String bricks, + @PathParam(QUERY_PARAM_VOLUME_NAME) String volumeName, @QueryParam(QUERY_PARAM_BRICKS) String bricks, @QueryParam(QUERY_PARAM_DELETE_OPTION) boolean deleteFlag) { - List brickList = Arrays.asList(bricks.split(",")); // Convert from comma separated string (query parameter) + List brickList = Arrays.asList(bricks.split(",")); // Convert from comma separated string (query + // parameter) GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName); - if(onlineServer == null) { + if (onlineServer == null) { return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); } Status status = null; try { status = glusterUtil.removeBricks(volumeName, brickList, onlineServer.getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = glusterServersResource.getNewOnlineServer(clusterName); - if(onlineServer == null) { - return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); + if (onlineServer == null) { + return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + + "]"); } status = glusterUtil.removeBricks(volumeName, brickList, onlineServer.getName()); } @@ -292,15 +300,14 @@ public class VolumesResource { return status; } - private Status postDelete(String volumeName, List disks, boolean deleteFlag) { - String serverName, diskName, diskInfo[]; + private Status postDelete(String volumeName, List bricks, boolean deleteFlag) { Status result; - for (int i = 0; i < disks.size(); i++) { - diskInfo = disks.get(i).split(":"); - serverName = diskInfo[0]; - diskName = diskInfo[1]; - result = (Status) serverUtil.executeOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT + " " - + diskName + " " + volumeName + (deleteFlag ? " -d" : ""), Status.class); + for (Brick brick : bricks) { + String brickDirectory = brick.getBrickDirectory(); + String mountPoint = brickDirectory.substring(0, brickDirectory.lastIndexOf("/")); + + result = (Status) serverUtil.executeOnServer(true, brick.getServerName(), VOLUME_DIRECTORY_CLEANUP_SCRIPT + + " " + mountPoint + " " + volumeName + (deleteFlag ? " -d" : ""), Status.class); if (!result.isSuccess()) { return result; } @@ -316,17 +323,18 @@ public class VolumesResource { @FormParam(RESTConstants.FORM_PARAM_OPTION_KEY) String key, @FormParam(RESTConstants.FORM_PARAM_OPTION_VALUE) String value) { GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName); - if(onlineServer == null) { + if (onlineServer == null) { return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); } try { return glusterUtil.setOption(volumeName, key, value, onlineServer.getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = glusterServersResource.getNewOnlineServer(clusterName); - if(onlineServer == null) { - return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); + if (onlineServer == null) { + return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + + "]"); } return glusterUtil.setOption(volumeName, key, value, onlineServer.getName()); } @@ -374,7 +382,7 @@ public class VolumesResource { diskName = diskInfo[1]; Object response = serverUtil.executeOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT + " " - + diskName + " " + volumeName + " " + (deleteFlag ? "-d" : ""), GenericResponse.class); + + diskName + " " + volumeName + " " + (deleteFlag ? "-d" : ""), GenericResponse.class); if (response instanceof GenericResponse) { result = ((GenericResponse) response).getStatus(); if (!result.isSuccess()) { @@ -428,16 +436,16 @@ public class VolumesResource { public StreamingOutput downloadLogs(@PathParam(PATH_PARAM_CLUSTER_NAME) final String clusterName, @PathParam(PATH_PARAM_VOLUME_NAME) final String volumeName) { final ClusterInfo cluster = clusterService.getCluster(clusterName); - if(cluster == null) { + if (cluster == null) { throw new GlusterRuntimeException("Cluster [" + clusterName + "] doesn't exist!"); } - final Volume volume = (Volume)getVolume(clusterName, volumeName).getData(); - if(volume == null) { + final Volume volume = (Volume) getVolume(clusterName, volumeName).getData(); + if (volume == null) { throw new GlusterRuntimeException("Volume [" + volumeName + "] doesn't exist in cluster [" + clusterName + "]!"); } - + return new StreamingOutput() { @Override @@ -460,7 +468,8 @@ public class VolumesResource { String tempDirPath = tempDir.getPath(); for (Brick brick : volume.getBricks()) { - String logDir = glusterUtil.getLogLocation(volume.getName(), brick.getBrickDirectory(), brick.getServerName()); + String logDir = glusterUtil.getLogLocation(volume.getName(), brick.getBrickDirectory(), + brick.getServerName()); String logFileName = glusterUtil.getLogFileNameForBrickDir(brick.getBrickDirectory()); String logFilePath = logDir + CoreConstants.FILE_SEPARATOR + logFileName; @@ -479,34 +488,32 @@ public class VolumesResource { @GET @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_LOGS) public LogMessageListResponse getLogs(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, - @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, - @QueryParam(QUERY_PARAM_BRICK_NAME) String brickName, + @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, @QueryParam(QUERY_PARAM_BRICK_NAME) String brickName, @QueryParam(QUERY_PARAM_LOG_SEVERITY) String severity, @QueryParam(QUERY_PARAM_FROM_TIMESTAMP) String fromTimestamp, @QueryParam(QUERY_PARAM_TO_TIMESTAMP) String toTimestamp, - @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, - @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) { + @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) { List logMessages = null; ClusterInfo cluster = clusterService.getCluster(clusterName); - if(cluster == null) { + if (cluster == null) { return new LogMessageListResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + "] doesn't exist!"), null); } try { - Volume volume = (Volume)getVolume(clusterName, volumeName).getData(); - if(volume == null) { + Volume volume = (Volume) getVolume(clusterName, volumeName).getData(); + if (volume == null) { return new LogMessageListResponse(new Status(Status.STATUS_CODE_FAILURE, "Volume [" + volumeName + "] doesn't exist in cluster [" + clusterName + "]!"), null); } - + if (brickName == null || brickName.isEmpty() || brickName.equals(CoreConstants.ALL)) { logMessages = getLogsForAllBricks(volume, lineCount); } else { // fetch logs for given brick of the volume - for(Brick brick : volume.getBricks()) { - if(brick.getQualifiedName().equals(brickName)) { + for (Brick brick : volume.getBricks()) { + if (brick.getQualifiedName().equals(brickName)) { logMessages = getBrickLogs(volume, brick, lineCount); break; } @@ -585,17 +592,18 @@ public class VolumesResource { public Status addBricks(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @PathParam(QUERY_PARAM_VOLUME_NAME) String volumeName, @FormParam(FORM_PARAM_BRICKS) String bricks) { GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName); - if(onlineServer == null) { + if (onlineServer == null) { return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); } try { return glusterUtil.addBricks(volumeName, Arrays.asList(bricks.split(",")), onlineServer.getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = glusterServersResource.getNewOnlineServer(clusterName); - if(onlineServer == null) { - return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); + if (onlineServer == null) { + return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + + "]"); } return glusterUtil.addBricks(volumeName, Arrays.asList(bricks.split(",")), onlineServer.getName()); } @@ -607,17 +615,18 @@ public class VolumesResource { @PathParam(QUERY_PARAM_VOLUME_NAME) String volumeName, @FormParam(FORM_PARAM_SOURCE) String diskFrom, @FormParam(FORM_PARAM_TARGET) String diskTo, @FormParam(FORM_PARAM_OPERATION) String operation) { GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName); - if(onlineServer == null) { + if (onlineServer == null) { return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); } - + try { return glusterUtil.migrateDisk(volumeName, diskFrom, diskTo, operation, onlineServer.getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = glusterServersResource.getNewOnlineServer(clusterName); - if(onlineServer == null) { - return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"); + if (onlineServer == null) { + return new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + + "]"); } return glusterUtil.migrateDisk(volumeName, diskFrom, diskTo, operation, onlineServer.getName()); } @@ -630,22 +639,22 @@ public class VolumesResource { // System.out.println("\nName:" + volume.getName() + "\nType: " + volume.getVolumeTypeStr() + "\nStatus: " // + volume.getStatusStr()); // } -// Volume volume = new Volume(); -// volume.setName("vol3"); -// volume.setTransportType(TRANSPORT_TYPE.ETHERNET); -// List disks = new ArrayList(); -// disks.add("192.168.1.210:sdb"); -// volume.addDisks(disks); -// volume.setAccessControlList("192.168.*"); -// // Status status = vr.createVolume(volume); -// // System.out.println(status.getMessage()); -// Form form = new Form(); -// form.add("volumeName", volume.getName()); -// form.add(RESTConstants.FORM_PARAM_DELETE_OPTION, 1); -// Status status = vr.deleteVolume("Vol2", true); -// System.out.println("Code : " + status.getCode()); -// System.out.println("Message " + status.getMessage()); - + // Volume volume = new Volume(); + // volume.setName("vol3"); + // volume.setTransportType(TRANSPORT_TYPE.ETHERNET); + // List disks = new ArrayList(); + // disks.add("192.168.1.210:sdb"); + // volume.addDisks(disks); + // volume.setAccessControlList("192.168.*"); + // // Status status = vr.createVolume(volume); + // // System.out.println(status.getMessage()); + // Form form = new Form(); + // form.add("volumeName", volume.getName()); + // form.add(RESTConstants.FORM_PARAM_DELETE_OPTION, 1); + // Status status = vr.deleteVolume("Vol2", true); + // System.out.println("Code : " + status.getCode()); + // System.out.println("Message " + status.getMessage()); + Status status1 = vr.removeBricks("testCluster", "test", "192.168.1.210:sdb", true); System.out.println("Code : " + status1.getCode()); System.out.println("Message " + status1.getMessage()); 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 7f2afc3f..fe725d17 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 @@ -258,7 +258,7 @@ public class GlusterUtil { public Status setOption(String volumeName, String key, String value, String knownServer) { return new Status(sshUtil.executeRemote(knownServer, "gluster volume set " + volumeName + " " + key + " " - + value)); + + "\"" + value + "\"")); } public Status deleteVolume(String volumeName, String knownServer) { -- cgit