diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-06-01 21:01:28 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-06-03 16:02:58 +0530 |
| commit | 207713f9096400488c29919ec66dc2b9298342e0 (patch) | |
| tree | 7718f56b515c58d80eae22061e69148325474b1f /src | |
| parent | 1e8eaa76b26d66fef187f1cd87cedb8665b06bd3 (diff) | |
Design changes - introducing cluster-server mapping on gateway
Diffstat (limited to 'src')
2 files changed, 34 insertions, 15 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 20152691..b0b0c22e 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 @@ -79,18 +79,26 @@ public class GlusterServersResource extends AbstractServersResource { } } - // uses cache public GlusterServer getOnlineServer(String clusterName) { + return getOnlineServer(clusterName, ""); + } + + // uses cache + public GlusterServer getOnlineServer(String clusterName, String exceptServerName) { GlusterServer server = clusterServerCache.get(clusterName); - if(server != null) { + if(server != null && !server.getName().equals(exceptServerName)) { return server; } - return getNewOnlineServer(clusterName); + return getNewOnlineServer(clusterName, exceptServerName); } - - // Doesn't use cache + public GlusterServer getNewOnlineServer(String clusterName) { + return getNewOnlineServer(clusterName, ""); + } + + // Doesn't use cache + public GlusterServer getNewOnlineServer(String clusterName, String exceptServerName) { // no known online server for this cluster. find one. ClusterInfo cluster = getCluster(clusterName); if(cluster == null) { @@ -100,11 +108,11 @@ public class GlusterServersResource extends AbstractServersResource { for(ServerInfo serverInfo : cluster.getServers()) { GlusterServer server = new GlusterServer(serverInfo.getName()); fetchServerDetails(server); - if(server.isOnline()) { + if(server.isOnline() && !server.getName().equals(exceptServerName)) { // server is online. add it to cache and return clusterServerCache.put(clusterName, server); + return server; } - return server; } // no online server found. @@ -115,19 +123,32 @@ public class GlusterServersResource extends AbstractServersResource { @Produces(MediaType.TEXT_XML) public GlusterServerListResponse getGlusterServers( @PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) { + List<GlusterServer> glusterServers = new ArrayList<GlusterServer>(); + + ClusterInfo cluster = getCluster(clusterName); + if(cluster == null) { + return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + + "] doesn't exist!"), null); + } + + if(cluster.getServers().size() == 0) { + return new GlusterServerListResponse(Status.STATUS_SUCCESS, glusterServers); + } + GlusterServer onlineServer = getOnlineServer(clusterName); if(onlineServer == null) { - return new GlusterServerListResponse(Status.STATUS_SUCCESS, new ArrayList<GlusterServer>()); + return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE, + "No online server found in cluster [" + clusterName + "]"), glusterServers); } - List<GlusterServer> glusterServers; try { glusterServers = glusterUtil.getGlusterServers(onlineServer); } catch(ConnectionException e) { // online server has gone offline! try with a different one. onlineServer = getNewOnlineServer(clusterName); if(onlineServer == null) { - return new GlusterServerListResponse(Status.STATUS_SUCCESS, new ArrayList<GlusterServer>()); + return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE, + "No online server found in cluster [" + clusterName + "]"), glusterServers); } glusterServers = glusterUtil.getGlusterServers(onlineServer); @@ -320,8 +341,8 @@ public class GlusterServersResource extends AbstractServersResource { // remove the cached online server for this cluster if present clusterServerCache.remove(clusterName); } else { - GlusterServer onlineServer = getOnlineServer(clusterName); - + // get an online server that is not same as the server being removed + GlusterServer onlineServer = getOnlineServer(clusterName, serverName); if (onlineServer == null) { return new Status(Status.STATUS_CODE_FAILURE, "No online server found in cluster [" + clusterName + "]"); } @@ -330,7 +351,7 @@ public class GlusterServersResource extends AbstractServersResource { return glusterUtil.removeServer(onlineServer.getName(), serverName); } catch (ConnectionException e) { // online server has gone offline! try with a different one. - onlineServer = getNewOnlineServer(clusterName); + onlineServer = getNewOnlineServer(clusterName, serverName); if (onlineServer == null) { return new Status(Status.STATUS_CODE_FAILURE, "No online server found in cluster [" + clusterName + "]"); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java index 7e992dc8..b0959445 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java @@ -32,14 +32,12 @@ import com.gluster.storage.management.server.data.ClusterInfo; import com.gluster.storage.management.server.data.PersistenceDao; import com.gluster.storage.management.server.resources.DiscoveredServersResource; import com.gluster.storage.management.server.utils.ServerUtil; -import com.sun.jersey.spi.resource.Singleton; /** * Task for auto-discovery of servers eligible to be added to the Gluster cluster. This task runs periodically and keeps * the discovered server list at a common place. The server resource can then pick it and send to client whenever * demanded. */ -@Singleton @Component public class ServerDiscoveryTask { private static final String SCRIPT_NAME_SFX = "-discover-servers.py"; |
