diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-04-07 21:38:32 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-04-11 13:51:51 +0530 |
| commit | 49f755f886ce0b99c7e0f61d71eaee814ce5ae66 (patch) | |
| tree | 4ce870a23a4ca3fda9f007ee6f2aa09310c3897b /src/com.gluster.storage.management.client | |
| parent | 9461e6090694b777b9ac9ceae77de5e9e4df1b7d (diff) | |
Story#15 - Volume options
Diffstat (limited to 'src/com.gluster.storage.management.client')
6 files changed, 81 insertions, 28 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 12fbd354..807e32a3 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 @@ -129,6 +129,17 @@ public abstract class AbstractClient { }
/**
+ * Submits given Form using PUT method to the given sub-resource and returns the object received as response
+ * @param subResourceName Name of the sub-resource to which the request is to be posted
+ * @param responseClass Class of the object expected as response
+ * @return Object of given class received as response
+ */
+ protected Object putRequest(String subResourceName, Class responseClass) {
+ return resource.path(subResourceName).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
+ .header("Authorization", authHeader).accept(MediaType.TEXT_XML).put(responseClass);
+ }
+
+ /**
* 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
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java index 84074115..6a22bf5f 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java @@ -64,7 +64,7 @@ public class DiscoveredServersClient extends AbstractClient { public static void main(String[] args) { UsersClient usersClient = new UsersClient(); - if (usersClient.authenticate("gluster", "gluster")) { + if (usersClient.authenticate("gluster", "gluster").isSuccess()) { DiscoveredServersClient serverResource = new DiscoveredServersClient("localhost", usersClient.getSecurityToken()); List<String> discoveredServerNames = serverResource.getDiscoveredServerNames(); 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 0f932df0..a8134c7d 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 @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.Map; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Cluster; @@ -41,9 +42,10 @@ import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE; import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; +import com.gluster.storage.management.core.model.VolumeOptionInfo; import com.gluster.storage.management.core.response.RunningTaskListResponse; import com.gluster.storage.management.core.response.VolumeListResponse; -import com.gluster.storage.management.client.VolumesClient; +import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse; public class GlusterDataModelManager { // private Server discoveredServer1, discoveredServer2, discoveredServer3, @@ -57,6 +59,7 @@ public class GlusterDataModelManager { private String securityToken; private String serverName; private List<ClusterListener> listeners = new ArrayList<ClusterListener>(); + private List<VolumeOptionInfo> volumeOptionsDefaults; private GlusterDataModelManager() { } @@ -130,12 +133,20 @@ public class GlusterDataModelManager { createDummyLogMessages(); initializeRunningTasks(cluster); - initializeAlerts(cluster); + initializeVolumeOptionsDefaults(); model.addCluster(cluster); } + private void initializeVolumeOptionsDefaults() { + VolumeOptionInfoListResponse response = new VolumesClient(getSecurityToken()).getVolumeOptionsDefaults(); + if(!response.getStatus().isSuccess()) { + throw new GlusterRuntimeException("Error fetching volume option defaults: [" + response.getStatus().getMessage() + "]"); + } + this.volumeOptionsDefaults = response.getOptions(); + } + private void addVolumeOptions() { for (Volume vol : new Volume[] { volume1, volume2, volume3, volume4, volume5 }) { for (int i = 1; i <= 5; i++) { @@ -376,6 +387,13 @@ public class GlusterDataModelManager { listener.volumeChanged(volume, new Event(EVENT_TYPE.VOLUME_STATUS_CHANGED, newStatus)); } } + + public void resetVolumeOptions(Volume volume) { + volume.getOptions().clear(); + for (ClusterListener listener : listeners) { + listener.volumeChanged(volume, new Event(EVENT_TYPE.VOLUME_OPTIONS_RESET, null)); + } + } public void addVolume(Volume volume) { Cluster cluster = model.getCluster(); @@ -385,4 +403,8 @@ public class GlusterDataModelManager { listener.volumeCreated(volume); } } + + public List<VolumeOptionInfo> getVolumeOptionsDefaults() { + return volumeOptionsDefaults; + } } 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 dfee988c..8ae64016 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 @@ -63,7 +63,7 @@ public class GlusterServersClient extends AbstractClient { public static void main(String[] args) { UsersClient usersClient = new UsersClient(); - if (usersClient.authenticate("gluster", "gluster")) { + if (usersClient.authenticate("gluster", "gluster").isSuccess()) { GlusterServersClient serverResource = new GlusterServersClient(usersClient.getSecurityToken()); List<GlusterServer> glusterServers = serverResource.getServers(); diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java index 8d7a52fc..0f2b5f86 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java @@ -19,6 +19,7 @@ package com.gluster.storage.management.client; import com.gluster.storage.management.core.model.Status; +import com.sun.jersey.api.client.UniformInterfaceException; import com.sun.jersey.api.representation.Form; import com.sun.jersey.core.util.Base64; @@ -26,6 +27,7 @@ public class UsersClient extends AbstractClient { private static final String RESOURCE_NAME = "users"; private static final String FORM_PARAM_OLD_PASSWORD = "oldpassword"; private static final String FORM_PARAM_NEW_PASSWORD = "newpassword"; + private static final int HTTP_STATUS_UNAUTHORIZED = 401; private String generateSecurityToken(String user, String password) { return new String(Base64.encode(user + ":" + password)); @@ -35,20 +37,26 @@ public class UsersClient extends AbstractClient { super(); } - public boolean authenticate(String user, String password) { + public Status authenticate(String user, String password) { setSecurityToken(generateSecurityToken(user, password)); try { Status authStatus = (Status) fetchSubResource(user, Status.class); - if (authStatus.isSuccess()) { - return true; + if(!authStatus.isSuccess()) { + // authentication failed. clear security token. + setSecurityToken(null); } + return authStatus; } catch (Exception e) { - e.printStackTrace(); + if (e instanceof UniformInterfaceException + && ((UniformInterfaceException) e).getResponse().getStatus() == HTTP_STATUS_UNAUTHORIZED) { + // authentication failed. clear security token. + setSecurityToken(null); + return new Status(Status.STATUS_CODE_FAILURE, "Invalid user id or password!"); + } else { + return new Status(Status.STATUS_CODE_FAILURE, "Exception during authentication: [" + e.getMessage() + + "]"); + } } - - // If we reach here, it means authentication failed. Clear security token and return false. - setSecurityToken(null); - return false; } public boolean changePassword(String user, String oldPassword, String newPassword) { 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 ab462abc..faa4bf71 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 @@ -26,7 +26,6 @@ import com.gluster.storage.management.core.constants.RESTConstants; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.VolumeOptionInfo; -import com.gluster.storage.management.core.response.GenericResponse; import com.gluster.storage.management.core.response.VolumeListResponse; import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse; import com.sun.jersey.api.representation.Form; @@ -42,14 +41,8 @@ public class VolumesClient extends AbstractClient { return RESTConstants.RESOURCE_PATH_VOLUMES; } - @SuppressWarnings("unchecked") public Status createVolume(Volume volume) { - GenericResponse<String> createVolumeResponse = (GenericResponse<String>) postObject(GenericResponse.class, volume); - - if (!createVolumeResponse.getStatus().isSuccess()) { - return (Status) createVolumeResponse.getStatus(); - } - return (Status) createVolumeResponse.getStatus(); + return (Status) postObject(Status.class, volume); } private Status performOperation(String volumeName, String operation) { @@ -67,19 +60,36 @@ public class VolumesClient extends AbstractClient { return performOperation(volumeName, RESTConstants.FORM_PARAM_VALUE_STOP); } + public Status setVolumeOption(String volume, String key, String value) { + Form form = new Form(); + form.add(RESTConstants.FORM_PARAM_OPTION_KEY, key); + form.add(RESTConstants.FORM_PARAM_OPTION_VALUE, value); + return (Status)postRequest(volume + "/" + RESTConstants.SUBRESOURCE_OPTIONS, Status.class, form); + } + + public Status resetVolumeOptions(String volume) { + return (Status)putRequest(volume, Status.class); + } + public VolumeListResponse getAllVolumes() { return (VolumeListResponse) fetchResource(VolumeListResponse.class); } + + public Volume getVolume(String volumeName) { + return (Volume) fetchSubResource(volumeName, Volume.class); + } + + public VolumeOptionInfoListResponse getVolumeOptionsDefaults() { + String responseStr = (String) fetchSubResource(RESTConstants.SUBRESOURCE_DEFAULT_OPTIONS, String.class); + System.out.println(responseStr); - public List<VolumeOptionInfo> getVolumeOptionsDefaults() { - VolumeOptionInfoListResponse response = (VolumeOptionInfoListResponse) fetchSubResource( - RESTConstants.SUBRESOURCE_DEFAULT_OPTIONS, VolumeOptionInfoListResponse.class); - return response.getOptions(); + return ((VolumeOptionInfoListResponse) fetchSubResource(RESTConstants.SUBRESOURCE_DEFAULT_OPTIONS, + VolumeOptionInfoListResponse.class)); } public static void main(String[] args) { UsersClient usersClient = new UsersClient(); - if (usersClient.authenticate("gluster", "gluster")) { + if (usersClient.authenticate("gluster", "gluster").isSuccess()) { VolumesClient client = new VolumesClient(usersClient.getSecurityToken()); // List<Disk> disks = new ArrayList<Disk>(); // Disk diskElement = new Disk(); @@ -94,9 +104,11 @@ public class VolumesClient extends AbstractClient { // 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()); - } +// 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()); } } } |
