summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDhandapani <dhandapani@gluster.com>2011-07-01 16:36:04 +0530
committerDhandapani <dhandapani@gluster.com>2011-07-04 14:10:42 +0530
commit0b60788162f3920df3b62f39088334f0ce90ee41 (patch)
tree1a360efecff4b63c22ca5dcca7381e81f38c7c8d /src
parent64298ea8a716c137f958e378e5a2c0798635cae8 (diff)
Volume Rebalance functionality enhancement
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java12
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java37
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java36
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java12
4 files changed, 49 insertions, 48 deletions
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 e3bfe158..1f4b15de 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
@@ -415,11 +415,15 @@ public class GlusterServersResource extends AbstractServersResource {
}
InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, serverName, diskName);
- initializeTask.start();
- taskResource.addTask(initializeTask);
+ 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 (Exception e) {
+ return errorResponse(e.getMessage());
+ }
}
private void setGlusterUtil(GlusterUtil glusterUtil) {
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 40d7877e..4592b759 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
@@ -55,22 +55,29 @@ public class InitializeDiskTask extends Task {
@Override
public String getId() {
- return new String(Base64.encode(taskInfo.getType() + "-" + serverName + ":" + diskName));
+ return new String(
+ Base64.encode(getClusterName() + "-" + taskInfo.getType() + "-" + serverName + ":" + diskName));
}
@Override
public void resume() {
- getTaskInfo().setStatus( new TaskStatus( new Status(Status.STATUS_CODE_FAILURE, "Can not resume disk initialization")));
+ getTaskInfo().setStatus(
+ new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
+ "Stop/Pause/Resume is not supported in Disk Initialization")));
}
@Override
public void stop() {
- getTaskInfo().setStatus( new TaskStatus( new Status(Status.STATUS_CODE_FAILURE, "Can not stop disk initialization")));
+ getTaskInfo().setStatus(
+ new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
+ "Stop/Pause/Resume is not supported in Disk Initialization")));
}
@Override
public void pause() {
- getTaskInfo().setStatus( new TaskStatus( new Status(Status.STATUS_CODE_FAILURE, "Can not suspend disk initialization")));
+ getTaskInfo().setStatus(
+ new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
+ "Stop/Pause/Resume is not supported in Disk Initialization")));
}
@Override
@@ -91,24 +98,20 @@ public class InitializeDiskTask extends Task {
@Override
public void start() {
try {
- startInitializeDisk(getOnlineServer().getName());
+ startInitializeDisk(serverName);
} catch(ConnectionException e) {
- // online server might have gone offline. try with a new one
- startInitializeDisk(getNewOnlineServer().getName());
+ // online server might have gone offline. update the failure status
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage())));
}
}
private void startInitializeDisk(String serverName) {
ProcessResult processResult = sshUtil.executeRemote(serverName, INITIALIZE_DISK_SCRIPT + " " + getDiskName());
if (processResult.isSuccess()) {
- // TODO: Message needs to change according to the script return
- if (processResult.getOutput().trim().matches(".*has been successful$")) {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
- return;
- }
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
+ return;
}
-
+
// if we reach here, it means Initialize disk start failed.
throw new GlusterRuntimeException(processResult.toString());
@@ -118,10 +121,10 @@ public class InitializeDiskTask extends Task {
public TaskStatus checkStatus() {
try {
- return glusterUtil.checkInitializeDiskStatus(getOnlineServer().getName(), getDiskName());
+ return glusterUtil.checkInitializeDiskStatus(serverName, getDiskName());
} catch(ConnectionException e) {
- // online server might have gone offline. try with a new one
- return glusterUtil.checkInitializeDiskStatus(getNewOnlineServer().getName(), getDiskName());
+ // online server might have gone offline. update the failure status
+ return new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage()));
}
}
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 33655b3f..f94613e0 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
@@ -44,13 +44,13 @@ public class RebalanceVolumeTask extends Task {
}
public RebalanceVolumeTask(ClusterService clusterService, String clusterName, String volumeName) {
- super(clusterService, clusterName, TASK_TYPE.VOLUME_REBALANCE, volumeName, "Volume rebalance running on "
- + volumeName, false, true, false);
+ super(clusterService, clusterName, TASK_TYPE.VOLUME_REBALANCE, volumeName, "Volume " + volumeName
+ + " Rebalance", false, true, false);
}
@Override
public String getId() {
- return new String(Base64.encode(taskInfo.getType() + "-" + taskInfo.getReference()));
+ return new String(Base64.encode(getClusterName() + "-" + taskInfo.getType() + "-" + taskInfo.getReference()));
}
@Override
@@ -69,13 +69,10 @@ public class RebalanceVolumeTask extends Task {
String command = "gluster volume rebalance " + getTaskInfo().getReference() + " " + getLayout() + " start";
ProcessResult processResult = sshUtil.executeRemote(serverName, command);
if (processResult.isSuccess()) {
- if (processResult.getOutput().trim().matches(".*has been successful$")) {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
- return;
- }
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
+ return;
}
-
+
// if we reach here, it means rebalance start failed.
throw new GlusterRuntimeException(processResult.toString());
}
@@ -90,33 +87,18 @@ public class RebalanceVolumeTask extends Task {
@Override
public void stop() {
try {
- stopRebalance(serverName);
+ glusterUtil.stopRebalance(serverName, getTaskInfo().getReference());
} catch (ConnectionException e) {
// online server might have gone offline. update the failure status
getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage())));
}
}
- private void stopRebalance(String serverName) {
- String command = "gluster volume rebalance " + getTaskInfo().getReference() + " stop";
- ProcessResult processResult = sshUtil.executeRemote(serverName, command);
-
- if (processResult.isSuccess()) {
- if (processResult.getOutput().trim().matches(".*has been successful$")) {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_SUCCESS, processResult.getOutput())));
- return;
- }
- }
-
- // if we reach here, it means rebalance stop failed.
- throw new GlusterRuntimeException(processResult.toString());
- }
-
@Override
public void pause() {
getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, "Pause/Resume is not supported in Volume Rebalance")));
+ new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
+ "Pause/Resume is not supported in Volume Rebalance")));
}
@Override
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 a09c7956..1dc5eb1a 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
@@ -573,6 +573,16 @@ public class GlusterUtil {
return taskStatus;
}
+ public void stopRebalance(String serverName, String volumeName) {
+ String command = "gluster volume rebalance " + volumeName + " stop";
+ ProcessResult processResult = sshUtil.executeRemote(serverName, command);
+ TaskStatus taskStatus = new TaskStatus();
+ if (processResult.isSuccess()) {
+ taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
+ taskStatus.setMessage(processResult.getOutput());
+ }
+ }
+
public TaskStatus checkInitializeDiskStatus(String serverName, String diskName) {
ProcessResult processResult = sshUtil.executeRemote(serverName, INITIALIZE_DISK_STATUS_SCRIPT + " " + diskName);
TaskStatus taskStatus = new TaskStatus();
@@ -581,7 +591,9 @@ public class GlusterUtil {
if (processResult.getOutput().trim().matches(".*Initailize completed$")) {
taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
} else {
+ // TODO: Percentage completed needs to be set, according to the script output
taskStatus.setCode(Status.STATUS_CODE_RUNNING);
+ // taskStatus.setPercentCompleted(processResult.getOutput());
}
} else {
taskStatus.setCode(Status.STATUS_CODE_FAILURE);