summaryrefslogtreecommitdiffstats
path: root/src
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 19:56:58 +0530
commit9f9a2c2850f4b2d1b5ac2ad44750e0b82282e4b2 (patch)
tree864bbf245f34cc2ab34846d6ea342088c1e7c416 /src
parentec38505c37bd8482ebe7b8d00611629790877cbe (diff)
Design changes - introducing cluster-server mapping on gateway
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java48
1 files changed, 38 insertions, 10 deletions
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..562b630f 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
@@ -240,26 +240,45 @@ public class GlusterServersResource extends AbstractServersResource {
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());
+ } catch (Exception e) {
+ return new GlusterServerResponse(new Status(Status.STATUS_CODE_PART_SUCCESS, 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);
+ ClusterInfo cluster = getCluster(clusterName);
cluster.addServer(new ServerInfo(serverName));
try {
+ 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 +293,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 +311,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) {