diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-05-13 14:20:20 +0530 | 
|---|---|---|
| committer | Dhandapani <dhandapani@gluster.com> | 2011-05-16 12:07:16 +0530 | 
| commit | b6307c6c12a9240a1652c9e3586f54db69ef7730 (patch) | |
| tree | 24557fc3a3fb443e19b28e605df74e8747481db7 | |
| parent | 182879f6050cf88ab4651d604cab9412fad30436 (diff) | |
Story #20: Remove Server UI, Client and Resource changes
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);  	} - -	  }  | 
