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-03 16:02:58 +0530
commit207713f9096400488c29919ec66dc2b9298342e0 (patch)
tree7718f56b515c58d80eae22061e69148325474b1f /src
parent1e8eaa76b26d66fef187f1cd87cedb8665b06bd3 (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.java47
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java2
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";