diff options
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); } - - } |
