summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java6
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java11
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java27
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java6
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOption.java5
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GlusterServerListResponse.java23
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java48
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java61
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskWizard.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java122
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeLogsPage.java6
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java86
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java10
16 files changed, 224 insertions, 195 deletions
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 3a33e4e4..3c5aedf5 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
@@ -101,11 +101,7 @@ public class GlusterDataModelManager {
}
private void initializeGlusterServers(Cluster cluster) {
- GlusterServerListResponse glusterServerListResponse = new GlusterServersClient().getServers();
- if (!glusterServerListResponse.getStatus().isSuccess()) {
- throw new GlusterRuntimeException(glusterServerListResponse.getStatus().getMessage());
- }
- cluster.setServers(glusterServerListResponse.getServers());
+ cluster.setServers(new GlusterServersClient().getServers());
}
private void initializeAutoDiscoveredServers(Cluster cluster) {
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 26129736..20c52a41 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
@@ -23,17 +23,12 @@ import static com.gluster.storage.management.core.constants.RESTConstants.RESOUR
import java.util.List;
-import javax.ws.rs.core.MultivaluedMap;
-
import com.gluster.storage.management.core.constants.RESTConstants;
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.response.GenericResponse;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
-import com.gluster.storage.management.core.response.GlusterServerResponse;
import com.sun.jersey.api.representation.Form;
-import com.sun.jersey.core.util.MultivaluedMapImpl;
public class GlusterServersClient extends AbstractClient {
@@ -54,8 +49,8 @@ public class GlusterServersClient extends AbstractClient {
return RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_SERVERS;
}
- public GlusterServerListResponse getServers() {
- return (GlusterServerListResponse) fetchResource(GlusterServerListResponse.class);
+ public List<GlusterServer> getServers() {
+ return ((GlusterServerListResponse) fetchResource(GlusterServerListResponse.class)).getServers();
}
@SuppressWarnings("unchecked")
@@ -83,7 +78,7 @@ public class GlusterServersClient extends AbstractClient {
UsersClient usersClient = new UsersClient();
if (usersClient.authenticate("gluster", "gluster").isSuccess()) {
GlusterServersClient glusterServersClient = new GlusterServersClient(usersClient.getSecurityToken(), "cluster1");
- List<GlusterServer> glusterServers = glusterServersClient.getServers().getData();
+ List<GlusterServer> glusterServers = glusterServersClient.getServers();
for (GlusterServer server : glusterServers) {
System.out.println(server.getName());
}
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 9a1eb261..d237f010 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
@@ -20,6 +20,15 @@
*/
package com.gluster.storage.management.client;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_ACCESS_PROTOCOLS;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_BRICKS;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_REPLICA_COUNT;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_STRIPE_COUNT;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_TRANSPORT_TYPE;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_NAME;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_OPTIONS;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_TYPE;
+
import java.util.Date;
import java.util.List;
@@ -29,7 +38,6 @@ import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.constants.GlusterConstants;
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.model.VolumeLogMessage;
import com.gluster.storage.management.core.model.VolumeOptionInfo;
@@ -60,8 +68,17 @@ public class VolumesClient extends AbstractClient {
return RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESTConstants.RESOURCE_VOLUMES;
}
- public Status createVolume(Volume volume) {
- return (Status) postObject(Status.class, volume);
+ public void createVolume(Volume volume) {
+ Form form = new Form();
+ form.add(FORM_PARAM_VOLUME_NAME, volume.getName());
+ form.add(FORM_PARAM_VOLUME_TYPE, volume.getVolumeType().toString());
+ form.add(FORM_PARAM_TRANSPORT_TYPE, volume.getTransportType().toString());
+ form.add(FORM_PARAM_REPLICA_COUNT, volume.getReplicaCount());
+ form.add(FORM_PARAM_STRIPE_COUNT, volume.getStripeCount());
+ form.add(FORM_PARAM_BRICKS, StringUtil.collectionToString(volume.getBricks(), ","));
+ form.add(FORM_PARAM_ACCESS_PROTOCOLS, StringUtil.collectionToString(volume.getNASProtocols(), ","));
+ form.add(FORM_PARAM_VOLUME_OPTIONS, StringUtil.collectionToString(volume.getOptions().getOptions(), ","));
+ postRequest(form);
}
private void performOperation(String volumeName, String operation) {
@@ -120,7 +137,7 @@ public class VolumesClient extends AbstractClient {
}
public void addBricks(String volumeName, List<String> brickList) {
- String bricks = StringUtil.ListToString(brickList, ",");
+ String bricks = StringUtil.collectionToString(brickList, ",");
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_BRICKS, bricks);
postRequest(volumeName + "/" + RESTConstants.RESOURCE_BRICKS, form);
@@ -159,7 +176,7 @@ public class VolumesClient extends AbstractClient {
}
public void removeBricks(String volumeName, List<Brick> BrickList, boolean deleteOption) {
- String bricks = StringUtil.ListToString(GlusterCoreUtil.getQualifiedBrickList(BrickList), ",");
+ String bricks = StringUtil.collectionToString(GlusterCoreUtil.getQualifiedBrickList(BrickList), ",");
MultivaluedMap<String, String> queryParams = prepareRemoveBrickQueryParams(volumeName, bricks, deleteOption);
deleteSubResource(volumeName + "/" + RESTConstants.RESOURCE_BRICKS, queryParams);
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
index 83acb9a3..fef8f969 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
@@ -86,5 +86,9 @@ public class Brick extends Entity {
return StringUtil.filterString(getServerName() + getBrickDirectory() + getDiskName(), filterString,
caseSensitive);
}
-
+
+ @Override
+ public String toString() {
+ return getQualifiedName();
+ }
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOption.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOption.java
index 2e3871b6..f4ca3e81 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOption.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOption.java
@@ -51,4 +51,9 @@ public class VolumeOption {
public void setValue(String value) {
this.value = value;
}
+
+ @Override
+ public String toString() {
+ return key + "=" + value;
+ }
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GlusterServerListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GlusterServerListResponse.java
index 4c291a33..f375905c 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GlusterServerListResponse.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GlusterServerListResponse.java
@@ -34,41 +34,24 @@ import com.gluster.storage.management.core.model.Status;
/**
*
*/
-@XmlRootElement(name = "response")
-public class GlusterServerListResponse extends AbstractResponse {
+@XmlRootElement(name = "servers")
+public class GlusterServerListResponse {
private List<GlusterServer> servers = new ArrayList<GlusterServer>();
public GlusterServerListResponse() {
}
- public GlusterServerListResponse(Status status, List<GlusterServer> servers) {
- setStatus(status);
+ public GlusterServerListResponse(List<GlusterServer> servers) {
setServers(servers);
}
- @XmlElementWrapper(name = "servers")
@XmlElement(name = "server", type=GlusterServer.class)
public List<GlusterServer> getServers() {
return servers;
}
- /**
- * @param servers
- * the servers to set
- */
public void setServers(List<GlusterServer> servers) {
this.servers = servers;
}
-
- /*
- * (non-Javadoc)
- *
- * @see com.gluster.storage.management.core.model.Response#getData()
- */
- @Override
- @XmlTransient
- public List<GlusterServer> getData() {
- return getServers();
- }
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
index 14bad4fd..c238cad7 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
@@ -21,9 +21,7 @@
package com.gluster.storage.management.core.utils;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Map;
import com.gluster.storage.management.core.model.Brick;
import com.gluster.storage.management.core.model.Disk;
@@ -46,50 +44,4 @@ public class GlusterCoreUtil {
}
return qualifiedBricks;
}
-
- /**
- * Extracts a list from a string by splitting it on given delimiter
- * @param input the input string
- * @return A {@link List} of extracted tokens
- */
- public List<String> extractList(String input, String delim) {
- String[] arr = input.split(delim);
- List<String> output = new ArrayList<String>();
- for(String str : arr) {
- String brick = str.trim();
- if(!brick.isEmpty()) {
- output.add(brick);
- }
- }
- return null;
- }
-
- /**
- * Extracts a map from a string by splitting it on the given primary and secondary delimiter. e.g. The input string
- * <i>k1=v1,k2=v2,k3=v3</i> will yield the following map:<br>
- * k1 -> v1<br>
- * k2 -> v2<br>
- * k3 -> v3<br>
- * where <b>,</b> is the primary delimiter and <b>=</b> is the secondary delimiter.
- *
- * @param input
- * @param majorDelim
- * @param minorDelim
- * @return Map of key value pairs
- */
- public Map<String, String> extractMap(String input, String majorDelim, String minorDelim) {
- String[] arr = input.split(majorDelim);
- Map<String, String> output = new LinkedHashMap<String, String>();
- for(String str : arr) {
- String[] elements = str.split(minorDelim);
- if(elements.length == 2) {
- String key = elements[0].trim();
- String value = elements[1].trim();
- if(!key.isEmpty() && !value.isEmpty()) {
- output.put(key, value);
- }
- }
- }
- return output;
- }
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java
index 1b7335ee..2fce81cb 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java
@@ -19,7 +19,10 @@
package com.gluster.storage.management.core.utils;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
public class StringUtil {
public static boolean filterString(String sourceString, String filterString, boolean caseSensitive) {
@@ -31,13 +34,13 @@ public class StringUtil {
return str.replaceAll("\\s+", "");
}
- public static String ListToString(List<String> list, String delimiter) {
+ public static String collectionToString(Collection<? extends Object> list, String delimiter) {
if (list.size() == 0) {
return "";
}
StringBuilder output = new StringBuilder();
- for (String element : list) {
- output.append(element).append(delimiter);
+ for (Object element : list) {
+ output.append(element.toString()).append(delimiter);
}
String outputStr = output.toString();
int endIndex = outputStr.length() - delimiter.length();
@@ -51,18 +54,64 @@ public class StringUtil {
}
return enumAsArray;
}
+
+ /**
+ * Extracts a list from a string by splitting it on given delimiter
+ * @param input the input string
+ * @return A {@link List} of extracted tokens
+ */
+ public static List<String> extractList(String input, String delim) {
+ String[] arr = input.split(delim);
+ List<String> output = new ArrayList<String>();
+ for(String str : arr) {
+ String brick = str.trim();
+ if(!brick.isEmpty()) {
+ output.add(brick);
+ }
+ }
+ return output;
+ }
+
+ /**
+ * Extracts a map from a string by splitting it on the given primary and secondary delimiter. e.g. The input string
+ * <i>k1=v1,k2=v2,k3=v3</i> will yield the following map:<br>
+ * k1 -> v1<br>
+ * k2 -> v2<br>
+ * k3 -> v3<br>
+ * where <b>,</b> is the primary delimiter and <b>=</b> is the secondary delimiter.
+ *
+ * @param input
+ * @param majorDelim
+ * @param minorDelim
+ * @return Map of key value pairs
+ */
+ public static Map<String, String> extractMap(String input, String majorDelim, String minorDelim) {
+ String[] arr = input.split(majorDelim);
+ Map<String, String> output = new LinkedHashMap<String, String>();
+ for(String str : arr) {
+ String[] elements = str.split(minorDelim);
+ if(elements.length == 2) {
+ String key = elements[0].trim();
+ String value = elements[1].trim();
+ if(!key.isEmpty() && !value.isEmpty()) {
+ output.put(key, value);
+ }
+ }
+ }
+ return output;
+ }
public static void main(String args[]) {
//Test case for "ListToString"
List<String> string = new ArrayList<String>();
// Empty list
- System.out.println(StringUtil.ListToString(string, ", "));
+ System.out.println(StringUtil.collectionToString(string, ", "));
// Only one
string.add("test");
- System.out.println(StringUtil.ListToString(string, ",:"));
+ System.out.println(StringUtil.collectionToString(string, ",:"));
// Multiple
string.add("welcome to java");
- System.out.println(StringUtil.ListToString(string, ""));
+ System.out.println(StringUtil.collectionToString(string, ""));
}
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java
index 0cad5945..9df40457 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java
@@ -40,7 +40,7 @@ public class RemoveDiskAction extends AbstractActionDelegate {
List<String> brickList = getBrickList(bricks);
Integer deleteOption = new MessageDialog(getShell(), "Remove Bricks(s)", GUIHelper.getInstance()
.getImage(IImageKeys.VOLUME), "Are you sure you want to remove following bricks from volume ["
- + volume.getName() + "] ? \n" + StringUtil.ListToString(brickList, ", "),
+ + volume.getName() + "] ? \n" + StringUtil.collectionToString(brickList, ", "),
MessageDialog.QUESTION, new String[] { "Cancel", "Remove bricks, delete data",
"Remove bricks, keep data" }, -1).open();
if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1)
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskWizard.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskWizard.java
index f41a113e..bb55ece1 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskWizard.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskWizard.java
@@ -74,7 +74,7 @@ public class AddDiskWizard extends Wizard {
GlusterDataModelManager.getInstance().addBricks(volume, bricks);
MessageDialog.openInformation(getShell(), "Add brick(s) to Volume", "Volume [" + volume.getName()
- + "] is expanded with bricks [" + StringUtil.ListToString(brickList, ", ") + "]");
+ + "] is expanded with bricks [" + StringUtil.collectionToString(brickList, ", ") + "]");
return true;
} catch (Exception e) {
MessageDialog.openError(getShell(), "Add brick(s) to Volume", e.getMessage());
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java
index 4575edff..ff4bdd98 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java
@@ -23,87 +23,97 @@ import org.eclipse.jface.wizard.Wizard;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.VolumesClient;
-import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
public class CreateVolumeWizard extends Wizard {
-
+ private static final String title = "Gluster Management Console - Create Volume";
+ private CreateVolumePage1 page;
+
public CreateVolumeWizard() {
- setWindowTitle("Gluster Management Console - Create Volume");
+ setWindowTitle(title);
setHelpAvailable(false); // TODO: Introduce wizard help
}
@Override
public void addPages() {
- addPage(new CreateVolumePage1());
+ page = new CreateVolumePage1();
+ addPage(page);
}
@Override
public boolean performFinish() {
- String dialogTitle = "Create Volume";
- CreateVolumePage1 page = (CreateVolumePage1) getPage(CreateVolumePage1.PAGE_NAME);
-
Volume newVolume = page.getVolume();
VolumesClient volumesClient = new VolumesClient();
- Status status = volumesClient.createVolume(newVolume);
- String message = "";
+
+ try {
+ volumesClient.createVolume(newVolume);
+ handleSuccess(newVolume, volumesClient);
+ } catch(Exception e) {
+ String errMsg = e.getMessage();
+ // the error could be in to post-volume-create processing. check if this is the case.
+ if (volumesClient.volumeExists(newVolume.getName())) {
+ handlePartSuccess(newVolume, volumesClient, errMsg);
+ } else {
+ MessageDialog.openError(getShell(), title, "Volume creation failed! Error: " + errMsg);
+ }
+ }
+
+ return true;
+ }
+
+ public void handleSuccess(Volume newVolume, VolumesClient volumesClient) {
+ String message = "Volume created successfully!";
+ newVolume.setStatus(VOLUME_STATUS.OFFLINE);
boolean warning = false;
- if (status.isSuccess()) {
- message = "Volume created successfully!";
- newVolume.setStatus(VOLUME_STATUS.OFFLINE);
- if (page.startVolumeAfterCreation()) {
+ if (page.startVolumeAfterCreation()) {
+ try {
+ volumesClient.startVolume(newVolume.getName());
+ newVolume.setStatus(VOLUME_STATUS.ONLINE);
+ message = "Volume created and started successfully!";
+ } catch(Exception e) {
+ message = "Volume created successfuly, but couldn't be started. Error: " + e.getMessage();
+ warning = true;
+ }
+ }
+
+ // update the model
+ GlusterDataModelManager.getInstance().addVolume(newVolume);
+ if (warning) {
+ MessageDialog.openWarning(getShell(), title, message);
+ } else {
+ MessageDialog.openInformation(getShell(), title, message);
+ }
+ }
+
+ public void handlePartSuccess(Volume newVolume, VolumesClient volumesClient, String errMsg) {
+ // volume exists. error was in post-volume-create
+ newVolume.setStatus(VOLUME_STATUS.OFFLINE);
+ boolean error = false;
+ String message1 = null;
+ if (page.startVolumeAfterCreation()) {
+ if (MessageDialog.openConfirm(getShell(), title,
+ "Volume created, but following error(s) occured: " + errMsg
+ + "\n\nDo you still want to start the volume [" + newVolume.getName() + "]?")) {
try {
volumesClient.startVolume(newVolume.getName());
newVolume.setStatus(VOLUME_STATUS.ONLINE);
- message = "Volume created and started successfully!";
- } catch(Exception e) {
- message = "Volume created successfuly, but couldn't be started. Error: " + e.getMessage();
- warning = true;
+ message1 = "Volume [" + newVolume.getName() + "] started successfully!"; // Only start operation
+ } catch(Exception e1) {
+ message1 = "Volume couldn't be started. Error: " + e1.getMessage();
+ error = true;
}
}
- // update the model
- GlusterDataModelManager.getInstance().addVolume(newVolume);
- if (warning) {
- MessageDialog.openWarning(getShell(), dialogTitle, message);
- } else {
- MessageDialog.openInformation(getShell(), dialogTitle, message);
- }
- } else {
- if (status.isPartSuccess()) {
- newVolume.setStatus(VOLUME_STATUS.OFFLINE);
- boolean error = false;
- if (page.startVolumeAfterCreation()) {
- if (MessageDialog.openConfirm(getShell(), dialogTitle,
- "Volume created, but following error(s) occured: " + status
- + "\n\nDo you still want to start the volume [" + newVolume.getName() + "]?")) {
- try {
- volumesClient.startVolume(newVolume.getName());
- newVolume.setStatus(VOLUME_STATUS.ONLINE);
- message = "Volume [" + newVolume.getName() + "] started successfully!"; // Only start operation
- } catch(Exception e) {
- message = "Volume couldn't be started. Error: " + e.getMessage();
- error = true;
- }
- }
- if (error) {
- MessageDialog.openWarning(getShell(), dialogTitle, message);
- } else {
- MessageDialog.openInformation(getShell(), dialogTitle, message);
- }
-
- } else { // Start volume is not checked
- MessageDialog.openWarning(getShell(), dialogTitle, "Volume created, but following error(s) occured: "
- + status);
- }
- GlusterDataModelManager.getInstance().addVolume(newVolume);
-
+ if (error) {
+ MessageDialog.openWarning(getShell(), title, message1);
} else {
- MessageDialog.openError(getShell(), dialogTitle, "Volume creation failed! " + status);
+ MessageDialog.openInformation(getShell(), title, message1);
}
+ } else { // Start volume is not checked
+ MessageDialog.openWarning(getShell(), title,
+ "Volume created, but following error(s) occured: " + errMsg);
}
-
- return true;
+ GlusterDataModelManager.getInstance().addVolume(newVolume);
}
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java
index c708100d..17bb28f4 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java
@@ -215,7 +215,7 @@ public class VolumeSummaryView extends ViewPart {
}
}
}
- return StringUtil.ListToString(OnlineServers, ", ") + ((OnlineServers.size() > maxServers) ? "..." : "");
+ return StringUtil.collectionToString(OnlineServers, ", ") + ((OnlineServers.size() > maxServers) ? "..." : "");
}
/**
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeLogsPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeLogsPage.java
index 9bff0213..6ba9c0d1 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeLogsPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeLogsPage.java
@@ -46,16 +46,12 @@ import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;
-import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.VolumesClient;
import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.constants.GlusterConstants;
import com.gluster.storage.management.core.constants.GlusterConstants.VOLUME_LOG_LEVELS;
-import com.gluster.storage.management.core.model.VolumeLogMessage;
-import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.response.LogMessageListResponse;
-import com.gluster.storage.management.core.utils.GlusterCoreUtil;
+import com.gluster.storage.management.core.model.VolumeLogMessage;
import com.gluster.storage.management.gui.VolumeLogTableLabelProvider;
import com.gluster.storage.management.gui.utils.GUIHelper;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
index ec396539..0bc0f061 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
@@ -30,7 +30,7 @@ import com.sun.jersey.api.core.InjectParam;
/**
* Abstract resource class for servers. Abstracts basic server related functionality like "get server details".
*/
-public class AbstractServersResource {
+public class AbstractServersResource extends AbstractResource {
@InjectParam
protected ServerUtil serverUtil;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
index 48c9b7fc..03a927ab 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
@@ -18,6 +18,7 @@
*******************************************************************************/
package com.gluster.storage.management.server.resources;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CLUSTER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SERVER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_SERVER_NAME;
@@ -35,12 +36,14 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.exceptions.ConnectionException;
+import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.model.Status;
@@ -121,62 +124,83 @@ public class GlusterServersResource extends AbstractServersResource {
}
@GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getGlusterServersJSON(
+ @PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
+ return getGlusterServers(clusterName, MediaType.APPLICATION_JSON);
+ }
+
+ @GET
@Produces(MediaType.APPLICATION_XML)
- public GlusterServerListResponse getGlusterServers(
+ public Response getGlusterServersXML(
@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
+ return getGlusterServers(clusterName, MediaType.APPLICATION_XML);
+ }
+
+ public Response getGlusterServers(String clusterName, String mediaType) {
List<GlusterServer> glusterServers = new ArrayList<GlusterServer>();
+ if (clusterName == null || clusterName.isEmpty()) {
+ return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
+ }
+
ClusterInfo cluster = clusterService.getCluster(clusterName);
- if(cluster == null) {
- return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName
- + "] doesn't exist!"), null);
+ if (cluster == null) {
+ return badRequestResponse("Cluster [" + clusterName + "] not found!");
}
-
+
if(cluster.getServers().size() == 0) {
- return new GlusterServerListResponse(Status.STATUS_SUCCESS, glusterServers);
+ return okResponse(new GlusterServerListResponse(glusterServers), mediaType);
}
GlusterServer onlineServer = getOnlineServer(clusterName);
- if(onlineServer == null) {
- return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE,
- "No online server found in cluster [" + clusterName + "]"), glusterServers);
+ if (onlineServer == null) {
+ return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
try {
- glusterServers = glusterUtil.getGlusterServers(onlineServer);
- } catch(ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = getNewOnlineServer(clusterName);
- if(onlineServer == null) {
- return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE,
- "No online server found in cluster [" + clusterName + "]"), glusterServers);
- }
-
- glusterServers = glusterUtil.getGlusterServers(onlineServer);
+ glusterServers = getGlusterServers(clusterName, onlineServer);
+ } catch(Exception e) {
+ return errorResponse(e.getMessage());
}
- int errCount = 0;
- StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): ");
+ String errMsg = fetDetailsOfServers(glusterServers, onlineServer);
+ if(!errMsg.isEmpty()) {
+ return errorResponse("Couldn't fetch details for server(s): " + errMsg);
+ }
+
+ return okResponse(new GlusterServerListResponse(glusterServers), mediaType);
+ }
+
+ public String fetDetailsOfServers(List<GlusterServer> glusterServers, GlusterServer onlineServer) {
+ String errMsg = "";
for (GlusterServer server : glusterServers) {
if (server.getStatus() == SERVER_STATUS.ONLINE && !server.getName().equals(onlineServer.getName())) {
try {
fetchServerDetails(server);
} catch (Exception e) {
- errMsg.append(CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]");
- errCount++;
+ errMsg += CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]";
}
}
}
- Status status;
- if (errCount==0) {
- status = new Status(Status.STATUS_CODE_SUCCESS, "Success");
- } else if(errCount == glusterServers.size()) {
- status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString());
- } else {
- status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString());
+ return errMsg;
+ }
+
+ public List<GlusterServer> getGlusterServers(String clusterName, GlusterServer onlineServer) {
+ List<GlusterServer> glusterServers;
+ try {
+ glusterServers = glusterUtil.getGlusterServers(onlineServer);
+ } catch(ConnectionException e) {
+ // online server has gone offline! try with a different one.
+ onlineServer = getNewOnlineServer(clusterName);
+ if(onlineServer == null) {
+ throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
+ }
+
+ glusterServers = glusterUtil.getGlusterServers(onlineServer);
}
- return new GlusterServerListResponse(status, glusterServers);
+ return glusterServers;
}
@GET
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
index 3472745e..f5ad63ab 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
@@ -30,23 +30,21 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
-import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Brick;
import com.gluster.storage.management.core.model.Brick.BRICK_STATUS;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.core.model.Task.TASK_TYPE;
import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.Task.TASK_TYPE;
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.VolumeOptions;
-import com.gluster.storage.management.core.response.TaskResponse;
import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.ProcessResult;
+import com.gluster.storage.management.core.utils.StringUtil;
import com.gluster.storage.management.server.resources.TasksResource;
import com.gluster.storage.management.server.tasks.MigrateDiskTask;
import com.sun.jersey.api.core.InjectParam;
@@ -235,7 +233,7 @@ public class GlusterUtil {
TRANSPORT_TYPE transportType = Volume.getTransportTypeByStr(transportTypeStr);
transportTypeArg = (transportType == TRANSPORT_TYPE.ETHERNET) ? "tcp" : "rdma";
- String command = prepareVolumeCreateCommand(volumeName, glusterCoreUtil.extractList(bricks, ","), count,
+ String command = prepareVolumeCreateCommand(volumeName, StringUtil.extractList(bricks, ","), count,
volTypeArg, transportTypeArg);
ProcessResult result = sshUtil.executeRemote(knownServer, command);
if (!result.isSuccess()) {
@@ -243,7 +241,7 @@ public class GlusterUtil {
}
try {
- createOptions(volumeName, glusterCoreUtil.extractMap(options, ",", "="), knownServer);
+ createOptions(volumeName, StringUtil.extractMap(options, ",", "="), knownServer);
} catch(Exception e) {
throw new GlusterRuntimeException(
"Volume created successfully, however following errors occurred while setting options: "