summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-06-01 21:01:28 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-06-02 21:38:53 +0530
commit6042cff10e50796df2d0e87e86f6aa76ea8c6e12 (patch)
tree3ab2b1692bd85365b352ea5624f97e1232496bff
parent06e316725cc61135a36cce12b603e8b0944fa775 (diff)
Design changes - introducing cluster-server mapping on gateway
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java1
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/PersistenceDao.java7
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java3
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java3
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java42
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java7
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java13
8 files changed, 51 insertions, 27 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index 37230d08..98071128 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -84,6 +84,7 @@ public class GlusterDataModelManager {
public void initializeModelWithNewCluster(String securityToken, String clusterName) {
model = new GlusterDataModel("Gluster Data Model");
setSecurityToken(securityToken);
+ setClusterName(clusterName);
Cluster cluster = new Cluster(clusterName, model);
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
index 4eba0ca9..6c75b7c5 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
@@ -70,7 +70,7 @@ public class GlusterServersClient extends AbstractClient {
public GlusterServerResponse addServer(Server discoveredServer) {
Form form = new Form();
- form.add("serverName", discoveredServer.getName());
+ form.add(RESTConstants.FORM_PARAM_SERVER_NAME, discoveredServer.getName());
return (GlusterServerResponse)postRequest(GlusterServerResponse.class, form);
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/PersistenceDao.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/PersistenceDao.java
index 6fd7ecdc..1534e78c 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/PersistenceDao.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/PersistenceDao.java
@@ -73,6 +73,11 @@ public class PersistenceDao<T> {
public Object getSingleResultFromSQL(String sqlQuery) {
return getEntityManager().createNativeQuery(sqlQuery).getSingleResult();
}
+
+ @SuppressWarnings("rawtypes")
+ public List findBySQL(String sqlQuery) {
+ return getEntityManager().createNativeQuery(sqlQuery).getResultList();
+ }
public T findById(int id) {
return getEntityManager().find(type, id);
@@ -94,7 +99,7 @@ public class PersistenceDao<T> {
return createQuery("select t from " + type.getName() + " t where " + whereClause, params).getResultList();
}
- public void save(T obj) {
+ public void save(Object obj) {
getEntityManager().persist(obj);
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java
index 3564692c..72818200 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java
@@ -39,6 +39,9 @@ public class ServerInfo {
@JoinColumn(name="cluster_id")
private ClusterInfo cluster;
+ public ServerInfo() {
+ }
+
public ServerInfo(String name) {
setName(name);
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
index eba06bf5..90692634 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
@@ -28,6 +28,7 @@ import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
@@ -37,6 +38,8 @@ import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.ServerListResponse;
import com.gluster.storage.management.core.response.StringListResponse;
+import com.gluster.storage.management.server.data.ClusterInfo;
+import com.gluster.storage.management.server.data.PersistenceDao;
import com.gluster.storage.management.server.utils.ServerUtil;
import com.sun.jersey.api.core.InjectParam;
import com.sun.jersey.spi.resource.Singleton;
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 562b630f..2650b226 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
@@ -20,6 +20,7 @@ package com.gluster.storage.management.server.resources;
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;
@@ -161,7 +162,7 @@ public class GlusterServersResource extends AbstractServersResource {
@Produces(MediaType.TEXT_XML)
public GlusterServerResponse getGlusterServer(
@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam("serverName") String serverName) {
+ @PathParam(PATH_PARAM_SERVER_NAME) String serverName) {
GlusterServer server = glusterUtil.getGlusterServer(getOnlineServer(clusterName), serverName);
Status status = Status.STATUS_SUCCESS;
if(server.isOnline()) {
@@ -199,7 +200,7 @@ public class GlusterServersResource extends AbstractServersResource {
@POST
@Produces(MediaType.TEXT_XML)
public GlusterServerResponse addServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @FormParam("serverName") String serverName) {
+ @FormParam(FORM_PARAM_SERVER_NAME) String serverName) {
ClusterInfo cluster = getCluster(clusterName);
if(cluster == null) {
return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName
@@ -216,7 +217,8 @@ public class GlusterServersResource extends AbstractServersResource {
+ "Please reset it back to the standard default password and try again."), null);
}
- if(!cluster.getServers().isEmpty()) {
+ List<ServerInfo> servers = cluster.getServers();
+ if(servers != null && !servers.isEmpty()) {
Status status = performAddServer(clusterName, serverName);
if(!status.isSuccess()) {
return new GlusterServerResponse(status, null);
@@ -226,23 +228,24 @@ public class GlusterServersResource extends AbstractServersResource {
// gluster CLI operation required. just add it to the cluster-server mapping
}
- // fetch server details
- GlusterServerResponse serverResponse = getGlusterServer(clusterName, serverName);
-
- try {
- // install public key (this will also disable password based ssh login)
- sshUtil.installPublicKey(serverName);
- } catch(Exception e) {
- return new GlusterServerResponse(new Status(Status.STATUS_CODE_PART_SUCCESS,
- "Public key could not be installed! Error: [" + e.getMessage()
- + "]"), serverResponse.getGlusterServer());
- }
-
try {
addServerToCluster(clusterName, serverName);
} catch (Exception e) {
- return new GlusterServerResponse(new Status(Status.STATUS_CODE_PART_SUCCESS, e.getMessage()),
- serverResponse.getGlusterServer());
+ return new GlusterServerResponse(new Status(Status.STATUS_CODE_PART_SUCCESS, e.getMessage()), null);
+ }
+
+ // fetch server details
+ GlusterServerResponse serverResponse = getGlusterServer(clusterName, serverName);
+
+ if (!publicKeyInstalled) {
+ try {
+ // install public key (this will also disable password based ssh login)
+ sshUtil.installPublicKey(serverName);
+ } catch (Exception e) {
+ return new GlusterServerResponse(new Status(Status.STATUS_CODE_PART_SUCCESS,
+ "Public key could not be installed! Error: [" + e.getMessage() + "]"),
+ serverResponse.getGlusterServer());
+ }
}
return serverResponse;
@@ -251,8 +254,11 @@ public class GlusterServersResource extends AbstractServersResource {
private void addServerToCluster(String clusterName, String serverName) {
EntityTransaction txn = clusterDao.startTransaction();
ClusterInfo cluster = getCluster(clusterName);
- cluster.addServer(new ServerInfo(serverName));
+ ServerInfo server = new ServerInfo(serverName);
+ server.setCluster(cluster);
try {
+ clusterDao.save(server);
+ cluster.addServer(server);
clusterDao.update(cluster);
txn.commit();
} catch (Exception e) {
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 4a72ebce..2a055ee8 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
@@ -63,10 +63,6 @@ public class ServerUtil {
this.sshUtil = sshUtil;
}
- public SshUtil getSshUtil() {
- return sshUtil;
- }
-
public ProcessResult executeGlusterScript(boolean runInForeground, String scriptName, List<String> arguments) {
List<String> command = new ArrayList<String>();
@@ -119,7 +115,8 @@ public class ServerUtil {
}
private String executeOnServer(String serverName, String commandWithArgs) {
- ProcessResult result = getSshUtil().executeRemote(serverName, commandWithArgs);
+ ProcessResult result = sshUtil.executeRemote(serverName, commandWithArgs);
+
if (!result.isSuccess()) {
throw new GlusterRuntimeException("Command [" + commandWithArgs + "] failed on [" + serverName
+ "] with error [" + result.getExitValue() + "][" + result.getOutput() + "]");
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 04639ba9..c0dd4a96 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
@@ -291,7 +291,11 @@ public class SshUtil {
public ProcessResult executeRemoteWithPassword(String serverName, String command) {
return executeCommand(getConnectionWithPassword(serverName), command);
}
-
+
+ private ProcessResult executeRemoteWithPubKey(String serverName, String command) {
+ return executeCommand(getConnection(serverName), command);
+ }
+
/**
* Executes given command on remote machine using public key authentication
*
@@ -300,7 +304,12 @@ public class SshUtil {
* @return Result of remote execution
*/
public ProcessResult executeRemote(String serverName, String command) {
- return executeCommand(getConnection(serverName), command);
+ try {
+ return executeRemoteWithPubKey(serverName, command);
+ } catch(ConnectionException e) {
+ // Couldn't connect with public key. Try with default password.
+ return executeRemoteWithPassword(serverName, command);
+ }
}
/**