summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.client
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-04-07 21:38:32 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-04-11 13:51:51 +0530
commit49f755f886ce0b99c7e0f61d71eaee814ce5ae66 (patch)
tree4ce870a23a4ca3fda9f007ee6f2aa09310c3897b /src/com.gluster.storage.management.client
parent9461e6090694b777b9ac9ceae77de5e9e4df1b7d (diff)
Story#15 - Volume options
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.java11
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java2
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java26
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java2
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java24
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java44
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());
}
}
}