diff options
| author | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-07-07 05:18:51 -0700 |
|---|---|---|
| committer | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-07-07 05:18:51 -0700 |
| commit | 5e04ff19a21ed84aa59004bb8040e1a0d6734542 (patch) | |
| tree | b02a103f3460c2a8007441960380723547b13b29 /src | |
| parent | 8ad430f0dfd3c6ae45c8982631715d41d951c6a4 (diff) | |
| parent | 9862c8c2da1414b4e70fa788e2ab53db1775b525 (diff) | |
Merge pull request #102 from Selvasundaram/master
Rebalance volume bug fixes
Diffstat (limited to 'src')
9 files changed, 48 insertions, 26 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java index 8027473b..9ee4513c 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java @@ -646,7 +646,7 @@ public class GlusterDataModelManager { public void removeTask(TaskInfo taskInfo) { model.getCluster().removeTaskInfo(taskInfo); for (ClusterListener listener : listeners) { - listener.taskAdded(taskInfo); + listener.taskRemoved(taskInfo); } } 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 7beb8433..3435b2e1 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 @@ -232,13 +232,13 @@ public class VolumesClient extends AbstractClient { return putRequestURI(volumeName + "/" + RESTConstants.RESOURCE_BRICKS, form); } - public void rebalanceStart(String volumeName, Boolean fixLayout, Boolean migrateData, Boolean forcedDataMigrate) { + public URI rebalanceStart(String volumeName, Boolean fixLayout, Boolean migrateData, Boolean forcedDataMigrate) { Form form = new Form(); form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_REBALANCE_START); form.add(RESTConstants.FORM_PARAM_FIX_LAYOUT, fixLayout); form.add(RESTConstants.FORM_PARAM_MIGRATE_DATA, migrateData); form.add(RESTConstants.FORM_PARAM_FORCED_DATA_MIGRATE, forcedDataMigrate); - putRequest(volumeName, form); + return putRequestURI(volumeName, form); } public void rebalanceStop(String volumeName) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java index 4a580d05..c22eca43 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java @@ -19,6 +19,7 @@ public class ClearTaskAction extends AbstractActionDelegate { try { new TasksClient().deleteTask(taskInfo.getName()); // taskId modelManager.removeTask(taskInfo); + action.setEnabled(false); // TODO disable other task buttons } catch (Exception e) { showErrorDialog(actionDesc, "Task [" + taskInfo.getName() + "] could not be cleared! Error: [" + e.getMessage() + "]"); @@ -42,5 +43,4 @@ public class ClearTaskAction extends AbstractActionDelegate { public void dispose() { } - } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java index a203dfb4..7e44c43b 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java @@ -18,10 +18,15 @@ *******************************************************************************/ package com.gluster.storage.management.gui.actions; +import java.net.URI; + import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; +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.TaskInfo; import com.gluster.storage.management.core.model.Volume; public class RebalanceVolumeAction extends AbstractActionDelegate { @@ -31,13 +36,18 @@ public class RebalanceVolumeAction extends AbstractActionDelegate { protected void performAction(final IAction action) { final String actionDesc = action.getDescription(); try { - new VolumesClient().rebalanceStart(volume.getName(), false, false, false); + URI uri = new VolumesClient().rebalanceStart(volume.getName(), false, false, false); + // Add the task to model + TasksClient taskClient = new TasksClient(); + TaskInfo taskInfo = taskClient.getTaskInfo(uri); + if (taskInfo != null && taskInfo instanceof TaskInfo) { + GlusterDataModelManager.getInstance().getModel().getCluster().addTaskInfo(taskInfo); + } showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] rebalance started successfully!"); } catch (Exception e) { showErrorDialog(actionDesc, "Volume rebalance could not be started on [" + volume.getName() + "]! Error: [" + e.getMessage() + "]"); } - } @Override diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java index 38b68040..43c9e35f 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java @@ -96,7 +96,6 @@ public class TasksResource extends AbstractResource { return tasks; } - @GET @Produces(MediaType.APPLICATION_XML) public Response getTasks() { @@ -138,7 +137,8 @@ public class TasksResource extends AbstractResource { } else if (taskOperation.equals(RESTConstants.TASK_PAUSE)) { task.pause(); } else if (taskOperation.equals(RESTConstants.TASK_STOP)) { - task.stop(); + // task.stop(); + clearTask(taskId, taskOperation); // Stop and remove from the task list } else if (taskOperation.equals(RESTConstants.TASK_COMMIT)) { task.commit(); } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/VolumesResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/VolumesResource.java index a09b7f08..a00ed974 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/VolumesResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/VolumesResource.java @@ -964,7 +964,7 @@ public class VolumesResource extends AbstractResource { return migrateDiskTask.getTaskInfo().getName(); // Return Task ID } - private String rebalanceStart(String clusterName, String volumeName, Boolean isFixLayout, Boolean isMigrateData, + private String getLayout(Boolean isFixLayout, Boolean isMigrateData, Boolean isForcedDataMigrate) { String layout = ""; if (isForcedDataMigrate) { @@ -974,13 +974,13 @@ public class VolumesResource extends AbstractResource { } else if (isFixLayout) { layout = "fix-layout"; } - - return rebalanceStart(clusterName, volumeName, layout); + return layout; } - private String rebalanceStart(String clusterName, String volumeName, String layout) { - RebalanceVolumeTask rebalanceTask = new RebalanceVolumeTask(clusterService, clusterName, volumeName); - rebalanceTask.setLayout(layout); + private String rebalanceStart(String clusterName, String volumeName, Boolean isFixLayout, Boolean isMigrateData, + Boolean isForcedDataMigrate) { + RebalanceVolumeTask rebalanceTask = new RebalanceVolumeTask(clusterService, clusterName, volumeName, getLayout( + isFixLayout, isMigrateData, isForcedDataMigrate)); rebalanceTask.start(); taskResource.addTask(rebalanceTask); return rebalanceTask.getId(); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateBrickTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateBrickTask.java index 9236a6d3..1715807f 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateBrickTask.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateBrickTask.java @@ -37,7 +37,7 @@ public class MigrateBrickTask extends Task { private String fromBrick; private String toBrick; private Boolean autoCommit; - private GlusterUtil glusterUtil = new GlusterUtil(); + private GlusterUtil glusterUtil; public String getFromBrick() { return fromBrick; @@ -70,6 +70,12 @@ public class MigrateBrickTask extends Task { setFromBrick(fromBrick); setToBrick(toBrick); taskInfo.setName(getId()); + init(); + } + + private void init() { + ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext(); + glusterUtil = ctx.getBean(GlusterUtil.class); } @Override @@ -89,8 +95,7 @@ public class MigrateBrickTask extends Task { } private void startMigration(String onlineServerName) { - ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext(); - glusterUtil = ctx.getBean(GlusterUtil.class); + ProcessResult processResult = glusterUtil.executeBrickMigration(onlineServerName, getTaskInfo().getReference(), getFromBrick(), getToBrick(), "start"); if (processResult.getOutput().trim().matches(".*started successfully$")) { 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 f94613e0..24c2f1b5 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,10 +20,12 @@ */ package com.gluster.storage.management.server.tasks; +import org.springframework.context.ApplicationContext; +import org.springframework.web.context.ContextLoader; + 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.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; @@ -36,16 +38,21 @@ public class RebalanceVolumeTask extends Task { private String layout; private String serverName; - private SshUtil sshUtil = new SshUtil(); - private GlusterUtil glusterUtil = new GlusterUtil(); - - public RebalanceVolumeTask(ClusterService clusterService, String clusterName, TaskInfo taskInfo) { - super(clusterService, clusterName, taskInfo); - } + private SshUtil sshUtil; + private GlusterUtil glusterUtil; - public RebalanceVolumeTask(ClusterService clusterService, String clusterName, String volumeName) { + public RebalanceVolumeTask(ClusterService clusterService, String clusterName, String volumeName, String layout) { super(clusterService, clusterName, TASK_TYPE.VOLUME_REBALANCE, volumeName, "Volume " + volumeName + " Rebalance", false, true, false); + setLayout(layout); + taskInfo.setName(getId()); + init(); + } + + private void init() { + ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext(); + sshUtil = ctx.getBean(SshUtil.class); + glusterUtil = ctx.getBean(GlusterUtil.class); } @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 4bd3b632..df1b72cc 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 @@ -556,7 +556,7 @@ public class GlusterUtil { if (processResult.isSuccess()) { if (processResult.getOutput().trim().matches("^rebalance completed.*")) { taskStatus.setCode(Status.STATUS_CODE_SUCCESS); - } else if(processResult.getOutput().trim().matches(".*in progress:.*")) { + } else if(processResult.getOutput().trim().matches(".*in progress.*")) { taskStatus.setCode(Status.STATUS_CODE_RUNNING); } else { taskStatus.setCode(Status.STATUS_CODE_FAILURE); |
