summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-07-19 17:02:01 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-07-19 17:02:55 +0530
commit12b2aa9422083829f85dbee7696d551b5dc80187 (patch)
tree785d49bc13f596aa5f290a304c84992228f53685 /src
parent996ad1d5f101a3214d6af3ec2017c309259ade83 (diff)
Bug 3189 - REST API-Gateway stops responding with exceptions if we try to delete cluster with server
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java20
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java10
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java36
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java3
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java12
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java4
6 files changed, 45 insertions, 40 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
index 64a9a653..45d75bba 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
@@ -207,8 +207,7 @@ public abstract class AbstractClient {
* Expected class of the response
* @return Object of responseClass received as a result of the GET request
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchResource(MultivaluedMap<String, String> queryParams, Class responseClass) {
+ protected <T> T fetchResource(MultivaluedMap<String, String> queryParams, Class<T> responseClass) {
return fetchResource(resource, queryParams, responseClass);
}
@@ -220,10 +219,8 @@ public abstract class AbstractClient {
* Expected class of the response
* @return Object of responseClass received as a result of the GET request
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchResource(Class responseClass) {
- Object response = fetchResource(resource, NO_PARAMS, responseClass);
- return response;
+ protected <T> T fetchResource(Class<T> responseClass) {
+ return fetchResource(resource, NO_PARAMS, responseClass);
}
/**
@@ -236,8 +233,7 @@ public abstract class AbstractClient {
* Expected class of the response
* @return Object of responseClass received as a result of the GET request on the sub-resource
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchSubResource(String subResourceName, Class responseClass) {
+ protected <T> T fetchSubResource(String subResourceName, Class<T> responseClass) {
return fetchResource(resource.path(subResourceName), NO_PARAMS, responseClass);
}
@@ -257,9 +253,8 @@ public abstract class AbstractClient {
* Expected class of the response
* @return Object of responseClass received as a result of the GET request on the sub-resource
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchSubResource(String subResourceName, MultivaluedMap<String, String> queryParams,
- Class responseClass) {
+ protected <T> T fetchSubResource(String subResourceName, MultivaluedMap<String, String> queryParams,
+ Class<T> responseClass) {
return fetchResource(resource.path(subResourceName), queryParams, responseClass);
}
@@ -280,8 +275,7 @@ public abstract class AbstractClient {
* the Object to be submitted
* @return Object of given class received as response
*/
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected Object postObject(Class responseClass, Object requestObject) {
+ protected <T> T postObject(Class<T> responseClass, Object requestObject) {
return resource.type(MediaType.APPLICATION_XML).header(HTTP_HEADER_AUTH, authHeader)
.accept(MediaType.APPLICATION_XML).post(responseClass, requestObject);
}
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 0abccda5..b9fe7b31 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
@@ -24,12 +24,16 @@ import static com.gluster.storage.management.core.constants.RESTConstants.RESOUR
import java.net.URI;
import java.util.List;
+import javax.ws.rs.core.MultivaluedMap;
+
import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.Server;
+import com.gluster.storage.management.core.model.ServerStats;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.sun.jersey.api.representation.Form;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
public class GlusterServersClient extends AbstractClient {
@@ -79,6 +83,12 @@ public class GlusterServersClient extends AbstractClient {
public void removeServer(String serverName) {
deleteSubResource(serverName);
}
+
+ public ServerStats getAggregatedCPUStats() {
+ MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
+ queryParams.add(RESTConstants.QUERY_PARAM_TYPE, RESTConstants.STATISTICS_TYPE_CPU);
+ return fetchSubResource(RESTConstants.RESOURCE_STATISTICS, queryParams, ServerStats.class);
+ }
public static void main(String[] args) {
UsersClient usersClient = new UsersClient();
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java
index 431de952..6f2e51c4 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java
@@ -37,8 +37,11 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
+import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
+import com.gluster.storage.management.core.exceptions.GlusterValidationException;
import com.gluster.storage.management.core.response.ClusterNameListResponse;
import com.gluster.storage.management.server.data.ClusterInfo;
import com.gluster.storage.management.server.services.ClusterService;
@@ -54,6 +57,7 @@ import com.sun.jersey.spi.resource.Singleton;
public class ClustersResource extends AbstractResource {
@InjectParam
private ClusterService clusterService;
+ private static final Logger logger = Logger.getLogger(ClustersResource.class);
@GET
@Produces(MediaType.APPLICATION_XML)
@@ -90,52 +94,40 @@ public class ClustersResource extends AbstractResource {
public Response registerCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName,
@FormParam(FORM_PARAM_SERVER_NAME) String knownServer) {
if(clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
+ throw new GlusterValidationException("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
}
if(knownServer == null || knownServer.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_SERVER_NAME + "] is missing in request!");
+ throw new GlusterValidationException("Parameter [" + FORM_PARAM_SERVER_NAME + "] is missing in request!");
}
if(clusterService.getCluster(clusterName) != null) {
- return badRequestResponse("Cluster [" + clusterName + "] already exists!");
+ throw new GlusterValidationException("Cluster [" + clusterName + "] already exists!");
}
ClusterInfo mappedCluster = clusterService.getClusterForServer(knownServer);
if(mappedCluster != null) {
- return badRequestResponse("Server [" + knownServer + "] is already present in cluster ["
+ throw new GlusterValidationException("Server [" + knownServer + "] is already present in cluster ["
+ mappedCluster.getName() + "]!");
}
- try {
- clusterService.registerCluster(clusterName, knownServer);
- return noContentResponse(clusterName);
- } catch(Exception e) {
- // TODO: Log the exception
- return errorResponse("Exception while trying to register cluster [" + clusterName + "] using server ["
- + knownServer + "]: [" + e.getMessage() + "]");
- }
+ clusterService.registerCluster(clusterName, knownServer);
+ return noContentResponse(clusterName);
}
@Path("{" + PATH_PARAM_CLUSTER_NAME + "}")
@DELETE
public Response unregisterCluster(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
if(clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
+ throw new GlusterValidationException("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
}
ClusterInfo cluster = clusterService.getCluster(clusterName);
if(cluster == null) {
- return badRequestResponse("Cluster [" + clusterName + "] does not exist!");
+ throw new GlusterValidationException("Cluster [" + clusterName + "] does not exist!");
}
- try {
- clusterService.unregisterCluster(cluster);
- return noContentResponse();
- } catch (Exception e) {
- // TODO: Log the exception
- return errorResponse("Exception while trying to unregister cluster [" + clusterName + "]: ["
- + e.getMessage() + "]");
- }
+ clusterService.unregisterCluster(cluster);
+ return noContentResponse();
}
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java
index 09391841..17aeef2b 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java
@@ -31,8 +31,8 @@ import static com.gluster.storage.management.core.constants.RESTConstants.RESOUR
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_STATISTICS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_TASKS;
import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_CPU;
-import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_NETWORK;
import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_MEMORY;
+import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_NETWORK;
import java.util.ArrayList;
import java.util.List;
@@ -56,7 +56,6 @@ import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.exceptions.ConnectionException;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.gluster.storage.management.core.model.ServerStats;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
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
index b622c3a1..aa5630ae 100644
--- 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
@@ -29,6 +29,7 @@ import javax.persistence.EntityTransaction;
import javax.ws.rs.FormParam;
import javax.ws.rs.PathParam;
+import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -67,6 +68,8 @@ public class ClusterService {
private LRUCache<String, GlusterServer> onlineServerCache = new LRUCache<String, GlusterServer>(3);
+ private static final Logger logger = Logger.getLogger(ClusterService.class);
+
public void addOnlineServer(String clusterName, GlusterServer server) {
onlineServerCache.put(clusterName, server);
}
@@ -180,6 +183,7 @@ public class ClusterService {
clusterDao.save(cluster);
txn.commit();
} catch(RuntimeException e) {
+ logger.error("Error in registering cluster [" + clusterName + "] : " + e.getMessage(), e);
txn.rollback();
throw e;
}
@@ -203,7 +207,7 @@ public class ClusterService {
sshUtil.installPublicKey(serverName);
}
- public void unregisterCluster(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
+ public void unregisterCluster(String clusterName) {
ClusterInfo cluster = getCluster(clusterName);
if (cluster == null) {
@@ -216,9 +220,15 @@ public class ClusterService {
public void unregisterCluster(ClusterInfo cluster) {
EntityTransaction txn = clusterDao.startTransaction();
try {
+ for(ServerInfo server : cluster.getServers()) {
+ clusterDao.delete(server);
+ }
+ cluster.getServers().clear();
+ clusterDao.update(cluster);
clusterDao.delete(cluster);
txn.commit();
} catch (RuntimeException e) {
+ logger.error("Error in unregistering cluster [" + cluster.getName() + "] : " + e.getMessage(), e);
txn.rollback();
throw 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 55be59b4..65a338ea 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
@@ -252,7 +252,7 @@ public class ServerUtil {
throw new GlusterRuntimeException("All servers offline!");
}
- public Object fetchAggregatedCPUStats(List<String> serverNames) {
+ public ServerStats fetchAggregatedCPUStats(List<String> serverNames) {
if(serverNames == null || serverNames.size() == 0) {
throw new GlusterRuntimeException("No server names passed to fetchAggregaredCPUUsageData!");
}
@@ -277,7 +277,7 @@ public class ServerUtil {
logger.warn("Couldn't fetch CPU stats from server [" + serverName + "]!", e);
continue;
}
- List<ServerStatsRow> serverStatsRows = addServerStats(serverStats, aggregatedStats, dataCount);
+ addServerStats(serverStats, aggregatedStats, dataCount);
}
List<ServerStatsRow> rows = aggregatedStats.getRows();