summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhandapani <dhandapani@gluster.com>2011-06-03 11:13:56 +0530
committerDhandapani <dhandapani@gluster.com>2011-06-03 11:13:56 +0530
commitadc697295d9aff3f66ff2a77de5395dee37a5ad0 (patch)
tree3ab2b1692bd85365b352ea5624f97e1232496bff
parentf67bcfbb79f2654781c62e59908ca84d1813b7e2 (diff)
parent6042cff10e50796df2d0e87e86f6aa76ea8c6e12 (diff)
Merge branch 'master' of git@github.com:gluster/console
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java19
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java6
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java6
-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.java84
-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.java7
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java13
10 files changed, 112 insertions, 38 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 7566850a..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);
@@ -290,6 +291,15 @@ public class GlusterDataModelManager {
listener.serverAdded(server);
}
}
+
+ public void addDiscoveredServer(Server server) {
+ Cluster cluster = model.getCluster();
+ cluster.addDiscoveredServer(server);
+
+ for (ClusterListener listener : listeners) {
+ listener.discoveredServerAdded(server);;
+ }
+ }
public void removeDiscoveredServer(Server server) {
Cluster cluster = model.getCluster();
@@ -299,6 +309,15 @@ public class GlusterDataModelManager {
listener.discoveredServerRemoved(server);
}
}
+
+ public void removeGlusterServer(GlusterServer server) {
+ Cluster cluster = model.getCluster();
+ cluster.removeServer(server);
+
+ for (ClusterListener listener : listeners) {
+ listener.serverRemoved(server);
+ }
+ }
public void deleteVolume(Volume volume) {
Cluster cluster = model.getCluster();
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 f5609584..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,14 +70,12 @@ 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);
}
public Status removeServer(String serverName) {
- MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
- queryParams.add(RESTConstants.QUERY_PARAM_SERVER_NAME, serverName);
- return (Status) deleteResource(Status.class, queryParams);
+ return (Status) deleteSubResource(serverName, Status.class);
}
public static void main(String[] args) {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java
index 93f28e11..060b3c38 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java
@@ -27,6 +27,7 @@ import org.eclipse.jface.viewers.ISelection;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.GlusterServersClient;
import com.gluster.storage.management.core.model.Cluster;
+import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
@@ -61,6 +62,11 @@ public class RemoveServerAction extends AbstractActionDelegate {
if (status.isSuccess()) {
showInfoDialog(actionDesc, "Server removed successfully");
+ GlusterServer glusterServer = (GlusterServer) server;
+ GlusterDataModelManager.getInstance().removeGlusterServer(glusterServer);
+ if (glusterServer.isOnline()) {
+ GlusterDataModelManager.getInstance().addDiscoveredServer(server);
+ }
} else {
showErrorDialog(actionDesc, "Server could not be removed. Error: [" + status + "]");
}
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 15992608..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,40 +228,63 @@ 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());
+ addServerToCluster(clusterName, serverName);
+ } catch (Exception e) {
+ return new GlusterServerResponse(new Status(Status.STATUS_CODE_PART_SUCCESS, e.getMessage()), null);
}
- try {
- addServerToCluster(clusterName, serverName);
- } catch (Exception e){
- return new GlusterServerResponse(new Status(Status.STATUS_CODE_PART_SUCCESS,
- "Exception while trying to save cluster-server mapping [" + clusterName + "][" + serverName
- + "]: [" + e.getMessage() + "]"), serverResponse.getGlusterServer());
+ // 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;
}
private void addServerToCluster(String clusterName, String serverName) {
- ClusterInfo cluster;
EntityTransaction txn = clusterDao.startTransaction();
- // Inside a transaction, we must fetch the ClusterInfo object again.
- cluster = getCluster(clusterName);
- cluster.addServer(new ServerInfo(serverName));
+ 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 commit transaction! Error: " + e.getMessage(), e);
+ 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);
+ 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);
}
}
@@ -274,6 +299,7 @@ public class GlusterServersResource extends AbstractServersResource {
@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) {
GlusterServer onlineServer = getOnlineServer(clusterName);
@@ -291,10 +317,18 @@ public class GlusterServersResource extends AbstractServersResource {
return new Status(Status.STATUS_CODE_FAILURE,
"No online server found in cluster [" + clusterName + "]");
}
- return glusterUtil.removeServer(onlineServer.getName(), serverName);
+ status = glusterUtil.removeServer(onlineServer.getName(), serverName);
+ }
+
+ if (status.isSuccess()) {
+ try {
+ removeServerFromCluster(clusterName, serverName);
+ } catch (Exception e) {
+ return new Status(Status.STATUS_CODE_PART_SUCCESS, e.getMessage());
+ }
}
- // TODO: Remove the server from cluster-server mapping
+ return status;
}
private void setGlusterUtil(GlusterUtil glusterUtil) {
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 6005f6dd..77549add 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
@@ -506,7 +506,7 @@ System.out.println(brickDir);
}
public Status removeServer(String existingServer, String serverName) {
- return new Status(sshUtil.executeRemote(existingServer, "gluster peer detach " + serverName));
+ return new Status(sshUtil.executeRemote(existingServer, "gluster --mode=script peer detach " + serverName));
}
public static void main(String args[]) {
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);
+ }
}
/**