summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-03-10 16:14:14 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-03-10 16:14:14 +0530
commit70b348d037c7e02603c9fb34061888655e5bef73 (patch)
treefa97167ed542c80e421a085ba15165bbe0ef0e3b
parent69841676b7cbd2c8ac47b32d6baf87284f9d0efa (diff)
Introduced add server functionality
-rw-r--r--com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java10
-rw-r--r--com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java21
-rw-r--r--com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GenericResponse.java11
-rw-r--r--com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java89
-rw-r--r--com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java11
-rw-r--r--com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ProcessResult.java57
-rw-r--r--com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java18
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());
}
}