summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSelvasundaram <selvam@gluster.com>2011-07-07 15:54:59 +0530
committerSelvasundaram <selvam@gluster.com>2011-07-07 15:54:59 +0530
commitf82c3a6b43aca0c2502e0241dd6508b05d179b10 (patch)
treec3ebaaa7ce9db732e3bbdf7ad6492922b8c952c2
parent9f0728357a909a9b38d74866ebb03a1be23dae87 (diff)
Rebalance volume bug fixes
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java2
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java4
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java14
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java4
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/VolumesResource.java12
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateBrickTask.java11
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java23
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java2
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 8d821174..d4242089 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
@@ -616,7 +616,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 ec530365..31e02cd4 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);