summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShireesh Anjal <anjalshireesh@gmail.com>2011-06-30 08:40:13 -0700
committerShireesh Anjal <anjalshireesh@gmail.com>2011-06-30 08:40:13 -0700
commitd96ded5677e17b4514fe1be67e4138e79714979b (patch)
tree0d95fb18d58bb0678cf8c8a4e48fbb7594333a3a
parent0c36771b2b372273fed877dab8e7b79d6ee6ee4a (diff)
parent9b2290860f9dc5b6bbbe5cfaff785d4eeb617ecd (diff)
Merge pull request #92 from Selvasundaram/master
Migrate task and UI updates
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java20
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java8
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java4
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java1
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java2
-rw-r--r--src/com.gluster.storage.management.gui/plugin.xml16
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/TasksTableLabelProvider.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/CommitTaskAction.java54
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java7
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java7
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java6
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java1
-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.java8
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java80
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java9
17 files changed, 181 insertions, 54 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 87fbed31..9705501a 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
@@ -362,14 +362,28 @@ public class GlusterDataModelManager {
}
}
- public void updateTaskStatus(TaskInfo taskInfo, Status newStatus) {
- taskInfo.getStatus().setCode(newStatus.getCode());
- taskInfo.getStatus().setMessage(newStatus.getMessage());
+ public void addTask(TaskInfo taskInfo) {
+ Cluster cluster = model.getCluster();
+ cluster.addTaskInfo(taskInfo);
+ for (ClusterListener listener : listeners) {
+ listener.taskAdded(taskInfo);
+ }
+ }
+
+ // Updating the Task
+ public void updateTask(TaskInfo taskInfo) {
for (ClusterListener listener : listeners) {
listener.taskUpdated(taskInfo);
}
}
+ public void removeTask(TaskInfo taskInfo) {
+ Cluster cluster = model.getCluster();
+ cluster.removeTaskInfo(taskInfo);
+ for (ClusterListener listener : listeners) {
+ listener.taskAdded(taskInfo);
+ }
+ }
public List<VolumeOptionInfo> getVolumeOptionsDefaults() {
return volumeOptionsDefaults;
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 deaeee64..46077371 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
@@ -25,7 +25,6 @@ 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.model.TaskInfo;
import com.gluster.storage.management.core.response.TaskInfoListResponse;
@@ -76,6 +75,13 @@ public class TasksClient extends AbstractClient {
putRequest(taskId, form);
}
+
+ public void commitTask(String taskId) {
+ Form form = new Form();
+ form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_COMMIT);
+
+ putRequest(taskId, form);
+ }
public void getTaskStatus(String taskId) {
Form form = new Form();
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
index 0c094e99..d6757cba 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
@@ -115,6 +115,10 @@ public class Cluster extends Entity {
public void addTaskInfo(TaskInfo taskInfo) {
this.taskInfoList.add(taskInfo);
}
+
+ public void removeTaskInfo(TaskInfo taskInfo) {
+ this.taskInfoList.remove(taskInfo);
+ }
public List<Alert> getAlerts() {
return alerts;
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java
index 95075f78..701fe426 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java
@@ -31,6 +31,7 @@ public class Status {
public static final int STATUS_CODE_RUNNING = 3;
public static final int STATUS_CODE_PAUSE = 4;
public static final int STATUS_CODE_WARNING = 5;
+ public static final int STATUS_CODE_COMMIT_PENDING = 6;
public static final Status STATUS_SUCCESS = new Status(STATUS_CODE_SUCCESS, "Success");
public static final Status STATUS_FAILURE = new Status(STATUS_CODE_FAILURE, "Failure");
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java
index 46dc7b31..c1205c0e 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java
@@ -22,7 +22,7 @@ package com.gluster.storage.management.core.model;
public class TaskStatus extends Status {
- private boolean isPercentageSupported;
+ private boolean isPercentageSupported = false;
private float percentCompleted;
private String description;
diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml
index c5c25c33..0addb428 100644
--- a/src/com.gluster.storage.management.gui/plugin.xml
+++ b/src/com.gluster.storage.management.gui/plugin.xml
@@ -685,6 +685,22 @@
</action>
<action
allowLabelUpdate="false"
+ class="com.gluster.storage.management.gui.actions.CommitTaskAction"
+ definitionId="com.gluster.storage.management.gui.commands.Commit"
+ icon="icons/stop.png"
+ id="com.gluster.storage.management.gui.actions.Commit"
+ label="&amp;Commit TaskTask"
+ menubarPath="com.gluster.storage.management.gui.menu.cluster/cluster"
+ mode="FORCE_TEXT"
+ pulldown="false"
+ retarget="false"
+ state="false"
+ style="push"
+ toolbarPath="Normal"
+ tooltip="To Commit the selected task">
+ </action>
+ <action
+ allowLabelUpdate="false"
class="com.gluster.storage.management.gui.actions.StopTaskAction"
definitionId="com.gluster.storage.management.gui.commands.Stop"
icon="icons/stop_task.png"
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/TasksTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/TasksTableLabelProvider.java
index 177b069e..82aa1f44 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/TasksTableLabelProvider.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/TasksTableLabelProvider.java
@@ -23,12 +23,10 @@ package com.gluster.storage.management.gui;
import org.eclipse.swt.graphics.Image;
import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.gui.utils.GUIHelper;
import com.gluster.storage.management.gui.views.pages.TasksPage.TASK_TABLE_COLUMN_INDICES;
public class TasksTableLabelProvider extends TableLabelProviderAdapter {
- private GUIHelper guiHelper = GUIHelper.getInstance();
@Override
public Image getColumnImage(Object element, int columnIndex) {
@@ -42,6 +40,6 @@ public class TasksTableLabelProvider extends TableLabelProviderAdapter {
}
TaskInfo taskInfo = (TaskInfo) element;
- return (columnIndex == TASK_TABLE_COLUMN_INDICES.TASK.ordinal()) ? taskInfo.getDescription() : taskInfo.getStatus().getMessage();
+ return (columnIndex == TASK_TABLE_COLUMN_INDICES.TASK.ordinal()) ? taskInfo.getDescription().trim() : taskInfo.getStatus().getMessage().trim();
}
}
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 75db898d..f1eb8a94 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
@@ -25,7 +25,7 @@ public class ClearTaskAction extends AbstractActionDelegate {
new TasksClient().resumeTask(taskInfo.getName());
// TODO Update taskInfo in the model
// modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE);
- modelManager.updateTaskStatus(taskInfo, new Status(Status.STATUS_CODE_PART_SUCCESS, taskInfo.getName() + " is cleared from task list"));
+ modelManager.removeTask(taskInfo);
} catch (Exception e) {
showErrorDialog(actionDesc,
"Task [" + taskInfo.getName() + "] could not be cleared! Error: [" + e.getMessage() + "]");
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CommitTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CommitTaskAction.java
new file mode 100644
index 00000000..9655b2b3
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CommitTaskAction.java
@@ -0,0 +1,54 @@
+package com.gluster.storage.management.gui.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Display;
+
+import com.gluster.storage.management.client.GlusterDataModelManager;
+import com.gluster.storage.management.client.TasksClient;
+import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.core.model.TaskInfo;
+import com.gluster.storage.management.core.model.TaskStatus;
+
+public class CommitTaskAction extends AbstractActionDelegate {
+ private TaskInfo taskInfo;
+ private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
+
+ @Override
+ protected void performAction(final IAction action) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ final String actionDesc = action.getDescription();
+
+ try {
+ new TasksClient().commitTask(taskInfo.getName());
+ taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_SUCCESS, taskInfo.getName()
+ + " is commited")));
+ modelManager.updateTask(taskInfo);
+ } catch (Exception e) {
+ showErrorDialog(actionDesc,
+ "Task [" + taskInfo.getName() + "] could not be Stopped! Error: [" + e.getMessage() + "]");
+ }
+ }
+ });
+ }
+
+ @Override
+ public void selectionChanged(IAction action, ISelection selection) {
+ super.selectionChanged(action, selection);
+ action.setEnabled(false);
+ if (selectedEntity instanceof TaskInfo) {
+ taskInfo = (TaskInfo) selectedEntity;
+ action.setEnabled(taskInfo.canCommit()
+ && taskInfo.getStatus().getCode() == Status.STATUS_CODE_COMMIT_PENDING);
+ }
+ }
+
+ @Override
+ public void dispose() {
+
+ }
+
+}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java
index 2bb7261e..b36b7855 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java
@@ -28,6 +28,7 @@ import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.TasksClient;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.TaskInfo;
+import com.gluster.storage.management.core.model.TaskStatus;
public class PauseTaskAction extends AbstractActionDelegate {
@@ -44,9 +45,9 @@ public class PauseTaskAction extends AbstractActionDelegate {
try {
new TasksClient().pauseTask(taskInfo.getName());
- //TODO Update taskInfo in the model
- // modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE);
- modelManager.updateTaskStatus(taskInfo, new Status( Status.STATUS_CODE_PAUSE, "Paused"));
+ taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_PAUSE, taskInfo.getName()
+ + " is Paused")));
+ modelManager.updateTask(taskInfo);
} catch (Exception e) {
showErrorDialog(actionDesc,
"Task [" + taskInfo.getName() + "] could not be Paused! Error: [" + e.getMessage() + "]");
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java
index 07894c80..fc80b04d 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java
@@ -8,6 +8,7 @@ import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.TasksClient;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.TaskInfo;
+import com.gluster.storage.management.core.model.TaskStatus;
public class ResumeTaskAction extends AbstractActionDelegate {
private TaskInfo taskInfo;
@@ -23,9 +24,9 @@ public class ResumeTaskAction extends AbstractActionDelegate {
try {
new TasksClient().resumeTask(taskInfo.getName());
- // TODO Update taskInfo in the model
- // modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE);
- modelManager.updateTaskStatus(taskInfo, new Status(Status.STATUS_CODE_PAUSE, taskInfo.getName() + " is Resumed"));
+ taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, taskInfo.getName()
+ + " is Resumed")));
+ modelManager.updateTask(taskInfo);
} catch (Exception e) {
showErrorDialog(actionDesc,
"Task [" + taskInfo.getName() + "] could not be Resumed! Error: [" + e.getMessage() + "]");
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java
index 144e94be..abde4e57 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java
@@ -8,6 +8,7 @@ import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.TasksClient;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.TaskInfo;
+import com.gluster.storage.management.core.model.TaskStatus;
public class StopTaskAction extends AbstractActionDelegate {
private TaskInfo taskInfo;
@@ -23,9 +24,8 @@ public class StopTaskAction extends AbstractActionDelegate {
try {
new TasksClient().resumeTask(taskInfo.getName());
- // TODO Update taskInfo in the model
- // modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE);
- modelManager.updateTaskStatus(taskInfo, new Status(Status.STATUS_CODE_PART_SUCCESS, taskInfo.getName() + " is Stopped"));
+ taskInfo.setStatus( new TaskStatus( new Status(Status.STATUS_CODE_SUCCESS, taskInfo.getName() + " is Stopped")));
+ modelManager.updateTask(taskInfo);
} catch (Exception e) {
showErrorDialog(actionDesc,
"Task [" + taskInfo.getName() + "] could not be Stopped! Error: [" + e.getMessage() + "]");
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java
index 03c4f7ac..ce68e22f 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java
@@ -45,6 +45,7 @@ public class TasksPage extends AbstractTableViewerPage<TaskInfo> {
private static final String[] TASK_TABLE_COLUMN_NAMES = new String[] { "Task", "Status"};
+ @SuppressWarnings("unchecked")
public TasksPage(IWorkbenchSite site, Composite parent, int style, Object taskInfo) {
super(site, parent, style, false, false, taskInfo);
this.taskInfoList = (List<TaskInfo>) taskInfo;
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 834033d0..53122f11 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
@@ -126,12 +126,10 @@ public class TasksResource extends AbstractResource {
task.pause();
} else if (taskOperation.equals(RESTConstants.TASK_STOP)) {
task.stop();
- } else if(taskOperation.equals(RESTConstants.TASK_COMMIT)) {
+ } else if (taskOperation.equals(RESTConstants.TASK_COMMIT)) {
task.commit();
}
- // updateTask(taskId, taskOperation);
- return (Response) acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/"
- + RESOURCE_TASKS + "/" + taskId);
+ return (Response) noContentResponse();
} 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 107d4fb2..3e89b8ca 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
@@ -950,7 +950,7 @@ public class VolumesResource extends AbstractResource {
migrateDiskTask.setAutoCommit(autoCommit);
migrateDiskTask.start();
taskResource.addTask(migrateDiskTask);
- return migrateDiskTask.getId();
+ return migrateDiskTask.getTaskInfo().getName(); // Return Task ID
}
private String rebalanceStart(String clusterName, String volumeName, Boolean isFixLayout, Boolean isMigrateData,
@@ -1005,6 +1005,10 @@ public class VolumesResource extends AbstractResource {
// System.out.println("Code : " + status.getCode());
// System.out.println("Message " + status.getMessage());
- vr.removeBricks("testCluster", "test", "192.168.1.210:sdb", true);
+ // vr.removeBricks("testCluster", "test", "192.168.1.210:sdb", true);
+
+ String taskId = vr.migrateBrickStart("myGluster", "students", "devserver1:/export/sdc/students",
+ "devserver2:/export/sdb/students", true);
+
}
}
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 9a31d468..9bdc9c94 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
@@ -22,7 +22,6 @@ 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.TaskInfo;
import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE;
@@ -30,6 +29,7 @@ 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;
+import com.sun.jersey.core.util.Base64;
public class MigrateDiskTask extends Task {
@@ -68,6 +68,7 @@ public class MigrateDiskTask extends Task {
+ volumeName + "] from [" + fromBrick + "] to [" + toBrick + "]", true, true, true);
setFromBrick(fromBrick);
setToBrick(toBrick);
+ taskInfo.setName(getId());
}
public MigrateDiskTask(ClusterService clusterService, String clusterName, TaskInfo info) {
@@ -76,7 +77,7 @@ public class MigrateDiskTask extends Task {
@Override
public String getId() {
- return taskInfo.getType() + "-" + taskInfo.getReference() + "-" + fromBrick + "-" + toBrick;
+ return new String( Base64.encode( taskInfo.getType() + "-" + taskInfo.getReference() + "-" + fromBrick + "-" + toBrick ));
}
@Override
@@ -93,13 +94,9 @@ public class MigrateDiskTask extends Task {
String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " "
+ getToBrick() + " start";
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$")) {
- getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput().trim())));
return;
}
}
@@ -125,16 +122,16 @@ public class MigrateDiskTask extends Task {
ProcessResult processResult = sshUtil.executeRemote(onlineServer, command);
TaskStatus taskStatus = new TaskStatus();
if (processResult.isSuccess()) {
- if (processResult.getOutput().matches("*pause")) {
+ if (processResult.getOutput().matches("*pause")) { //TODO replace correct pattern to identify the pause status
taskStatus.setCode(Status.STATUS_CODE_PAUSE);
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
+ taskStatus.setMessage(processResult.getOutput());
+ getTaskInfo().setStatus(taskStatus);
+ return;
}
- } 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());
}
@@ -145,7 +142,12 @@ public class MigrateDiskTask extends Task {
@Override
public void commit() {
- // TODO Auto-generated method stub
+ try {
+ commitMigration(getOnlineServer().getName());
+ } catch(ConnectionException e) {
+ // online server might have gone offline. try with a new one.
+ commitMigration(getNewOnlineServer().getName());
+ }
}
@Override
@@ -167,14 +169,14 @@ public class MigrateDiskTask extends Task {
if (processResult.isSuccess()) {
if (processResult.getOutput().trim().matches(".*aborted successfully$")) {
taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- }
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- }
- taskStatus.setMessage(processResult.getOutput()); // Common
- getTaskInfo().setStatus(taskStatus);
+ taskStatus.setMessage(processResult.getOutput());
+ getTaskInfo().setStatus(taskStatus);
+ return;
+ }
+ }
+
+ // if we reach here, it means rebalance start failed.
+ throw new GlusterRuntimeException(processResult.toString());
}
@@ -187,6 +189,27 @@ public class MigrateDiskTask extends Task {
return checkMigrationStatus(getNewOnlineServer().getName());
}
}
+
+
+ public void commitMigration(String serverName) {
+ String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " "
+ + getToBrick() + " commit";
+
+ ProcessResult processResult = sshUtil.executeRemote(serverName, command);
+ TaskStatus taskStatus = new TaskStatus();
+ if (processResult.isSuccess()) {
+ if (processResult.getOutput().trim().matches(".*commit successful$")) {
+ taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
+ taskStatus.setMessage(processResult.getOutput()); // Common
+ getTaskInfo().setStatus(taskStatus);
+ return;
+ }
+ }
+
+ // if we reach here, it means rebalance start failed.
+ throw new GlusterRuntimeException(processResult.toString());
+ }
+
private TaskStatus checkMigrationStatus(String serverName) {
String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " "
@@ -195,7 +218,10 @@ public class MigrateDiskTask extends Task {
TaskStatus taskStatus = new TaskStatus();
if (processResult.isSuccess()) {
if (processResult.getOutput().trim().matches("^Number of files migrated.*Migration complete$")) {
- taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
+ taskStatus.setCode(Status.STATUS_CODE_COMMIT_PENDING);
+ if (autoCommit) {
+ commitMigration(serverName);
+ }
} else if ( processResult.getOutput().trim().matches("^Number of files migrated.*Current file=.*")) {
taskStatus.setCode(Status.STATUS_CODE_RUNNING);
} else {
@@ -204,7 +230,9 @@ public class MigrateDiskTask extends Task {
} else {
taskStatus.setCode(Status.STATUS_CODE_FAILURE);
}
- taskStatus.setMessage(processResult.getOutput()); // Common
+
+ taskStatus.setMessage(processResult.getOutput()); // common
+ taskInfo.setStatus(taskStatus); // Update the task status
return taskStatus;
}
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java
index cdc56400..49cd0b8b 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java
@@ -20,11 +20,10 @@
*/
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.core.model.TaskStatus;
import com.gluster.storage.management.server.services.ClusterService;
public abstract class Task {
@@ -39,10 +38,12 @@ public abstract class Task {
taskInfo.setType(type);
taskInfo.setReference(reference);
taskInfo.setDescription(desc);
+ taskInfo.setCanPause(canPause);
+ taskInfo.setCanStop(canStop);
+ taskInfo.setCanCommit(canCommit);
- // IMPORTANT. This call must be in the end since getId may need to use the values set in above statements
- taskInfo.setName(getId());
init(clusterService, clusterName, taskInfo);
+
}
public Task(ClusterService clusterService, String clusterName, TaskInfo taskInfo) {