summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhandapani <dhandapani@gluster.com>2011-05-13 14:20:20 +0530
committerDhandapani <dhandapani@gluster.com>2011-05-16 12:07:16 +0530
commitb6307c6c12a9240a1652c9e3586f54db69ef7730 (patch)
tree24557fc3a3fb443e19b28e605df74e8747481db7
parent182879f6050cf88ab4651d604cab9412fad30436 (diff)
Story #20: Remove Server UI, Client and Resource changes
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java8
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java12
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java1
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java64
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java10
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java5
6 files changed, 90 insertions, 10 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 a077c721..d532c754 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
@@ -216,12 +216,12 @@ public abstract class AbstractClient {
.post(responseClass, requestObject);
}
- @SuppressWarnings("unchecked")
- protected Object deleteResource(Class responseClass, Form form) {
- return resource.header(HTTP_HEADER_AUTH, authHeader).delete(responseClass);
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ protected Object deleteResource(Class responseClass, MultivaluedMap<String, String> queryParams) {
+ return resource.queryParams(queryParams).header(HTTP_HEADER_AUTH, authHeader).delete(responseClass);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
protected Object deleteSubResource(String subResourceName, Class responseClass,
MultivaluedMap<String, String> queryParams) {
return resource.path(subResourceName).queryParams(queryParams).header(HTTP_HEADER_AUTH, authHeader)
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 8ae64016..d4809daf 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
@@ -20,13 +20,17 @@ package com.gluster.storage.management.client;
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.Response;
import com.gluster.storage.management.core.model.Server;
+import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
import com.gluster.storage.management.core.response.GlusterServerResponse;
import com.sun.jersey.api.representation.Form;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
public class GlusterServersClient extends AbstractClient {
private static final String RESOURCE_NAME = "/cluster/servers";
@@ -60,6 +64,12 @@ public class GlusterServersClient extends AbstractClient {
form.add("serverName", discoveredServer.getName());
return (GlusterServerResponse)postRequest(GlusterServerResponse.class, form);
}
+
+ public Status removeServer(String serverName) {
+ MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
+ queryParams.add(RESTConstants.QUERY_PARAM_SERVER_NAME, serverName);
+ return (Status) deleteResource(Status.class, queryParams);
+ }
public static void main(String[] args) {
UsersClient usersClient = new UsersClient();
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
index 6c7b69da..d5c1bad3 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
@@ -55,6 +55,7 @@ public class RESTConstants {
public static final String QUERY_PARAM_FROM_TIMESTAMP = "fromTimestamp";
public static final String QUERY_PARAM_TO_TIMESTAMP = "toTimestamp";
public static final String QUERY_PARAM_DOWNLOAD = "download";
+ public static final String QUERY_PARAM_SERVER_NAME = "serverName";
// Running tasks resource
public static final String RESOURCE_PATH_RUNNING_TASKS = "/cluster/runningtasks";
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 b7ed0548..acbba6c0 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
@@ -18,16 +18,78 @@
*******************************************************************************/
package com.gluster.storage.management.gui.actions;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+
+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.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 GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
+
@Override
protected void performAction(IAction action) {
- System.out.println("Running [" + this.getClass().getSimpleName() + "]");
+ final String actionDesc = action.getDescription();
+
+ List<String> configuredVolumes = getServerVolumeNames(server.getName());
+
+ if (configuredVolumes.size() > 0) {
+ String volumes = StringUtil.ListToString(configuredVolumes, ", ");
+ showErrorDialog(actionDesc, "Server cannot be removed as it is being used by following volumes: ["
+ + volumes + "]");
+ return;
+ }
+
+ boolean confirmed = showConfirmDialog(actionDesc,
+ "Are you sure you want to remove this server [" + server.getName() + "] ?");
+ if (!confirmed) {
+ return;
+ }
+
+ GlusterServersClient client = new GlusterServersClient(modelManager.getSecurityToken());
+ Status status = client.removeServer(server.getName());
+
+ if (status.isSuccess()) {
+ showInfoDialog(actionDesc, "Server removed successfully");
+ } else {
+ showErrorDialog(actionDesc, "Server could not be removed. Error: [" + status + "]");
+ }
+ }
+
+ private List<String> getServerVolumeNames(String serverName) {
+ Cluster cluster = GlusterDataModelManager.getInstance().getModel().getCluster();
+ List<String> volumeNames = new ArrayList<String>();
+ for (Volume volume : cluster.getVolumes()) {
+ for (String brick : volume.getDisks()) {
+ if (serverName.equals(brick.split(":")[0])) {
+ volumeNames.add(volume.getName());
+ break;
+ }
+ }
+ }
+ return volumeNames;
}
@Override
public void dispose() {
System.out.println("Disposing [" + this.getClass().getSimpleName() + "]");
}
+
+ @Override
+ public void selectionChanged(IAction action, ISelection selection) {
+ super.selectionChanged(action, selection);
+ if (selectedEntity instanceof Server) {
+ server = (Server) selectedEntity;
+ }
+ }
}
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 c1f0435c..4f2850ee 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
@@ -20,12 +20,14 @@ package com.gluster.storage.management.server.resources;
import java.util.List;
+import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Component;
@@ -34,10 +36,8 @@ import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
import com.gluster.storage.management.core.response.GlusterServerResponse;
-import com.gluster.storage.management.core.utils.ProcessResult;
import com.gluster.storage.management.server.utils.GlusterUtil;
import com.sun.jersey.spi.resource.Singleton;
@@ -101,6 +101,12 @@ public class GlusterServersResource extends AbstractServersResource {
}
return new GlusterServerResponse(Status.STATUS_SUCCESS, getGlusterServer(serverName));
}
+
+ @DELETE
+ @Produces(MediaType.TEXT_XML)
+ public Status removeServer(@QueryParam("serverName") String serverName) {
+ return glusterUtil.removeServer(serverName);
+ }
public static void main(String[] args) {
GlusterServersResource glusterServersResource = new GlusterServersResource();
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
index 14117aff..7299a135 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
@@ -486,6 +486,9 @@ public class GlusterUtil {
return new Status(processUtil.executeCommand(command));
}
+ public Status removeServer(String serverName) {
+ return new Status(processUtil.executeCommand("gluster", "peer", "detach", serverName));
+ }
public static void main(String args[]) {
// List<String> names = new GlusterUtil().getGlusterServerNames();
@@ -496,6 +499,4 @@ public class GlusterUtil {
Status status = new GlusterUtil().addBricks("Volume3", disks);
System.out.println(status);
}
-
-
}