diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-07-01 16:36:04 +0530 |
|---|---|---|
| committer | Dhandapani <dhandapani@gluster.com> | 2011-07-04 14:10:42 +0530 |
| commit | 0b60788162f3920df3b62f39088334f0ce90ee41 (patch) | |
| tree | 1a360efecff4b63c22ca5dcca7381e81f38c7c8d /src | |
| parent | 64298ea8a716c137f958e378e5a2c0798635cae8 (diff) | |
Volume Rebalance functionality enhancement
Diffstat (limited to 'src')
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); |
