summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server
diff options
context:
space:
mode:
authorTim <timothyasir@gluster.com>2011-06-09 16:24:34 +0530
committerTim <timothyasir@gluster.com>2011-06-09 16:24:34 +0530
commite7fa3154115f72e3eefdb5790acbee1223de65a4 (patch)
treec3ba5e3df455f437a49c865d46c4e321636633dc /src/com.gluster.storage.management.server
parent85575ed19b0e76b4067636f007a14ef86adc906f (diff)
parent88d3c1664d867df409589911afd42277cff5a1dc (diff)
Merge remote branch 'upstream/master'
Diffstat (limited to 'src/com.gluster.storage.management.server')
-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/ClustersResource.java1
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java95
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java4
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java252
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java87
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java4
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java23
9 files changed, 290 insertions, 180 deletions
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/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/resources/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
index 608783a1..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
@@ -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<ClusterInfo> 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<GlusterServer> glusterServers = new ArrayList<GlusterServer>();
- 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);
@@ -209,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) {
@@ -226,7 +227,17 @@ 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);
+ 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
+ "] doesn't exist!"), null);
@@ -255,7 +266,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 +292,21 @@ 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<ServerInfo> 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<ClusterInfo> 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);
+ 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!");
}
@@ -357,7 +330,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);
@@ -379,7 +352,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/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..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
@@ -29,8 +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;
@@ -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;
@@ -87,6 +87,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;
@@ -100,36 +102,39 @@ 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;
- private FileUtil fileUtil = new FileUtil();
-
+ @InjectParam
+ private ClusterService clusterService;
+
@InjectParam
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<Volume>());
}
-
+
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<Volume>());
}
-
+
return new VolumeListResponse(Status.STATUS_SUCCESS, glusterUtil.getAllVolumes(onlineServer.getName()));
}
}
@@ -141,18 +146,19 @@ public class VolumesResource {
List<String> 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());
}
@@ -166,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<Volume>(new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"), null);
+ if (onlineServer == null) {
+ return new GenericResponse<Volume>(new Status(Status.STATUS_CODE_FAILURE,
+ "No online servers found in cluster [" + clusterName + "]"), null);
}
-
+
try {
- return new GenericResponse<Volume>(Status.STATUS_SUCCESS, glusterUtil.getVolume(volumeName, onlineServer.getName()));
- } catch(ConnectionException e) {
+ return new GenericResponse<Volume>(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<Volume>(new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster [" + clusterName + "]"), null);
+ if (onlineServer == null) {
+ return new GenericResponse<Volume>(new Status(Status.STATUS_CODE_FAILURE,
+ "No online servers found in cluster [" + clusterName + "]"), null);
}
-
- return new GenericResponse<Volume>(Status.STATUS_SUCCESS, glusterUtil.getVolume(volumeName, onlineServer.getName()));
+
+ return new GenericResponse<Volume>(Status.STATUS_SUCCESS, glusterUtil.getVolume(volumeName,
+ onlineServer.getName()));
}
}
@@ -189,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 + "]");
}
@@ -198,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);
}
@@ -222,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<Brick> bricks = volume.getBricks();
Status status = glusterUtil.deleteVolume(volumeName, onlineServer.getName());
if (status.isSuccess()) {
- List<String> 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);
@@ -256,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<String> brickList = Arrays.asList(bricks.split(",")); // Convert from comma separated string (query parameter)
+ List<String> 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());
}
@@ -287,15 +300,14 @@ public class VolumesResource {
return status;
}
- private Status postDelete(String volumeName, List<String> disks, boolean deleteFlag) {
- String serverName, diskName, diskInfo[];
+ private Status postDelete(String volumeName, List<Brick> 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;
}
@@ -311,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());
}
@@ -369,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()) {
@@ -385,7 +398,7 @@ public class VolumesResource {
return new Status(Status.STATUS_CODE_SUCCESS, "Directories cleaned up successfully!");
}
- private List<LogMessage> getBrickLogs(Volume volume, Brick brick, Integer lineCount)
+ private List<VolumeLogMessage> 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 +421,9 @@ public class VolumesResource {
}
// populate disk and trim other fields
- List<LogMessage> logMessages = response.getLogMessages();
- for (LogMessage logMessage : logMessages) {
- logMessage.setDisk(brick.getDiskName());
+ List<VolumeLogMessage> logMessages = response.getLogMessages();
+ for (VolumeLogMessage logMessage : logMessages) {
+ logMessage.setBrickDirectory(brick.getBrickDirectory());
logMessage.setMessage(logMessage.getMessage().trim());
logMessage.setSeverity(logMessage.getSeverity().trim());
}
@@ -420,15 +433,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();
@@ -446,12 +468,12 @@ 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;
- 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";
@@ -466,24 +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_DISK_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) {
- List<LogMessage> logMessages = null;
+ @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) {
+ List<VolumeLogMessage> 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();
+ 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;
}
@@ -498,7 +528,7 @@ public class VolumesResource {
return new LogMessageListResponse(Status.STATUS_SUCCESS, logMessages);
}
- private void filterLogsByTime(List<LogMessage> logMessages, String fromTimestamp, String toTimestamp) {
+ private void filterLogsByTime(List<VolumeLogMessage> logMessages, String fromTimestamp, String toTimestamp) {
Date fromTime = null, toTime = null;
if (fromTimestamp != null && !fromTimestamp.isEmpty()) {
@@ -509,8 +539,8 @@ public class VolumesResource {
toTime = DateUtil.stringToDate(toTimestamp);
}
- List<LogMessage> messagesToRemove = new ArrayList<LogMessage>();
- for (LogMessage logMessage : logMessages) {
+ List<VolumeLogMessage> messagesToRemove = new ArrayList<VolumeLogMessage>();
+ for (VolumeLogMessage logMessage : logMessages) {
Date logTimestamp = logMessage.getTimestamp();
if (fromTime != null && logTimestamp.before(fromTime)) {
messagesToRemove.add(logMessage);
@@ -524,13 +554,13 @@ public class VolumesResource {
logMessages.removeAll(messagesToRemove);
}
- private void filterLogsBySeverity(List<LogMessage> logMessages, String severity) {
+ private void filterLogsBySeverity(List<VolumeLogMessage> logMessages, String severity) {
if (severity == null || severity.isEmpty()) {
return;
}
- List<LogMessage> messagesToRemove = new ArrayList<LogMessage>();
- for (LogMessage logMessage : logMessages) {
+ List<VolumeLogMessage> messagesToRemove = new ArrayList<VolumeLogMessage>();
+ for (VolumeLogMessage logMessage : logMessages) {
if (!logMessage.getSeverity().equals(severity)) {
messagesToRemove.add(logMessage);
}
@@ -538,18 +568,18 @@ public class VolumesResource {
logMessages.removeAll(messagesToRemove);
}
- private List<LogMessage> getLogsForAllBricks(Volume volume, Integer lineCount) {
- List<LogMessage> logMessages;
- logMessages = new ArrayList<LogMessage>();
+ private List<VolumeLogMessage> getLogsForAllBricks(Volume volume, Integer lineCount) {
+ List<VolumeLogMessage> logMessages;
+ logMessages = new ArrayList<VolumeLogMessage>();
// 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<LogMessage>() {
+ Collections.sort(logMessages, new Comparator<VolumeLogMessage>() {
@Override
- public int compare(LogMessage message1, LogMessage message2) {
+ public int compare(VolumeLogMessage message1, VolumeLogMessage message2) {
return message1.getTimestamp().compareTo(message2.getTimestamp());
}
});
@@ -562,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());
}
@@ -584,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());
}
@@ -607,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<String> disks = new ArrayList<String>();
-// 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<String> disks = new ArrayList<String>();
+ // 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/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. <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.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<ClusterInfo> clusterDao;
+
+ public ClusterInfo getCluster(String clusterName) {
+ List<ClusterInfo> 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<ServerInfo> 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);
+ }
+ }
+}
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) {
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 82cec63b..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
@@ -55,6 +55,7 @@ public class SshUtil {
private LRUCache<String, Connection> sshConnCache = new LRUCache<String, Connection>(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";
@@ -79,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);
@@ -89,7 +101,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 +130,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) {