diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-03-10 16:14:14 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-03-10 16:14:14 +0530 |
| commit | 70b348d037c7e02603c9fb34061888655e5bef73 (patch) | |
| tree | fa97167ed542c80e421a085ba15165bbe0ef0e3b | |
| parent | 69841676b7cbd2c8ac47b32d6baf87284f9d0efa (diff) | |
Introduced add server functionality
7 files changed, 134 insertions, 83 deletions
diff --git a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java index cc368bcf..2d022055 100644 --- a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java +++ b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java @@ -5,7 +5,6 @@ import java.net.URI; import javax.ws.rs.core.MediaType;
import com.gluster.storage.management.client.utils.ClientUtil;
-import com.gluster.storage.management.core.model.AuthStatus;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.DefaultClientConfig;
@@ -66,10 +65,15 @@ public abstract class AbstractClient { return fetchResource(resource.path(subResourceName), responseClass);
}
+ protected Object postRequest(Class responseClass, Form form) {
+ return resource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).header("Authorization", authHeader)
+ .accept(MediaType.TEXT_XML).post(responseClass, form);
+ }
+
@SuppressWarnings({ "rawtypes", "unchecked" })
protected Object postRequest(String subResourceName, Class responseClass, Form form) {
- return resource.path(subResourceName).header("Authorization", authHeader).accept(MediaType.TEXT_XML)
- .post(responseClass, form);
+ return resource.path(subResourceName).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
+ .header("Authorization", authHeader).accept(MediaType.TEXT_XML).post(responseClass, form);
}
public abstract String getResourceName();
diff --git a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java index 9f1d5ce3..74da2a25 100644 --- a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java +++ b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java @@ -23,9 +23,11 @@ import java.util.List; import com.gluster.storage.management.core.model.GenericResponse; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.core.model.ServerListResponse; +import com.gluster.storage.management.core.model.Status; +import com.sun.jersey.api.representation.Form; public class GlusterServersClient extends AbstractClient { - private static final String RESOURCE_NAME = "cluster/servers"; + private static final String RESOURCE_NAME = "/cluster/servers"; public GlusterServersClient(String serverName, String user, String password) { super(serverName, user, password); @@ -44,8 +46,7 @@ public class GlusterServersClient extends AbstractClient { public Server getServer(String serverName) { @SuppressWarnings("unchecked") - GenericResponse<Server> response = (GenericResponse<Server>) fetchSubResource(serverName, - GenericResponse.class); + GenericResponse<Server> response = (GenericResponse<Server>) fetchSubResource(serverName, GenericResponse.class); return response.getData(); } @@ -53,9 +54,23 @@ public class GlusterServersClient extends AbstractClient { return ((String) fetchSubResource(serverName, String.class)); } + @SuppressWarnings("unchecked") + public Status addServer(Server discoveredServer) { + Form form = new Form(); + form.add("serverName", discoveredServer.getName()); + GenericResponse<String> response = (GenericResponse<String>) postRequest(GenericResponse.class, form); + return response.getStatus(); + } + public static void main(String[] args) { GlusterServersClient ServerResource = new GlusterServersClient("localhost", "gluster", "gluster"); List<Server> glusterServers = ServerResource.getServers(); System.out.println(glusterServers.size()); + + // Add server + Server srv = new Server(); + srv.setName("my-server"); + Status response = ServerResource.addServer(srv); + System.out.println(response.toString()); } } diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GenericResponse.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GenericResponse.java index 776a0b6c..3e1e86db 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GenericResponse.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GenericResponse.java @@ -22,11 +22,14 @@ package com.gluster.storage.management.core.model; import javax.xml.bind.annotation.XmlRootElement; -@XmlRootElement(name="response") +@XmlRootElement(name = "response") public class GenericResponse<T> implements Response<T> { private T data; private Status status; + public GenericResponse() { + } + @Override public Status getStatus() { return status; @@ -40,8 +43,10 @@ public class GenericResponse<T> implements Response<T> { setStatus(status); this.data = data; } - - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see com.gluster.storage.management.core.model.ServerResponse#getData() */ @Override diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java index a228dc90..77a3e001 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java @@ -16,55 +16,60 @@ * along with this program. If not, see * <http://www.gnu.org/licenses/>. *******************************************************************************/ -package com.gluster.storage.management.core.model;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import com.gluster.storage.management.core.utils.ProcessResult;
-
-@XmlRootElement(name="status")
+package com.gluster.storage.management.core.model; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import com.gluster.storage.management.core.utils.ProcessResult; + +@XmlRootElement(name = "status") public class Status { public static final int STATUS_CODE_SUCCESS = 0; public static final int STATUS_CODE_FAILURE = 1; public static final Status STATUS_SUCCESS = new Status(STATUS_CODE_SUCCESS, "Success"); public static final Status STATUS_FAILURE = new Status(STATUS_CODE_FAILURE, "Failure"); - - //public static final Status -
- private Integer code;
- private String message;
-
+ + // public static final Status + + private Integer code; + private String message; + public Status() { } - - public boolean isSuccess() {
- return code == STATUS_CODE_SUCCESS;
- }
-
- public Status(Integer code, String message) {
+ + public boolean isSuccess() { + return code == STATUS_CODE_SUCCESS; + } + + public Status(Integer code, String message) { this.code = code; - this.message = message;
- }
-
- public Status(ProcessResult result) {
- this.code = result.getExitValue();
- }
-
- @XmlElement(name="code", type=Integer.class) - public Integer getCode() {
- return code;
- }
-
- public void setCode(Integer executionStatus) {
- this.code = executionStatus;
- }
-
+ this.message = message; + } + + public Status(ProcessResult result) { + this.code = result.getExitValue(); + } + + @XmlElement(name = "code", type = Integer.class) + public Integer getCode() { + return code; + } + + public void setCode(Integer executionStatus) { + this.code = executionStatus; + } + @XmlElement - public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
+ public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + @Override + public String toString() { + return (isSuccess() ? "Success" : "Failure") + ": " + getMessage(); + } }
\ No newline at end of file diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java index 27f81f02..768b5ac5 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java @@ -30,7 +30,8 @@ import com.gluster.storage.management.core.constants.CoreConstants; * */ public class GlusterUtil { - public static final String HOSTNAMETAG = "hostname:"; + public static final String HOSTNAMETAG = "hostname:"; + private static final ProcessUtil processUtil = new ProcessUtil(); private static final String parse(String line, String tagName) { if (line.toLowerCase().contains(tagName)) { @@ -44,7 +45,7 @@ public class GlusterUtil { } public List<String> getGlusterServerNames() { - ProcessResult result = new ProcessUtil().executeCommand("gluster", "peer", "status"); + ProcessResult result = processUtil.executeCommand("gluster", "peer", "status"); if (!result.isSuccess()) return null; @@ -56,7 +57,11 @@ public class GlusterUtil { } } return glusterServerNames; - } + } + + public ProcessResult addServer( String serverName ) { + return processUtil.executeCommand("gluster", "peer", "probe", serverName ); + } public static void main(String args[]) { List<String> names = new GlusterUtil().getGlusterServerNames(); diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ProcessResult.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ProcessResult.java index 1b12464a..6c8b857d 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ProcessResult.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ProcessResult.java @@ -21,44 +21,43 @@ package com.gluster.storage.management.core.utils; import javax.xml.bind.annotation.XmlRootElement; /** - * Represents the result of a command execution in a separate process. - * Consists of the "exit status" of the process and output from the process. - * The output includes stdout as well as stderr streams + * Represents the result of a command execution in a separate process. Consists of the "exit status" of the process and + * output from the process. The output includes stdout as well as stderr streams */ @XmlRootElement public class ProcessResult { - public static final int SUCCESS = 0; - private int exitValue; - private String output; + public static final int SUCCESS = 0; + private int exitValue; + private String output; - // Required for JAXB de-serialization - public ProcessResult() { + // Required for JAXB de-serialization + public ProcessResult() { - } - - public ProcessResult(int exitValue, String output) { - this.exitValue = exitValue; - this.output = output; - } + } - public int getExitValue() { - return exitValue; - } + public ProcessResult(int exitValue, String output) { + this.exitValue = exitValue; + this.output = output; + } - public void setExitValue(int exitValue) { - this.exitValue = exitValue; - } + public int getExitValue() { + return exitValue; + } - public String getOutput() { - return output; - } + public void setExitValue(int exitValue) { + this.exitValue = exitValue; + } - public void setOutput(String output) { - this.output = output; - } + public String getOutput() { + return output; + } - public boolean isSuccess() { - return exitValue == SUCCESS; - } + public void setOutput(String output) { + this.output = output; + } + + public boolean isSuccess() { + return exitValue == SUCCESS; + } } diff --git a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java index 5559f4ad..e160bc2f 100644 --- a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java +++ b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java @@ -21,7 +21,9 @@ package com.gluster.storage.management.server.resources; import java.util.ArrayList; import java.util.List; +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; @@ -29,6 +31,7 @@ import javax.ws.rs.core.MediaType; import org.springframework.stereotype.Component; +import com.gluster.storage.management.core.model.GenericResponse; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.core.model.ServerListResponse; import com.gluster.storage.management.core.model.Status; @@ -85,8 +88,23 @@ public class GlusterServersResource { return result.getOutput(); } + @POST + @Produces(MediaType.TEXT_XML) + public GenericResponse<String> addServer(@FormParam("serverName") String serverName) { + ProcessResult result = glusterUtil.addServer(serverName); + + if (!result.isSuccess()) { + return new GenericResponse<String>(Status.STATUS_FAILURE, "Add server failed: [" + result.getOutput() + "]"); + } + return new GenericResponse<String>(Status.STATUS_SUCCESS, "Server added successfully!"); + } + public static void main(String[] args) { GlusterServersResource glusterServersResource = new GlusterServersResource(); System.out.println(glusterServersResource.getServerDetails()); + + // To add a server + GenericResponse<String> response = glusterServersResource.addServer("my-server"); + System.out.println(response.getData()); } } |
