summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com.gluster.storage.management.client/.classpath4
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java33
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java9
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java26
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java8
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java19
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java14
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java19
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java75
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TasksResource.java6
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java214
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java56
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java11
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java73
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java52
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java)48
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java59
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java17
19 files changed, 382 insertions, 363 deletions
diff --git a/src/com.gluster.storage.management.client/.classpath b/src/com.gluster.storage.management.client/.classpath
index d216a8fe..218503d5 100644
--- a/src/com.gluster.storage.management.client/.classpath
+++ b/src/com.gluster.storage.management.client/.classpath
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry exported="true" kind="lib" path="keystore/"/>
- <classpathentry exported="true" kind="lib" path="lib/jersey-1.5/jersey-client-1.5.jar" sourcepath="/data/downloads/sun/jersey/sources/jersey-client-1.5-sources.jar"/>
- <classpathentry exported="true" kind="lib" path="lib/jersey-1.5/jersey-core-1.5.jar" sourcepath="/data/downloads/sun/jersey/sources/jersey-core-1.5-sources.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/jersey-1.5/jersey-client-1.5.jar" sourcepath="/home/selvam/sources/jersey/jersey-client-1.5-sources.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/jersey-1.5/jersey-core-1.5.jar" sourcepath="/home/selvam/sources/jersey/jersey-core-1.5-sources.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry excluding="keystore/" kind="src" path="src"/>
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 14539b87..6f4ba050 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
@@ -22,6 +22,7 @@ import javax.ws.rs.core.MultivaluedMap;
import com.gluster.storage.management.client.utils.ClientUtil;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
+import com.gluster.storage.management.core.model.TaskInfo;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.UniformInterfaceException;
@@ -41,6 +42,7 @@ public abstract class AbstractClient {
protected WebResource resource;
private String securityToken;
private String authHeader;
+ private Client client;
/**
* This constructor will work only after the data model manager has been initialized.
@@ -61,11 +63,16 @@ public abstract class AbstractClient {
this.clusterName = clusterName;
setSecurityToken(securityToken);
- SSLContext context = initializeSSLContext();
- DefaultClientConfig config = createClientConfig(context);
+ createClient();
// this must be after setting clusterName as sub-classes may refer to cluster name in the getResourcePath method
- resource = Client.create(config).resource(ClientUtil.getServerBaseURI()).path(getResourcePath());
+ resource = client.resource(ClientUtil.getServerBaseURI()).path(getResourcePath());
+ }
+
+ private void createClient() {
+ SSLContext context = initializeSSLContext();
+ DefaultClientConfig config = createClientConfig(context);
+ client = Client.create(config);
}
private DefaultClientConfig createClientConfig(SSLContext context) {
@@ -123,7 +130,7 @@ public abstract class AbstractClient {
* @return Object of responseClass received as a result of the GET request
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
- private Object fetchResource(WebResource res, MultivaluedMap<String, String> queryParams, Class responseClass) {
+ private <T> T fetchResource(WebResource res, MultivaluedMap<String, String> queryParams, Class<T> responseClass) {
try {
return res.queryParams(queryParams)
.header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML).get(responseClass);
@@ -267,7 +274,11 @@ public abstract class AbstractClient {
private ClientResponse putRequest(WebResource resource, Form form) {
try {
- return prepareFormRequestBuilder(resource).put(ClientResponse.class, form);
+ ClientResponse response = prepareFormRequestBuilder(resource).put(ClientResponse.class, form);
+ if(response.getStatus() >= 300) {
+ throw new GlusterRuntimeException(response.getEntity(String.class));
+ }
+ return response;
} catch (UniformInterfaceException e) {
throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
}
@@ -292,7 +303,8 @@ public abstract class AbstractClient {
protected URI putRequestURI(String subResourceName, Form form) {
- return putRequest(resource.path(subResourceName), form).getLocation();
+ ClientResponse response = putRequest(resource.path(subResourceName), form);
+ return response.getLocation();
}
/**
@@ -361,4 +373,13 @@ public abstract class AbstractClient {
this.securityToken = securityToken;
authHeader = "Basic " + securityToken;
}
+
+ /**
+ * @param uri The URI to be fetched using GET API
+ * @param responseClass Expected type of response object
+ * @return Object of the given class
+ */
+ protected <T> T fetchResource(URI uri, Class<T> responseClass) {
+ return fetchResource(client.resource(uri), NO_PARAMS, responseClass);
+ }
}
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 aff4f5d2..deaeee64 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
@@ -20,12 +20,13 @@
*/
package com.gluster.storage.management.client;
+import java.net.URI;
import java.util.List;
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.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.response.TaskInfoListResponse;
import com.sun.jersey.api.representation.Form;
@@ -86,7 +87,11 @@ public class TasksClient extends AbstractClient {
public void deleteTask(String taskId) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_DELETE);
-
+
deleteSubResource(taskId, queryParams);
}
+
+ public TaskInfo getTaskInfo(URI uri) {
+ return ((TaskInfo) fetchResource(uri, TaskInfo.class));
+ }
}
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 522b87c1..c839a15a 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
@@ -80,18 +80,20 @@ public class UsersClient extends AbstractClient {
}
public static void main(String[] args) {
- UsersClient authClient = new UsersClient();
-
- // authenticate user
- authClient.authenticate("gluster", "gluster");
-
- // change password to gluster1
- authClient.changePassword("gluster", "gluster", "gluster1");
-
- // change it back to gluster
- authClient.changePassword("gluster", "gluster1", "gluster");
-
- System.out.println("success");
+// UsersClient authClient = new UsersClient();
+//
+// // authenticate user
+// authClient.authenticate("gluster", "gluster");
+//
+// // change password to gluster1
+// authClient.changePassword("gluster", "gluster", "gluster1");
+//
+// // change it back to gluster
+// authClient.changePassword("gluster", "gluster1", "gluster");
+//
+// System.out.println("success");
+ System.out.println(new String(Base64.encode("abcdefghijklmnopqrstuvwxyz")));
+ System.out.println(new String(Base64.decode("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=")));
}
/*
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 6be67e65..b5d2711a 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
@@ -40,6 +40,7 @@ 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.TaskInfo;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.model.VolumeLogMessage;
import com.gluster.storage.management.core.model.VolumeOptionInfo;
@@ -222,16 +223,13 @@ public class VolumesClient extends AbstractClient {
return queryParams;
}
- public void startMigration(String volumeName, String brickFrom, String brickTo, Boolean autoCommit) {
+ public URI startMigration(String volumeName, String brickFrom, String brickTo, Boolean autoCommit) {
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_SOURCE, brickFrom);
form.add(RESTConstants.FORM_PARAM_TARGET, brickTo);
form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_START);
form.add(RESTConstants.FORM_PARAM_AUTO_COMMIT, autoCommit);
-
- // putRequest(volumeName + "/" + RESTConstants.RESOURCE_BRICKS, form);
- URI uri = putRequestURI(volumeName + "/" + RESTConstants.RESOURCE_BRICKS, form);
- System.out.println(uri.getRawPath());
+ return putRequestURI(volumeName + "/" + RESTConstants.RESOURCE_BRICKS, form);
}
public void rebalanceStart(String volumeName, Boolean fixLayout, Boolean migrateData, Boolean forcedDataMigrate) {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java
index 514f805e..2d65a869 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java
@@ -18,12 +18,16 @@
*******************************************************************************/
package com.gluster.storage.management.gui.dialogs;
+import java.net.URI;
+
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.Wizard;
+import com.gluster.storage.management.client.GlusterDataModelManager;
+import com.gluster.storage.management.client.TasksClient;
import com.gluster.storage.management.client.VolumesClient;
import com.gluster.storage.management.core.model.Brick;
-import com.gluster.storage.management.core.model.Disk;
+import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.model.Volume;
public class MigrateDiskWizard extends Wizard {
@@ -53,10 +57,15 @@ public class MigrateDiskWizard extends Wizard {
VolumesClient volumesClient = new VolumesClient();
try {
- volumesClient.startMigration(volume.getName(), sourceDir, targetDir, autoCommit);
- MessageDialog.openInformation(getShell(), "Brick migration",
- "Brick migration is initiated, Please check the status...");
- //TODO Add the task to model
+ URI uri = volumesClient.startMigration(volume.getName(), sourceDir, targetDir, autoCommit);
+
+ // To get the object
+ TasksClient taskClient = new TasksClient();
+ TaskInfo taskInfo = taskClient.getTaskInfo(uri);
+ if (taskInfo != null && taskInfo instanceof TaskInfo) {
+ GlusterDataModelManager.getInstance().getModel().getCluster().addTaskInfo(taskInfo);
+ }
+ MessageDialog.openInformation(getShell(), "Brick migration", "Brick migration started successfully");
} catch (Exception e) {
MessageDialog.openError(getShell(), "Error: Migrate brick", e.getMessage());
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java
index 6bc394c3..feef8b3e 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java
@@ -65,12 +65,12 @@ public class AbstractResource {
* Creates a response with HTTP status code of 202 (accepted), also setting the location header to given location.
* This is typically done while triggering long running tasks
*
- * @param uriElements
- * URI Elements to be appended to the base URI
+ * @param locationURI
+ * URI to be appended to the base URI
* @return the {@link Response} object
*/
- protected Response acceptedResponse(Object...uriElements) {
- return Response.status(Status.ACCEPTED).location(createAbsoluteURI(uriElements)).build();
+ protected Response acceptedResponse(String locationURI) {
+ return Response.status(Status.ACCEPTED).location(createAbsoluteURI(locationURI)).build();
}
/**
@@ -86,11 +86,11 @@ public class AbstractResource {
/**
* Creates a new URI that is relative to the <b>base URI</b> of the application
- * @param uriElements URI Elements to be appended to the base URI
+ * @param uriString URI String to be appended to the base URI
* @return newly created URI
*/
- private URI createAbsoluteURI(Object[] uriElements) {
- return uriInfo.getBaseUriBuilder().build(uriElements);
+ private URI createAbsoluteURI(String uriString) {
+ return uriInfo.getBaseUriBuilder().path(uriString).build();
}
/**
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 0bc0f061..dd6e2804 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
@@ -20,9 +20,6 @@
*/
package com.gluster.storage.management.server.resources;
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.gluster.storage.management.core.model.Server;
-import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.server.utils.GlusterUtil;
import com.gluster.storage.management.server.utils.ServerUtil;
import com.sun.jersey.api.core.InjectParam;
@@ -37,19 +34,5 @@ public class AbstractServersResource extends AbstractResource {
@InjectParam
protected GlusterUtil glusterUtil;
- /**
- * Fetch details of the given server. The server name must be populated in the object before calling this method.
- *
- * @param server
- * Server whose details are to be fetched
- */
- protected void fetchServerDetails(Server server) {
- // fetch standard server details like cpu, disk, memory details
- Object response = serverUtil.executeOnServer(true, server.getName(), "get_server_details.py --only-data-disks", Server.class);
- if (response instanceof Status) {
- // TODO: check if this happened because the server is not reachable, and if yes, set it's status as offline
- throw new GlusterRuntimeException(((Status)response).getMessage());
- }
- server.copyFrom((Server) response); // Update the details in <Server> object
- }
+ // TODO: Remove this class!
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
index ee9d3600..283ab147 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
@@ -130,7 +130,7 @@ public class DiscoveredServersResource extends AbstractServersResource {
private Server getDiscoveredServer(String serverName) {
Server server = new Server(serverName);
- fetchServerDetails(server);
+ serverUtil.fetchServerDetails(server);
return server;
}
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 0a77a8ab..a9ef7fbb 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
@@ -22,10 +22,10 @@ import static com.gluster.storage.management.core.constants.RESTConstants.FORM_P
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_DISK_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_SERVER_NAME;
+import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_DISKS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_SERVERS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_TASKS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_DISKS;
import java.util.ArrayList;
import java.util.List;
@@ -50,11 +50,7 @@ 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;
-import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
-import com.gluster.storage.management.core.response.TaskResponse;
-import com.gluster.storage.management.core.utils.LRUCache;
import com.gluster.storage.management.server.data.ClusterInfo;
import com.gluster.storage.management.server.data.ServerInfo;
import com.gluster.storage.management.server.services.ClusterService;
@@ -70,7 +66,6 @@ import com.sun.jersey.spi.resource.Singleton;
public class GlusterServersResource extends AbstractServersResource {
public static final String HOSTNAMETAG = "hostname:";
- private LRUCache<String, GlusterServer> clusterServerCache = new LRUCache<String, GlusterServer>(3);
@InjectParam
private DiscoveredServersResource discoveredServersResource;
@@ -87,50 +82,12 @@ public class GlusterServersResource extends AbstractServersResource {
protected void fetchServerDetails(GlusterServer server) {
try {
server.setStatus(SERVER_STATUS.ONLINE);
- super.fetchServerDetails(server);
+ serverUtil.fetchServerDetails(server);
} catch (ConnectionException e) {
server.setStatus(SERVER_STATUS.OFFLINE);
}
}
- public GlusterServer getOnlineServer(String clusterName) {
- return getOnlineServer(clusterName, "");
- }
-
- // uses cache
- public GlusterServer getOnlineServer(String clusterName, String exceptServerName) {
- GlusterServer server = clusterServerCache.get(clusterName);
- if (server != null && !server.getName().equals(exceptServerName)) {
- return server;
- }
-
- return getNewOnlineServer(clusterName, exceptServerName);
- }
-
- public GlusterServer getNewOnlineServer(String clusterName) {
- return getNewOnlineServer(clusterName, "");
- }
-
- // Doesn't use cache
- public GlusterServer getNewOnlineServer(String clusterName, String exceptServerName) {
- ClusterInfo cluster = clusterService.getCluster(clusterName);
- if (cluster == null) {
- return null;
- }
-
- for (ServerInfo serverInfo : cluster.getServers()) {
- GlusterServer server = new GlusterServer(serverInfo.getName());
- fetchServerDetails(server);
- if (server.isOnline() && !server.getName().equals(exceptServerName)) {
- // server is online. add it to cache and return
- clusterServerCache.put(clusterName, server);
- return server;
- }
- }
-
- // no online server found.
- return null;
- }
@GET
@Produces(MediaType.APPLICATION_JSON)
@@ -160,7 +117,7 @@ public class GlusterServersResource extends AbstractServersResource {
return okResponse(new GlusterServerListResponse(glusterServers), mediaType);
}
- GlusterServer onlineServer = getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -169,7 +126,7 @@ public class GlusterServersResource extends AbstractServersResource {
glusterServers = getGlusterServers(clusterName, onlineServer);
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -211,7 +168,7 @@ public class GlusterServersResource extends AbstractServersResource {
glusterServers = glusterUtil.getGlusterServers(onlineServer);
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
}
@@ -259,7 +216,7 @@ public class GlusterServersResource extends AbstractServersResource {
throw new GlusterRuntimeException("Cluster [" + clusterName + "] not found!");
}
- GlusterServer onlineServer = getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
}
@@ -269,7 +226,7 @@ public class GlusterServersResource extends AbstractServersResource {
server = glusterUtil.getGlusterServer(onlineServer, serverName);
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
}
@@ -283,7 +240,7 @@ public class GlusterServersResource extends AbstractServersResource {
}
private void performAddServer(String clusterName, String serverName) {
- GlusterServer onlineServer = getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online server found in cluster [" + clusterName + "]");
}
@@ -292,7 +249,7 @@ public class GlusterServersResource extends AbstractServersResource {
glusterUtil.addServer(onlineServer.getName(), serverName);
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online server found in cluster [" + clusterName + "]");
}
@@ -388,7 +345,7 @@ public class GlusterServersResource extends AbstractServersResource {
if (servers.size() == 1) {
// Only one server mapped to the cluster, no "peer detach" required.
// remove the cached online server for this cluster if present
- clusterServerCache.remove(clusterName);
+ clusterService.removeOnlineServer(clusterName);
} else {
try {
removeServerFromCluster(clusterName, serverName);
@@ -402,7 +359,7 @@ public class GlusterServersResource extends AbstractServersResource {
private void removeServerFromCluster(String clusterName, String serverName) {
// get an online server that is not same as the server being removed
- GlusterServer onlineServer = getOnlineServer(clusterName, serverName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName, serverName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online server found in cluster [" + clusterName + "]");
}
@@ -411,7 +368,7 @@ public class GlusterServersResource extends AbstractServersResource {
glusterUtil.removeServer(onlineServer.getName(), serverName);
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = getNewOnlineServer(clusterName, serverName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName, serverName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online server found in cluster [" + clusterName + "]");
}
@@ -420,7 +377,7 @@ public class GlusterServersResource extends AbstractServersResource {
if (onlineServer.getName().equals(serverName)) {
// since the cached server has been removed from the cluster, remove it from the cache
- clusterServerCache.remove(clusterName);
+ clusterService.removeOnlineServer(clusterName);
}
clusterService.unmapServerFromCluster(clusterName, serverName);
@@ -457,12 +414,12 @@ public class GlusterServersResource extends AbstractServersResource {
return badRequestResponse("Disk name must not be empty!");
}
- InitializeDiskTask initializeTask = new InitializeDiskTask(diskName, serverName);
+ InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, diskName, serverName);
try {
initializeTask.start();
taskResource.addTask(initializeTask);
- return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS, clusterName, RESOURCE_TASKS,
- initializeTask.getId());
+ return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_TASKS
+ + "/" + initializeTask.getId());
} catch (ConnectionException e) {
return errorResponse(e.getMessage());
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TasksResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TasksResource.java
index 44d86b1b..834033d0 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TasksResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TasksResource.java
@@ -45,9 +45,9 @@ import javax.ws.rs.core.Response;
import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.exceptions.GlusterValidationException;
-import com.gluster.storage.management.core.model.Task;
import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.response.TaskInfoListResponse;
+import com.gluster.storage.management.server.tasks.Task;
import com.sun.jersey.spi.resource.Singleton;
@Path(RESOURCE_PATH_CLUSTERS + "/{" + PATH_PARAM_CLUSTER_NAME + "}/" + RESOURCE_TASKS)
@@ -130,8 +130,8 @@ public class TasksResource extends AbstractResource {
task.commit();
}
// updateTask(taskId, taskOperation);
- return (Response) acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS, clusterName, RESOURCE_TASKS,
- taskId);
+ return (Response) acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/"
+ + RESOURCE_TASKS + "/" + taskId);
} catch(GlusterValidationException ve) {
return badRequestResponse(ve.getMessage());
} catch (GlusterRuntimeException e) {
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
index 0f3fbb95..107d4fb2 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
@@ -23,6 +23,9 @@ package com.gluster.storage.management.server.resources;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_ACCESS_PROTOCOLS;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_AUTO_COMMIT;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_BRICKS;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_FIX_LAYOUT;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_FORCED_DATA_MIGRATE;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_MIGRATE_DATA;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPERATION;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPTION_KEY;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPTION_VALUE;
@@ -54,9 +57,6 @@ import static com.gluster.storage.management.core.constants.RESTConstants.RESOUR
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_VOLUMES;
import static com.gluster.storage.management.core.constants.RESTConstants.TASK_START;
import static com.gluster.storage.management.core.constants.RESTConstants.TASK_STOP;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_FIX_LAYOUT;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_MIGRATE_DATA;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_FORCED_DATA_MIGRATE;
import java.io.File;
import java.io.IOException;
@@ -89,6 +89,7 @@ import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Brick;
import com.gluster.storage.management.core.model.GlusterServer;
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.VOLUME_TYPE;
import com.gluster.storage.management.core.model.VolumeLogMessage;
@@ -101,6 +102,8 @@ import com.gluster.storage.management.core.utils.FileUtil;
import com.gluster.storage.management.core.utils.ProcessUtil;
import com.gluster.storage.management.server.constants.VolumeOptionsDefaults;
import com.gluster.storage.management.server.services.ClusterService;
+import com.gluster.storage.management.server.tasks.MigrateDiskTask;
+import com.gluster.storage.management.server.tasks.RebalanceVolumeTask;
import com.gluster.storage.management.server.utils.GlusterUtil;
import com.gluster.storage.management.server.utils.ServerUtil;
import com.sun.jersey.api.core.InjectParam;
@@ -109,14 +112,10 @@ import com.sun.jersey.spi.resource.Singleton;
@Singleton
@Path(RESOURCE_PATH_CLUSTERS + "/{" + PATH_PARAM_CLUSTER_NAME + "}/" + RESOURCE_VOLUMES)
public class VolumesResource extends AbstractResource {
- private static final String PREPARE_BRICK_SCRIPT = "create_volume_directory.py";
private static final String VOLUME_DIRECTORY_CLEANUP_SCRIPT = "clear_volume_directory.py";
private static final String VOLUME_BRICK_LOG_SCRIPT = "get_volume_brick_log.py";
@InjectParam
- private GlusterServersResource glusterServersResource;
-
- @InjectParam
private ServerUtil serverUtil;
@InjectParam
@@ -128,6 +127,9 @@ public class VolumesResource extends AbstractResource {
@InjectParam
private VolumeOptionsDefaults volumeOptionsDefaults;
+ @InjectParam
+ private TasksResource taskResource;
+
@GET
@Produces({MediaType.APPLICATION_XML})
public Response getVolumesXML(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
@@ -153,7 +155,7 @@ public class VolumesResource extends AbstractResource {
}
public VolumeListResponse getVolumes(String clusterName) {
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
return new VolumeListResponse(new ArrayList<Volume>());
}
@@ -162,7 +164,7 @@ public class VolumesResource extends AbstractResource {
return new VolumeListResponse(glusterUtil.getAllVolumes(onlineServer.getName()));
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
return new VolumeListResponse(new ArrayList<Volume>());
}
@@ -199,7 +201,7 @@ public class VolumesResource extends AbstractResource {
return badRequestResponse("Stripe count must be a positive integer");
}
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -209,7 +211,7 @@ public class VolumesResource extends AbstractResource {
return createdResponse(volumeName);
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -287,7 +289,7 @@ public class VolumesResource extends AbstractResource {
private Volume getVolume(String clusterName, String volumeName) {
Volume volume;
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
}
@@ -296,7 +298,7 @@ public class VolumesResource extends AbstractResource {
volume = glusterUtil.getVolume(volumeName, onlineServer.getName());
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
}
@@ -325,36 +327,35 @@ public class VolumesResource extends AbstractResource {
return notFoundResponse("Cluster [" + clusterName + "] not found!");
}
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- if (operation.equals(RESTConstants.TASK_REBALANCE_START)) {
- return rebalanceStart(clusterName, volumeName, isFixLayout, isMigrateData, isForcedDataMigrate);
- } else if (operation.equals(RESTConstants.TASK_REBALANCE_STATUS)) {
- return rebalanceStatus(clusterName, volumeName);
- } else if (operation.equals(RESTConstants.TASK_REBALANCE_STOP)) {
- return rebalanceStop(clusterName, volumeName);
+ try {
+ if (operation.equals(RESTConstants.TASK_REBALANCE_START)) {
+ String taskId = rebalanceStart(clusterName, volumeName, isFixLayout, isMigrateData, isForcedDataMigrate);
+ return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_TASKS
+ + "/" + taskId);
+ } else if (operation.equals(RESTConstants.TASK_REBALANCE_STOP)) {
+ rebalanceStop(clusterName, volumeName);
+ } else {
+ performVolumeOperation(clusterName, volumeName, operation);
+ }
+ return noContentResponse();
+ } catch(Exception e) {
+ return errorResponse(e.getMessage());
}
-
+ }
+
+ private void performVolumeOperation(String clusterName, String volumeName, String operation) {
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
try {
- performOperation(volumeName, operation, onlineServer);
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- performOperation(volumeName, operation, onlineServer);
- } catch(Exception e1) {
- // TODO: Log the exception
- return errorResponse(e1.getMessage());
+ throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
}
+
+ performOperation(volumeName, operation, onlineServer);
+ } catch (ConnectionException e) {
+ // online server has gone offline! try with a different one.
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
+ performOperation(volumeName, operation, onlineServer);
}
- return noContentResponse();
}
private Status performOperation(String volumeName, String operation, GlusterServer onlineServer) {
@@ -397,7 +398,7 @@ public class VolumesResource extends AbstractResource {
}
List<Brick> bricks = volume.getBricks();
- Status status = glusterUtil.deleteVolume(volumeName, glusterServersResource.getOnlineServer(clusterName)
+ Status status = glusterUtil.deleteVolume(volumeName, clusterService.getOnlineServer(clusterName)
.getName());
if(!status.isSuccess()) {
return errorResponse("Couldn't delete volume [" + volumeName + "]. Error: " + status);
@@ -441,7 +442,7 @@ public class VolumesResource extends AbstractResource {
deleteFlag = false;
}
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -467,7 +468,7 @@ public class VolumesResource extends AbstractResource {
glusterUtil.removeBricks(volumeName, brickList, onlineServer.getName());
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
}
@@ -544,7 +545,7 @@ public class VolumesResource extends AbstractResource {
return notFoundResponse("Cluster [" + clusterName + "] not found!");
}
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -553,7 +554,7 @@ public class VolumesResource extends AbstractResource {
glusterUtil.setOption(volumeName, key, value, onlineServer.getName());
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -586,7 +587,7 @@ public class VolumesResource extends AbstractResource {
return notFoundResponse("Cluster [" + clusterName + "] not found!");
}
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -595,7 +596,7 @@ public class VolumesResource extends AbstractResource {
glusterUtil.resetOptions(volumeName, onlineServer.getName());
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -869,7 +870,7 @@ public class VolumesResource extends AbstractResource {
return notFoundResponse("Cluster [" + clusterName + "] not found!");
}
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -879,7 +880,7 @@ public class VolumesResource extends AbstractResource {
glusterUtil.addBricks(volumeName, brickList, onlineServer.getName());
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
+ onlineServer = clusterService.getNewOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -922,7 +923,7 @@ public class VolumesResource extends AbstractResource {
return notFoundResponse("Cluster [" + clusterName + "] not found!");
}
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
+ GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
if (onlineServer == null) {
return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
@@ -933,109 +934,54 @@ public class VolumesResource extends AbstractResource {
String taskId = null;
try {
- taskId = glusterUtil.migrateBrickStart(volumeName, fromBrick, toBrick, autoCommit, onlineServer.getName());
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
-
- try {
- taskId = glusterUtil.migrateBrickStart(volumeName, fromBrick, toBrick, autoCommit, onlineServer.getName());
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
- }
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
+ taskId = migrateBrickStart(clusterName, volumeName, fromBrick, toBrick, autoCommit);
+ }catch(Exception e) {
+ return errorResponse(e.getMessage());
}
- return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS, clusterName, RESOURCE_TASKS, taskId);
+ return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_TASKS + "/"
+ + taskId);
+ }
+
+ private String migrateBrickStart(String clusterName, String volumeName, String fromBrick, String toBrick,
+ Boolean autoCommit) {
+ MigrateDiskTask migrateDiskTask = new MigrateDiskTask(clusterService, clusterName, volumeName, fromBrick,
+ toBrick);
+ migrateDiskTask.setAutoCommit(autoCommit);
+ migrateDiskTask.start();
+ taskResource.addTask(migrateDiskTask);
+ return migrateDiskTask.getId();
}
- private Response rebalanceStart(String clusterName, String volumeName, Boolean isFixLayout, Boolean isMigrateData,
+ private String rebalanceStart(String clusterName, String volumeName, Boolean isFixLayout, Boolean isMigrateData,
Boolean isForcedDataMigrate) {
-
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return notFoundResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
String layout = "";
- String taskId = null;
if (isForcedDataMigrate) {
- layout = "forced-data-migrate = true";
+ layout = "forced-data-migrate";
} else if (isMigrateData) {
- layout = "migrate-data = true";
+ layout = "migrate-data";
} else if (isFixLayout) {
- layout = "fix-layout = true";
+ layout = "fix-layout";
}
- try {
- taskId = glusterUtil.rebalanceStart(volumeName, layout, onlineServer.getName());
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
-
- try {
- taskId = glusterUtil.rebalanceStart(volumeName, layout, onlineServer.getName());
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
- }
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
- }
-
- return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS, clusterName, RESOURCE_TASKS, taskId);
+ return rebalanceStart(clusterName, volumeName, layout);
}
- private Response rebalanceStatus(String clusterName, String volumeName) {
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return notFoundResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- String taskId = null;
- try {
- taskId = glusterUtil.rebalanceStatus(volumeName, onlineServer.getName());
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
-
- try {
- taskId = glusterUtil.rebalanceStatus(volumeName, onlineServer.getName());
- } catch (Exception e1) {
- return errorResponse(e1.getMessage());
- }
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
- }
-
- return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS, clusterName, RESOURCE_TASKS, taskId);
+ public String rebalanceStart(String clusterName, String volumeName, String layout) {
+ RebalanceVolumeTask rebalanceTask = new RebalanceVolumeTask(clusterService, clusterName, volumeName);
+ rebalanceTask.setLayout(layout);
+ rebalanceTask.start();
+ taskResource.addTask(rebalanceTask);
+ return rebalanceTask.getId();
}
- private Response rebalanceStop(String clusterName, String volumeName) {
- GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return notFoundResponse("No online servers found in cluster [" + clusterName + "]");
- }
+ public void rebalanceStop(String clusterName, String volumeName) {
+ // TODO: arrive at the task id and fetch it
+ String taskId = "";
- String taskId = null;
- try {
- taskId = glusterUtil.rebalanceStop(volumeName, onlineServer.getName());
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
-
- try {
- taskId = glusterUtil.rebalanceStop(volumeName, onlineServer.getName());
- } catch (Exception e1) {
- return errorResponse(e1.getMessage());
- }
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
- }
-
- return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS, clusterName, RESOURCE_TASKS, taskId);
+ taskResource.getTask(taskId).stop();
}
-
+
public static void main(String[] args) throws ClassNotFoundException {
VolumesResource vr = new VolumesResource();
// VolumeListResponse response = vr.getAllVolumes();
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java
index bb379de6..42bfc736 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java
@@ -35,13 +35,13 @@ import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.core.utils.LRUCache;
import com.gluster.storage.management.server.data.ClusterInfo;
import com.gluster.storage.management.server.data.PersistenceDao;
import com.gluster.storage.management.server.data.ServerInfo;
import com.gluster.storage.management.server.utils.GlusterUtil;
+import com.gluster.storage.management.server.utils.ServerUtil;
import com.gluster.storage.management.server.utils.SshUtil;
-import com.sun.jersey.api.core.InjectParam;
/**
* Service class for functionality related to clusters
@@ -60,6 +60,58 @@ public class ClusterService {
@Autowired
private SshUtil sshUtil;
+ @Autowired
+ private ServerUtil serverUtil;
+
+ private LRUCache<String, GlusterServer> onlineServerCache = new LRUCache<String, GlusterServer>(3);
+
+ public void addOnlineServer(String clusterName, GlusterServer server) {
+ onlineServerCache.put(clusterName, server);
+ }
+
+ public void removeOnlineServer(String clusterName) {
+ onlineServerCache.remove(clusterName);
+ }
+
+ // uses cache
+ public GlusterServer getOnlineServer(String clusterName, String exceptServerName) {
+ GlusterServer server = getOnlineServer(clusterName);
+ if (server != null && !server.getName().equals(exceptServerName)) {
+ return server;
+ }
+
+ return getNewOnlineServer(clusterName, exceptServerName);
+ }
+
+ public GlusterServer getNewOnlineServer(String clusterName) {
+ return getNewOnlineServer(clusterName, "");
+ }
+
+ public GlusterServer getOnlineServer(String clusterName) {
+ return getOnlineServer(clusterName, "");
+ }
+
+ // Doesn't use cache
+ public GlusterServer getNewOnlineServer(String clusterName, String exceptServerName) {
+ ClusterInfo cluster = getCluster(clusterName);
+ if (cluster == null) {
+ throw new GlusterRuntimeException("Cluster [" + clusterName + "] is not found!");
+ }
+
+ for (ServerInfo serverInfo : cluster.getServers()) {
+ GlusterServer server = new GlusterServer(serverInfo.getName());
+ serverUtil.fetchServerDetails(server);
+ if (server.isOnline() && !server.getName().equals(exceptServerName)) {
+ // server is online. add it to cache and return
+ addOnlineServer(clusterName, server);
+ return server;
+ }
+ }
+
+ // no online server found.
+ throw new GlusterRuntimeException("No online server found in cluster [" + clusterName + "]");
+ }
+
public List<ClusterInfo> getAllClusters() {
return clusterDao.findAll();
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java
index 018cd301..5f3f8e30 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java
@@ -21,10 +21,10 @@
package com.gluster.storage.management.server.tasks;
import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.Task;
import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE;
import com.gluster.storage.management.core.model.TaskStatus;
+import com.gluster.storage.management.server.services.ClusterService;
import com.gluster.storage.management.server.utils.SshUtil;
public class InitializeDiskTask extends Task {
@@ -36,15 +36,16 @@ public class InitializeDiskTask extends Task {
private String diskName;
private SshUtil sshUtil = new SshUtil();
- public InitializeDiskTask( String serverName, String diskName) {
- super(TASK_TYPE.DISK_FORMAT, diskName, "Initialize disk " + serverName + ":" + diskName, false, false, false);
+ public InitializeDiskTask(ClusterService clusterService, String clusterName, String serverName, String diskName) {
+ super(clusterService, clusterName, TASK_TYPE.DISK_FORMAT, diskName, "Initialize disk " + serverName + ":"
+ + diskName, false, false, false);
setServerName(serverName);
setDiskName(diskName);
}
- public InitializeDiskTask(TaskInfo info) {
- super(info);
+ public InitializeDiskTask(ClusterService clusterService, String clusterName, TaskInfo info) {
+ super(clusterService, clusterName, info);
}
@Override
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java
index 0b1b67e4..9a31d468 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java
@@ -20,13 +20,15 @@
*/
package com.gluster.storage.management.server.tasks;
+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.Status;
-import com.gluster.storage.management.core.model.Task;
import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE;
import com.gluster.storage.management.core.model.TaskStatus;
import com.gluster.storage.management.core.utils.ProcessResult;
+import com.gluster.storage.management.server.services.ClusterService;
import com.gluster.storage.management.server.utils.SshUtil;
public class MigrateDiskTask extends Task {
@@ -61,15 +63,15 @@ public class MigrateDiskTask extends Task {
this.autoCommit = autoCommit;
}
- public MigrateDiskTask(String volumeName, String fromBrick, String toBrick) {
- super(TASK_TYPE.BRICK_MIGRATE, volumeName, "Brick Migration on volume [" + volumeName + "] from [" + fromBrick
- + "] to [" + toBrick + "]", true, true, true);
+ public MigrateDiskTask(ClusterService clusterService, String clusterName, String volumeName, String fromBrick, String toBrick) {
+ super(clusterService, clusterName, TASK_TYPE.BRICK_MIGRATE, volumeName, "Brick Migration on volume ["
+ + volumeName + "] from [" + fromBrick + "] to [" + toBrick + "]", true, true, true);
setFromBrick(fromBrick);
setToBrick(toBrick);
}
- public MigrateDiskTask(TaskInfo info) {
- super(info);
+ public MigrateDiskTask(ClusterService clusterService, String clusterName, TaskInfo info) {
+ super(clusterService, clusterName, info);
}
@Override
@@ -79,31 +81,48 @@ public class MigrateDiskTask extends Task {
@Override
public void start() {
+ try {
+ startMigration(getOnlineServer().getName());
+ } catch(ConnectionException e) {
+ // online server might have gone offline. try with a new one.
+ startMigration(getNewOnlineServer().getName());
+ }
+ }
+
+ private void startMigration(String onlineServerName) {
String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " "
+ getToBrick() + " start";
- ProcessResult processResult = sshUtil.executeRemote(serverName, command);
- TaskStatus taskStatus = new TaskStatus();
+ ProcessResult processResult = sshUtil.executeRemote(onlineServerName, command);
+
+ System.out.println(command);
+ System.out.println("[" + processResult.getExitValue() + "] " + processResult.getOutput() );
+
if (processResult.isSuccess()) {
if (processResult.getOutput().trim().matches(".*started successfully$")) {
- taskStatus.setCode(Status.STATUS_CODE_RUNNING);
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
+ return;
}
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
}
- taskStatus.setMessage(processResult.getOutput()); // Common
- getTaskInfo().setStatus(taskStatus);
+
+ // if we come here, it means task couldn't be started successfully.
+ throw new GlusterRuntimeException(processResult.toString());
}
-
-
@Override
public void pause() {
+ try {
+ pauseMigration(getOnlineServer().getName());
+ } catch(ConnectionException e) {
+ // online server might have gone offline. try with a new one.
+ pauseMigration(getNewOnlineServer().getName());
+ }
+ }
+
+ private void pauseMigration(String onlineServer) {
String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " " + getToBrick()
+ " pause";
- ProcessResult processResult = sshUtil.executeRemote(serverName, command);
+ ProcessResult processResult = sshUtil.executeRemote(onlineServer, command);
TaskStatus taskStatus = new TaskStatus();
if (processResult.isSuccess()) {
if (processResult.getOutput().matches("*pause")) {
@@ -131,6 +150,15 @@ public class MigrateDiskTask extends Task {
@Override
public void stop() {
+ try {
+ stopMigration(getOnlineServer().getName());
+ } catch(ConnectionException e) {
+ // online server might have gone offline. try with a new one.
+ stopMigration(getNewOnlineServer().getName());
+ }
+ }
+
+ private void stopMigration(String serverName) {
String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " " + getToBrick()
+ " abort";
@@ -152,6 +180,15 @@ public class MigrateDiskTask extends Task {
@Override
public TaskStatus checkStatus() {
+ try {
+ return checkMigrationStatus(getOnlineServer().getName());
+ } catch(ConnectionException e) {
+ // online server might have gone offline. try with a new one.
+ return checkMigrationStatus(getNewOnlineServer().getName());
+ }
+ }
+
+ private TaskStatus checkMigrationStatus(String serverName) {
String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " "
+ getToBrick() + " status";
ProcessResult processResult = sshUtil.executeRemote(serverName, command);
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java
index f696a823..7f9fb6bf 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java
@@ -20,12 +20,14 @@
*/
package com.gluster.storage.management.server.tasks;
+import com.gluster.storage.management.core.exceptions.ConnectionException;
+import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.Task;
import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE;
import com.gluster.storage.management.core.model.TaskStatus;
import com.gluster.storage.management.core.utils.ProcessResult;
+import com.gluster.storage.management.server.services.ClusterService;
import com.gluster.storage.management.server.utils.SshUtil;
public class RebalanceVolumeTask extends Task {
@@ -33,12 +35,12 @@ public class RebalanceVolumeTask extends Task {
private String layout;
private SshUtil sshUtil = new SshUtil();
- public RebalanceVolumeTask(TaskInfo taskInfo) {
- super(taskInfo);
+ public RebalanceVolumeTask(ClusterService clusterService, String clusterName, TaskInfo taskInfo) {
+ super(clusterService, clusterName, taskInfo);
}
- public RebalanceVolumeTask(String volumeName) {
- super(TASK_TYPE.VOLUME_REBALANCE, volumeName, "Volume rebalance running on " + volumeName, false, true, false);
+ public RebalanceVolumeTask(ClusterService clusterService, String clusterName, String volumeName) {
+ super(clusterService, clusterName, TASK_TYPE.VOLUME_REBALANCE, volumeName, "Volume rebalance running on " + volumeName, false, true, false);
}
@Override
@@ -48,20 +50,25 @@ public class RebalanceVolumeTask extends Task {
@Override
public void start() {
+ try {
+ startRebalance(getOnlineServer().getName());
+ } catch(ConnectionException e) {
+ // online server might have gone offline. try with a new one
+ startRebalance(getNewOnlineServer().getName());
+ }
+ }
+
+ private void startRebalance(String serverName) {
String command = "gluster volume rebalance " + getTaskInfo().getReference() + " " + getLayout() + " start";
ProcessResult processResult = sshUtil.executeRemote(serverName, command);
- TaskStatus taskStatus = new TaskStatus();
if (processResult.isSuccess()) {
if (processResult.getOutput().trim().matches(".*has been successful$")) {
- taskStatus.setCode(Status.STATUS_CODE_RUNNING);
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
}
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
}
- taskStatus.setMessage(processResult.getOutput()); // Common
- getTaskInfo().setStatus(taskStatus);
+
+ // if we reach here, it means rebalance start failed.
+ throw new GlusterRuntimeException(processResult.toString());
}
@Override
@@ -72,6 +79,15 @@ public class RebalanceVolumeTask extends Task {
@Override
public void stop() {
+ try {
+ stopRebalance(getOnlineServer().getName());
+ } catch(ConnectionException e) {
+ // online server might have gone offline. try with a new one
+ stopRebalance(getNewOnlineServer().getName());
+ }
+ }
+
+ private void stopRebalance(String serverName) {
String command = "gluster volume rebalance " + getTaskInfo().getReference() + " stop";
ProcessResult processResult = sshUtil.executeRemote(serverName, command);
TaskStatus taskStatus = new TaskStatus();
@@ -96,6 +112,16 @@ public class RebalanceVolumeTask extends Task {
@Override
public TaskStatus checkStatus() {
+ try {
+ return checkRebalanceStatus(getOnlineServer().getName());
+ } catch(ConnectionException e) {
+ // online server might have gone offline. try with a new one.
+ return checkRebalanceStatus(getNewOnlineServer().getName());
+ }
+ }
+
+ // TODO: This method should move to glusterUtil
+ private TaskStatus checkRebalanceStatus(String serverName) {
String command = "gluster volume rebalance " + getTaskInfo().getReference() + " status";
ProcessResult processResult = sshUtil.executeRemote(serverName, command);
TaskStatus taskStatus = new TaskStatus();
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java
index b7823c4b..cdc56400 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java
@@ -18,30 +18,54 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
-package com.gluster.storage.management.core.model;
+package com.gluster.storage.management.server.tasks;
+import com.gluster.storage.management.core.exceptions.ConnectionException;
+import com.gluster.storage.management.core.model.GlusterServer;
+import com.gluster.storage.management.core.model.TaskInfo;
+import com.gluster.storage.management.core.model.TaskStatus;
import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE;
+import com.gluster.storage.management.server.services.ClusterService;
public abstract class Task {
public String[] TASK_TYPE_STR = { "Format Disk", "Migrate Brick", "Volume Rebalance" };
- protected TaskInfo taskInfo;
+ protected TaskInfo taskInfo;
+ protected String clusterName;
+ private ClusterService clusterService;
- protected String serverName;
-
- public Task(TASK_TYPE type, String reference, String desc, boolean canPause, boolean canStop, boolean canCommit) {
- taskInfo = new TaskInfo();
+ public Task(ClusterService clusterService, String clusterName, TASK_TYPE type, String reference, String desc, boolean canPause, boolean canStop, boolean canCommit) {
+ TaskInfo taskInfo = new TaskInfo();
taskInfo.setType(type);
taskInfo.setReference(reference);
taskInfo.setDescription(desc);
// IMPORTANT. This call must be in the end since getId may need to use the values set in above statements
- taskInfo.setName(getId());
+ taskInfo.setName(getId());
+ init(clusterService, clusterName, taskInfo);
+ }
+
+ public Task(ClusterService clusterService, String clusterName, TaskInfo taskInfo) {
+ init(clusterService, clusterName, taskInfo);
}
- public Task(TaskInfo taskInfo) {
+ private void init(ClusterService clusterService, String clusterName, TaskInfo taskInfo) {
+ this.clusterService = clusterService;
+ setClusterName(clusterName);
setTaskInfo(taskInfo);
}
+
+ protected GlusterServer getOnlineServer() {
+ return clusterService.getOnlineServer(clusterName);
+ }
+
+ protected GlusterServer getNewOnlineServer() {
+ return clusterService.getNewOnlineServer(clusterName);
+ }
+
+ protected GlusterServer getNewOnlineServer(String exceptServerName) {
+ return clusterService.getNewOnlineServer(clusterName, exceptServerName);
+ }
public String getTypeStr() {
return TASK_TYPE_STR[taskInfo.getType().ordinal()];
@@ -51,12 +75,12 @@ public abstract class Task {
return getTaskInfo().getType();
}
- public String getOnlineServer() {
- return serverName;
+ public String getClusterName() {
+ return clusterName;
}
- public void setOnlineServer(String serverName) {
- this.serverName = serverName;
+ public void setClusterName(String clusterName) {
+ this.clusterName = clusterName;
}
public TaskInfo getTaskInfo() {
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 c2da8d6c..788e3eab 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
@@ -536,65 +536,6 @@ public class GlusterUtil {
return logFileName;
}
-
- public String migrateBrickStart(String volumeName, String fromBrick, String toBrick, Boolean autoCommit,
- String knownServer) {
- MigrateDiskTask migrateDiskTask = new MigrateDiskTask(volumeName, fromBrick, toBrick);
- migrateDiskTask.setOnlineServer(knownServer);
- migrateDiskTask.setAutoCommit(autoCommit);
- migrateDiskTask.start();
- int status = migrateDiskTask.getTaskInfo().getStatus().getCode();
- if (status != Status.STATUS_CODE_FAILURE ) {
- TasksResource tasksResource = new TasksResource();
- taskResource.addTask(migrateDiskTask);
- } else {
- throw new GlusterRuntimeException( migrateDiskTask.getTaskInfo().getStatus().getMessage());
- }
- return migrateDiskTask.getId();
- }
-
- public String rebalanceStart(String volumeName, String layout, String knownServer) {
-
- RebalanceVolumeTask rebalanceTask = new RebalanceVolumeTask(volumeName);
- rebalanceTask.setOnlineServer(knownServer);
- rebalanceTask.setLayout(layout);
- rebalanceTask.start();
- int status = rebalanceTask.getTaskInfo().getStatus().getCode();
-
- if(status != Status.STATUS_CODE_FAILURE) {
- taskResource.addTask(rebalanceTask);
- } else {
- throw new GlusterRuntimeException( rebalanceTask.getTaskInfo().getStatus().getMessage());
- }
- return rebalanceTask.getId();
- }
-
- public String rebalanceStatus(String volumeName, String knownServer) {
- RebalanceVolumeTask rebalanceTask = new RebalanceVolumeTask(volumeName);
- rebalanceTask.setOnlineServer(knownServer);
-
- rebalanceTask.checkStatus();
- int status = rebalanceTask.getTaskInfo().getStatus().getCode();
-
- if (status == Status.STATUS_CODE_FAILURE) {
- throw new GlusterRuntimeException(rebalanceTask.getTaskInfo().getStatus().getMessage());
- }
- return rebalanceTask.getId();
- }
-
- public String rebalanceStop(String volumeName, String knownServer) {
- RebalanceVolumeTask rebalanceTask = new RebalanceVolumeTask(volumeName);
- rebalanceTask.setOnlineServer(knownServer);
-
- rebalanceTask.stop();
- int status = rebalanceTask.getTaskInfo().getStatus().getCode();
-
- if (status == Status.STATUS_CODE_FAILURE) {
- throw new GlusterRuntimeException(rebalanceTask.getTaskInfo().getStatus().getMessage());
- }
- return rebalanceTask.getId();
- }
-
public Status removeBricks(String volumeName, List<String> bricks, String knownServer) {
StringBuilder command = new StringBuilder("gluster --mode=script volume remove-brick " + volumeName);
for (String brickDir : bricks) {
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
index ed1aea75..3524d35d 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
@@ -42,6 +42,7 @@ 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.Server;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.utils.ProcessResult;
@@ -76,6 +77,22 @@ public class ServerUtil {
String scriptPath = servletContext.getRealPath(SCRIPT_DIR) + CoreConstants.FILE_SEPARATOR + scriptName;
return scriptPath;
}
+
+ /**
+ * Fetch details of the given server. The server name must be populated in the object before calling this method.
+ *
+ * @param server
+ * Server whose details are to be fetched
+ */
+ public void fetchServerDetails(Server server) {
+ // fetch standard server details like cpu, disk, memory details
+ Object response = executeOnServer(true, server.getName(), "get_server_details.py --only-data-disks", Server.class);
+ if (response instanceof Status) {
+ // TODO: check if this happened because the server is not reachable, and if yes, set it's status as offline
+ throw new GlusterRuntimeException(((Status)response).getMessage());
+ }
+ server.copyFrom((Server) response); // Update the details in <Server> object
+ }
/**
* Executes given command on given server