diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-07-19 17:02:01 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-07-19 17:02:55 +0530 |
| commit | 12b2aa9422083829f85dbee7696d551b5dc80187 (patch) | |
| tree | 785d49bc13f596aa5f290a304c84992228f53685 /src | |
| parent | 996ad1d5f101a3214d6af3ec2017c309259ade83 (diff) | |
Bug 3189 - REST API-Gateway stops responding with exceptions if we try to delete cluster with server
Diffstat (limited to 'src')
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(); |
