summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.server/.project1
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ClusterInfo.java4
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java4
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java5
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java79
5 files changed, 71 insertions, 22 deletions
diff --git a/src/com.gluster.storage.management.server/.project b/src/com.gluster.storage.management.server/.project
index 259b3726..86d34a3b 100644
--- a/src/com.gluster.storage.management.server/.project
+++ b/src/com.gluster.storage.management.server/.project
@@ -37,5 +37,6 @@
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ <nature>org.python.pydev.pythonNature</nature>
</natures>
</projectDescription>
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ClusterInfo.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ClusterInfo.java
index 093423f0..3b3401e3 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ClusterInfo.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ClusterInfo.java
@@ -62,6 +62,10 @@ public class ClusterInfo {
public List<ServerInfo> getServers() {
return servers;
}
+
+ public void addServer(ServerInfo server) {
+ servers.add(server);
+ }
public static void main(String args[]) {
AnnotationConfiguration config = new AnnotationConfiguration();
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java
index 88ce51ca..3564692c 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/ServerInfo.java
@@ -39,6 +39,10 @@ public class ServerInfo {
@JoinColumn(name="cluster_id")
private ClusterInfo cluster;
+ public ServerInfo(String name) {
+ setName(name);
+ }
+
public void setId(Integer id) {
this.id = id;
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java
index 53618610..11a77e87 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java
@@ -37,6 +37,8 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import org.springframework.stereotype.Component;
+
import com.gluster.storage.management.core.exceptions.ConnectionException;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.Status;
@@ -46,10 +48,13 @@ import com.gluster.storage.management.server.data.PersistenceDao;
import com.gluster.storage.management.server.data.ServerInfo;
import com.gluster.storage.management.server.utils.GlusterUtil;
import com.sun.jersey.api.core.InjectParam;
+import com.sun.jersey.spi.resource.Singleton;
/**
*
*/
+@Component
+@Singleton
@Path(RESOURCE_PATH_CLUSTERS)
public class ClustersResource {
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 9e7e8025..be6c326a 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
@@ -26,6 +26,7 @@ import static com.gluster.storage.management.core.constants.RESTConstants.RESOUR
import java.util.ArrayList;
import java.util.List;
+import javax.persistence.EntityTransaction;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
@@ -66,6 +67,7 @@ public class GlusterServersResource extends AbstractServersResource {
protected void fetchServerDetails(GlusterServer server) {
try {
+ server.setStatus(SERVER_STATUS.ONLINE);
super.fetchServerDetails(server);
} catch(ConnectionException e) {
server.setStatus(SERVER_STATUS.OFFLINE);
@@ -85,18 +87,19 @@ public class GlusterServersResource extends AbstractServersResource {
// Doesn't use cache
public GlusterServer getNewOnlineServer(String clusterName) {
// no known online server for this cluster. find one.
- ClusterInfo cluster = clusterDao.findBy("name = ?1", clusterName).get(0);
+ ClusterInfo cluster = getCluster(clusterName);
+ if(cluster == null) {
+ return null;
+ }
+
for(ServerInfo serverInfo : cluster.getServers()) {
GlusterServer server = new GlusterServer(serverInfo.getName());
- server.setStatus(SERVER_STATUS.ONLINE);
- try {
- fetchServerDetails(server);
+ fetchServerDetails(server);
+ if(server.isOnline()) {
// server is online. add it to cache and return
clusterServerCache.put(clusterName, server);
- return server;
- } catch(ConnectionException e) {
- // server is offline. check the next server.
}
+ return server;
}
// no online server found.
@@ -171,30 +174,62 @@ public class GlusterServersResource extends AbstractServersResource {
@Produces(MediaType.TEXT_XML)
public GlusterServerResponse addServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
@FormParam("serverName") String serverName) {
- GlusterServer onlineServer = getOnlineServer(clusterName);
- if(onlineServer == null) {
- return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE,
- "No online server found in cluster [" + clusterName + "]"), null);
+ ClusterInfo cluster = getCluster(clusterName);
+ if(cluster == null) {
+ return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName
+ + "] doesn't exist!"), null);
}
- Status status;
- try {
- status = glusterUtil.addServer(serverName, onlineServer.getName());
- } catch(ConnectionException e) {
- onlineServer = getNewOnlineServer(clusterName);
+ if(!cluster.getServers().isEmpty()) {
+ GlusterServer onlineServer = getOnlineServer(clusterName);
if(onlineServer == null) {
return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE,
"No online server found in cluster [" + clusterName + "]"), null);
}
- status = glusterUtil.addServer(serverName, onlineServer.getName());
- }
+
+ Status status;
+ try {
+ status = glusterUtil.addServer(serverName, onlineServer.getName());
+ } catch(ConnectionException e) {
+ onlineServer = getNewOnlineServer(clusterName);
+ if(onlineServer == null) {
+ return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE,
+ "No online server found in cluster [" + clusterName + "]"), null);
+ }
+ status = glusterUtil.addServer(serverName, onlineServer.getName());
+ }
- if (!status.isSuccess()) {
- return new GlusterServerResponse(status, null);
+ if (!status.isSuccess()) {
+ return new GlusterServerResponse(status, null);
+ }
+ } else {
+ // this is the first server to be added to the cluster, which means
+ // no gluster operation required. just add it to the cluster-server mapping
}
- return new GlusterServerResponse(Status.STATUS_SUCCESS, getGlusterServer(clusterName, serverName)
- .getGlusterServer());
+ EntityTransaction txn = clusterDao.startTransaction();
+ // Inside a transaction, we must fetch the ClusterInfo object again.
+ cluster = getCluster(clusterName);
+ cluster.addServer(new ServerInfo(serverName));
+ try {
+ txn.commit();
+ } catch (Exception e) {
+ txn.rollback();
+ return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE,
+ "Exception while trying to save cluster-server mapping [" + clusterName + "][" + serverName
+ + "]: [" + e.getMessage() + "]"), null);
+ }
+
+ return getGlusterServer(clusterName, serverName);
+ }
+
+ private ClusterInfo getCluster(String clusterName) {
+ List<ClusterInfo> clusters = clusterDao.findBy("name = ?1", clusterName);
+ if(clusters.size() == 0) {
+ return null;
+ }
+
+ return clusters.get(0);
}
@DELETE