summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java5
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java10
-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/PersistenceDao.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java1
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java5
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java64
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java19
8 files changed, 70 insertions, 37 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index a5e480af..9a27b085 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -317,6 +317,11 @@ public class GlusterDataModelManager {
for (ClusterListener listener : listeners) {
listener.serverRemoved(server);
}
+
+ // add it to discovered servers list
+ Server removedServer = new Server();
+ removedServer.copyFrom(server);
+ addDiscoveredServer(removedServer);
}
public void deleteVolume(Volume volume) {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java
index 060b3c38..b0b863ab 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java
@@ -28,14 +28,13 @@ import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.GlusterServersClient;
import com.gluster.storage.management.core.model.Cluster;
import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.utils.StringUtil;
public class RemoveServerAction extends AbstractActionDelegate {
- private Server server;
+ private GlusterServer server;
private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
@Override
@@ -64,9 +63,6 @@ public class RemoveServerAction extends AbstractActionDelegate {
showInfoDialog(actionDesc, "Server removed successfully");
GlusterServer glusterServer = (GlusterServer) server;
GlusterDataModelManager.getInstance().removeGlusterServer(glusterServer);
- if (glusterServer.isOnline()) {
- GlusterDataModelManager.getInstance().addDiscoveredServer(server);
- }
} else {
showErrorDialog(actionDesc, "Server could not be removed. Error: [" + status + "]");
}
@@ -94,8 +90,8 @@ public class RemoveServerAction extends AbstractActionDelegate {
@Override
public void selectionChanged(IAction action, ISelection selection) {
super.selectionChanged(action, selection);
- if (selectedEntity instanceof Server) {
- server = (Server) selectedEntity;
+ if (selectedEntity instanceof GlusterServer) {
+ server = (GlusterServer) selectedEntity;
}
}
}
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/PersistenceDao.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/PersistenceDao.java
index 1534e78c..85fefcdf 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/PersistenceDao.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/data/PersistenceDao.java
@@ -107,7 +107,7 @@ public class PersistenceDao<T> {
return getEntityManager().merge(obj);
}
- public void delete(T obj) {
+ public void delete(Object obj) {
getEntityManager().remove(obj);
}
}
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 c5f2da69..86af26fb 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
@@ -126,6 +126,7 @@ public class ClustersResource {
}
cluster.setServers(servers);
clusterDao.save(cluster);
+ txn.commit();
return Status.STATUS_SUCCESS;
} catch(Exception e) {
txn.rollback();
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
index 90692634..8afc23a1 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
@@ -38,10 +38,6 @@ import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.ServerListResponse;
import com.gluster.storage.management.core.response.StringListResponse;
-import com.gluster.storage.management.server.data.ClusterInfo;
-import com.gluster.storage.management.server.data.PersistenceDao;
-import com.gluster.storage.management.server.utils.ServerUtil;
-import com.sun.jersey.api.core.InjectParam;
import com.sun.jersey.spi.resource.Singleton;
@Component
@@ -53,7 +49,6 @@ public class DiscoveredServersResource extends AbstractServersResource {
public List<String> getDiscoveredServerNames() {
return discoveredServerNames;
}
-
@GET
@Produces(MediaType.TEXT_XML)
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 2650b226..20152691 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
@@ -275,6 +275,7 @@ public class GlusterServersResource extends AbstractServersResource {
for(ServerInfo server : servers) {
if(server.getName().equals(serverName)) {
servers.remove(server);
+ clusterDao.delete(server);
break;
}
}
@@ -302,32 +303,57 @@ public class GlusterServersResource extends AbstractServersResource {
@Path("{" + PATH_PARAM_SERVER_NAME + "}")
public Status removeServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
@PathParam(PATH_PARAM_SERVER_NAME) String serverName) {
- GlusterServer onlineServer = getOnlineServer(clusterName);
- if(onlineServer == null) {
- return new Status(Status.STATUS_CODE_FAILURE,
- "No online server found in cluster [" + clusterName + "]");
+ ClusterInfo cluster = getCluster(clusterName);
+ if(cluster == null) {
+ return new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + "] doesn't exist!");
}
-
- Status status;
- try {
- return glusterUtil.removeServer(onlineServer.getName(), serverName);
- } catch(ConnectionException e) {
- onlineServer = getNewOnlineServer(clusterName);
- if(onlineServer == null) {
- return new Status(Status.STATUS_CODE_FAILURE,
- "No online server found in cluster [" + clusterName + "]");
- }
- status = glusterUtil.removeServer(onlineServer.getName(), serverName);
+
+ List<ServerInfo> servers = cluster.getServers();
+ if(servers == null || servers.isEmpty()) {
+ return new Status(Status.STATUS_CODE_FAILURE, "Server [" + serverName + "] is not attached to cluster ["
+ + clusterName + "]!");
}
- if (status.isSuccess()) {
+ Status status = Status.STATUS_SUCCESS;
+ if(servers.size() == 1) {
+ // Only one server mapped to the cluster, no "peer detach" required.
+ // remove the cached online server for this cluster if present
+ clusterServerCache.remove(clusterName);
+ } else {
+ GlusterServer onlineServer = getOnlineServer(clusterName);
+
+ if (onlineServer == null) {
+ return new Status(Status.STATUS_CODE_FAILURE, "No online server found in cluster [" + clusterName + "]");
+ }
+
try {
- removeServerFromCluster(clusterName, serverName);
- } catch (Exception e) {
- return new Status(Status.STATUS_CODE_PART_SUCCESS, e.getMessage());
+ return glusterUtil.removeServer(onlineServer.getName(), serverName);
+ } catch (ConnectionException e) {
+ // online server has gone offline! try with a different one.
+ onlineServer = getNewOnlineServer(clusterName);
+ if (onlineServer == null) {
+ return new Status(Status.STATUS_CODE_FAILURE, "No online server found in cluster [" + clusterName
+ + "]");
+ }
+ status = glusterUtil.removeServer(onlineServer.getName(), serverName);
+ if(!status.isSuccess()) {
+ return status;
+ }
+ }
+
+ if(onlineServer.getName().equals(serverName)) {
+ // since the cached server has been removed from the cluster, remove it from the cache
+ clusterServerCache.remove(clusterName);
}
}
+
+ try {
+ removeServerFromCluster(clusterName, serverName);
+ } catch (Exception e) {
+ return new Status(Status.STATUS_CODE_PART_SUCCESS, e.getMessage());
+ }
+
return status;
}
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 480b9bb4..7e992dc8 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
@@ -21,7 +21,6 @@
package com.gluster.storage.management.server.tasks;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,6 +28,8 @@ import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.utils.ProcessResult;
+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;
@@ -51,18 +52,26 @@ public class ServerDiscoveryTask {
@Autowired
private String environment;
+
+ @Autowired
+ private PersistenceDao<ClusterInfo> clusterDao;
public void discoverServers() {
List<String> serverNameList = new ArrayList<String>();
ProcessResult result = serverUtil.executeGlusterScript(true, environment + SCRIPT_NAME_SFX, new ArrayList<String>());
if(result.isSuccess()) {
+ List<String> existingServers = clusterDao.findBySQL("select name from server_info");
String serverNames = result.getOutput();
String[] parts = serverNames.split(CoreConstants.NEWLINE);
- serverNameList = Arrays.asList(parts);
- } else {
- // TODO: User logger to log the message
- System.err.println("Server Discovery Script failed: " + result);
+ for(String serverName : parts) {
+ // The server discovery mechanism will return every server that has not been "peer probed". However we
+ // need to filter out those servers that are the "first" server of a new cluster, and hence are still
+ // not peer probed.
+ if(!existingServers.contains(serverName)) {
+ serverNameList.add(serverName);
+ }
+ }
}
discoveredServersResource.setDiscoveredServerNames(serverNameList);