summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.client
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-06-21 21:17:09 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-06-22 18:33:12 +0530
commit5bb44641bf7b40f048e71281885efea68a3fbcbd (patch)
tree77819aab61ec66e0f7a798c186c2170aeaa11e62 /src/com.gluster.storage.management.client
parent8c5c224a98f194402f1ce413d6d1dd59946e2d52 (diff)
REST API enhancements
Diffstat (limited to 'src/com.gluster.storage.management.client')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java103
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java18
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java4
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java73
4 files changed, 94 insertions, 104 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 f38c1a5f..9d9d6c5f 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
@@ -20,11 +20,13 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import com.gluster.storage.management.client.utils.ClientUtil;
+import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.WebResource.Builder;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.representation.Form;
import com.sun.jersey.client.urlconnection.HTTPSProperties;
@@ -121,8 +123,12 @@ public abstract class AbstractClient {
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
private Object fetchResource(WebResource res, MultivaluedMap<String, String> queryParams, Class responseClass) {
- return res.queryParams(queryParams).header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML)
- .get(responseClass);
+ try {
+ return res.path("." + RESTConstants.FORMAT_XML).queryParams(queryParams)
+ .header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML).get(responseClass);
+ } catch(UniformInterfaceException e) {
+ throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
+ }
}
protected void downloadResource(WebResource res, String filePath) {
@@ -212,6 +218,29 @@ public abstract class AbstractClient {
return fetchResource(resource.path(subResourceName), queryParams, responseClass);
}
+ private void postRequest(WebResource resource, Form form) {
+ try {
+ prepareFormRequestBuilder(resource).post(form);
+ } catch (UniformInterfaceException e) {
+ throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
+ }
+ }
+
+ /**
+ * Submits given object to the resource and returns the object received as response
+ *
+ * @param responseClass
+ * Class of the object expected as response
+ * @param requestObject
+ * the Object to be submitted
+ * @return Object of given class received as response
+ */
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ protected Object postObject(Class responseClass, Object requestObject) {
+ return resource.type(MediaType.APPLICATION_XML).header(HTTP_HEADER_AUTH, authHeader)
+ .accept(MediaType.APPLICATION_XML).post(responseClass, requestObject);
+ }
+
/**
* Submits given Form using POST method to the resource and returns the object received as response
*
@@ -219,12 +248,7 @@ public abstract class AbstractClient {
* Form to be submitted
*/
protected void postRequest(Form form) {
- try {
- resource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).header(HTTP_HEADER_AUTH, authHeader)
- .accept(MediaType.APPLICATION_XML).post(form);
- } catch (UniformInterfaceException e) {
- throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
- }
+ postRequest(resource, form);
}
/**
@@ -236,14 +260,22 @@ public abstract class AbstractClient {
* Form to be submitted
*/
protected void postRequest(String subResourceName, Form form) {
+ postRequest(resource.path(subResourceName), form);
+ }
+
+ private void putRequest(WebResource resource, Form form) {
try {
- resource.path(subResourceName).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
- .header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML).post(form);
+ prepareFormRequestBuilder(resource).put(form);
} catch (UniformInterfaceException e) {
throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
}
}
+ public Builder prepareFormRequestBuilder(WebResource resource) {
+ return resource.path("." + RESTConstants.FORMAT_XML).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
+ .header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML);
+ }
+
/**
* Submits given Form using PUT method to the given sub-resource and returns the object received as response
*
@@ -253,12 +285,7 @@ public abstract class AbstractClient {
* Form to be submitted
*/
protected void putRequest(String subResourceName, Form form) {
- try {
- resource.path(subResourceName).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
- .header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML).put(form);
- } catch (UniformInterfaceException e) {
- throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
- }
+ putRequest(resource.path(subResourceName), form);
}
/**
@@ -268,12 +295,7 @@ public abstract class AbstractClient {
* Form to be submitted
*/
protected void putRequest(Form form) {
- try {
- resource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).header(HTTP_HEADER_AUTH, authHeader)
- .accept(MediaType.APPLICATION_XML).put(form);
- } catch(UniformInterfaceException e) {
- throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
- }
+ putRequest(resource, form);
}
/**
@@ -284,38 +306,27 @@ public abstract class AbstractClient {
*/
protected void putRequest(String subResourceName) {
try {
- resource.path(subResourceName).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
- .header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML).put();
+ prepareFormRequestBuilder(resource.path(subResourceName)).put();
} catch (UniformInterfaceException e) {
throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
}
}
- /**
- * Submits given object to the resource and returns the object received as response
- *
- * @param responseClass
- * Class of the object expected as response
- * @param requestObject
- * the Object to be submitted
- * @return Object of given class received as response
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected Object postObject(Class responseClass, Object requestObject) {
- return resource.type(MediaType.APPLICATION_XML).header(HTTP_HEADER_AUTH, authHeader)
- .accept(MediaType.APPLICATION_XML).post(responseClass, requestObject);
+ private void deleteResource(WebResource resource, MultivaluedMap<String, String> queryParams) {
+ try {
+ resource.path("." + RESTConstants.FORMAT_XML).queryParams(queryParams).header(HTTP_HEADER_AUTH, authHeader)
+ .delete();
+ } catch (UniformInterfaceException e) {
+ throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
+ }
}
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected Object deleteResource(Class responseClass, MultivaluedMap<String, String> queryParams) {
- return resource.queryParams(queryParams).header(HTTP_HEADER_AUTH, authHeader).delete(responseClass);
+
+ protected void deleteResource(MultivaluedMap<String, String> queryParams) {
+ deleteResource(resource, queryParams);
}
- @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)
- .delete(responseClass);
+ protected void deleteSubResource(String subResourceName, MultivaluedMap<String, String> queryParams) {
+ deleteResource(resource.path(subResourceName), queryParams);
}
protected void deleteSubResource(String subResourceName) {
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index fe8b3048..3a33e4e4 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -33,6 +33,7 @@ import com.gluster.storage.management.core.model.Event.EVENT_TYPE;
import com.gluster.storage.management.core.model.GlusterDataModel;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.Server;
+import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE;
@@ -110,7 +111,9 @@ public class GlusterDataModelManager {
private void initializeAutoDiscoveredServers(Cluster cluster) {
ServerListResponse discoveredServerListResponse = new DiscoveredServersClient(securityToken)
.getDiscoveredServerDetails();
- if (!discoveredServerListResponse.getStatus().isSuccess()) {
+ Status status = discoveredServerListResponse.getStatus();
+ if (!status.isSuccess() && !status.isPartSuccess()) {
+ // TODO: Find a way to show warning in case of part success
throw new GlusterRuntimeException(discoveredServerListResponse.getStatus().getMessage());
}
cluster.setAutoDiscoveredServers(discoveredServerListResponse.getData());
@@ -118,20 +121,11 @@ public class GlusterDataModelManager {
private void initializeVolumes(Cluster cluster) {
VolumesClient volumeClient = new VolumesClient();
- VolumeListResponse response = volumeClient.getAllVolumes();
- if (!response.getStatus().isSuccess()) {
- throw new GlusterRuntimeException("Error fetching volume list: [" + response.getStatus() + "]");
- }
- cluster.setVolumes(response.getVolumes());
+ cluster.setVolumes(volumeClient.getAllVolumes());
}
private void initializeVolumeOptionsDefaults() {
- VolumeOptionInfoListResponse response = new VolumesClient().getVolumeOptionsDefaults();
- if (!response.getStatus().isSuccess()) {
- throw new GlusterRuntimeException("Error fetching volume option defaults: ["
- + response.getStatus().getMessage() + "]");
- }
- this.volumeOptionsDefaults = response.getOptions();
+ this.volumeOptionsDefaults = new VolumesClient().getVolumeOptionsDefaults();
}
public void initializeTasks(Cluster cluster) {
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java
index 54ba07e7..b5ee1d1c 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java
@@ -87,10 +87,10 @@ public class TasksClient extends AbstractClient {
putRequest(taskId, form);
}
- public TaskResponse deleteTask(String taskId) {
+ public void deleteTask(String taskId) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_DELETE);
- return (TaskResponse) deleteSubResource(taskId, TaskResponse.class, queryParams);
+ deleteSubResource(taskId, queryParams);
}
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
index 24ba119f..9a1eb261 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
@@ -31,7 +31,8 @@ import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.model.Brick;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.response.GenericResponse;
+import com.gluster.storage.management.core.model.VolumeLogMessage;
+import com.gluster.storage.management.core.model.VolumeOptionInfo;
import com.gluster.storage.management.core.response.LogMessageListResponse;
import com.gluster.storage.management.core.response.VolumeListResponse;
import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse;
@@ -77,6 +78,17 @@ public class VolumesClient extends AbstractClient {
public void stopVolume(String volumeName) {
performOperation(volumeName, RESTConstants.TASK_STOP);
}
+
+ public boolean volumeExists(String volumeName) {
+ try {
+ // TODO: instead of fetching full volume name, fetch list of volumes and check if
+ // it contains our volume name
+ getVolume(volumeName);
+ return true;
+ } catch(Exception e) {
+ return false;
+ }
+ }
public void setVolumeOption(String volume, String key, String value) {
Form form = new Form();
@@ -89,23 +101,22 @@ public class VolumesClient extends AbstractClient {
putRequest(volume + "/" + RESTConstants.RESOURCE_OPTIONS);
}
- public VolumeListResponse getAllVolumes() {
- return (VolumeListResponse) fetchResource(VolumeListResponse.class);
+ public List<Volume> getAllVolumes() {
+ return ((VolumeListResponse) fetchResource(VolumeListResponse.class)).getVolumes();
}
- @SuppressWarnings("unchecked")
- public GenericResponse<Volume> getVolume(String volumeName) {
- return (GenericResponse<Volume>)fetchSubResource(volumeName, GenericResponse.class);
+ public Volume getVolume(String volumeName) {
+ return (Volume)fetchSubResource(volumeName, Volume.class);
}
- public Status deleteVolume(Volume volume, boolean deleteOption) {
+ public void deleteVolume(Volume volume, boolean deleteOption) {
MultivaluedMap<String, String> queryParams = prepareDeleteVolumeQueryParams(deleteOption);
- return (Status) deleteSubResource(volume.getName(), Status.class, queryParams);
+ deleteSubResource(volume.getName(), queryParams);
}
- public VolumeOptionInfoListResponse getVolumeOptionsDefaults() {
+ public List<VolumeOptionInfo> getVolumeOptionsDefaults() {
return ((VolumeOptionInfoListResponse) fetchSubResource(RESTConstants.RESOURCE_DEFAULT_OPTIONS,
- VolumeOptionInfoListResponse.class));
+ VolumeOptionInfoListResponse.class)).getOptions();
}
public void addBricks(String volumeName, List<String> brickList) {
@@ -134,23 +145,23 @@ public class VolumesClient extends AbstractClient {
* Number of most recent log messages to be fetched (from each disk)
* @return Log Message List response received from the Gluster Management Server.
*/
- public LogMessageListResponse getLogs(String volumeName, String brickName, String severity, Date fromTimestamp,
+ public List<VolumeLogMessage> getLogs(String volumeName, String brickName, String severity, Date fromTimestamp,
Date toTimestamp, int messageCount) {
MultivaluedMap<String, String> queryParams = prepareGetLogQueryParams(brickName, severity, fromTimestamp,
toTimestamp, messageCount);
- return (LogMessageListResponse) fetchSubResource(volumeName + "/" + RESTConstants.RESOURCE_LOGS,
- queryParams, LogMessageListResponse.class);
+ return ((LogMessageListResponse) fetchSubResource(volumeName + "/" + RESTConstants.RESOURCE_LOGS,
+ queryParams, LogMessageListResponse.class)).getLogMessages();
}
public void downloadLogs(String volumeName, String filePath) {
downloadSubResource(volumeName + "/" + RESTConstants.RESOURCE_LOGS + "/" + RESTConstants.RESOURCE_DOWNLOAD, filePath);
}
- public Status removeBricks(String volumeName, List<Brick> BrickList, boolean deleteOption) {
+ public void removeBricks(String volumeName, List<Brick> BrickList, boolean deleteOption) {
String bricks = StringUtil.ListToString(GlusterCoreUtil.getQualifiedBrickList(BrickList), ",");
MultivaluedMap<String, String> queryParams = prepareRemoveBrickQueryParams(volumeName, bricks, deleteOption);
- return (Status) deleteSubResource(volumeName + "/" + RESTConstants.RESOURCE_BRICKS, Status.class, queryParams);
+ deleteSubResource(volumeName + "/" + RESTConstants.RESOURCE_BRICKS, queryParams);
}
private MultivaluedMap<String, String> prepareRemoveBrickQueryParams(String volumeName, String bricks,
@@ -199,41 +210,15 @@ public class VolumesClient extends AbstractClient {
form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_START);
form.add(RESTConstants.FORM_PARAM_AUTO_COMMIT, autoCommit);
- putRequest( volumeName + "/" + RESTConstants.RESOURCE_BRICKS, form);
+ putRequest(volumeName + "/" + RESTConstants.RESOURCE_BRICKS, form);
}
public static void main(String[] args) {
UsersClient usersClient = new UsersClient();
if (usersClient.authenticate("gluster", "gluster").isSuccess()) {
VolumesClient client = new VolumesClient(usersClient.getSecurityToken());
-// List<Disk> disks = new ArrayList<Disk>();
-// Disk diskElement = new Disk();
-// diskElement.setName("sda1");
-// diskElement.setStatus(DISK_STATUS.READY);
-// disks.add(diskElement);
-// diskElement.setName("sda2");
-// diskElement.setStatus(DISK_STATUS.READY);
-// disks.add(diskElement);
-//
-// Volume vol = new Volume("vol1", null, Volume.VOLUME_TYPE.PLAIN_DISTRIBUTE, Volume.TRANSPORT_TYPE.ETHERNET,
-// Volume.VOLUME_STATUS.ONLINE);
-// // vol.setDisks(disks);
-// System.out.println(client.createVolume(vol));
-// for (VolumeOptionInfo option : client.getVolumeOptionsDefaults()) {
-// System.out.println(option.getName() + "-" + option.getDescription() + "-" + option.getDefaultValue());
-// }
-// System.out.println(client.getVolume("Volume3").getOptions());
-// System.out.println(client.setVolumeOption("Volume3", "network.frame-timeout", "600").getMessage());
-// List<Disk> disks = new ArrayList<Disk>();
-// Disk disk = new Disk();
-// disk.setServerName("server1");
-// disk.setName("sda");
-// disk.setStatus(DISK_STATUS.READY);
-// disks.add(disk);
-//
-// Status status = client.addDisks("Volume3", disks);
-// System.out.println(status.getMessage());
- client.downloadLogs("vol1", "/tmp/temp1.tar.gz");
+ System.out.println(client.getAllVolumes());
+// client.downloadLogs("vol1", "/tmp/temp1.tar.gz");
}
}
}