summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSelvasundaram <selvam@gluster.com>2011-06-16 18:47:23 +0530
committerSelvasundaram <selvam@gluster.com>2011-06-16 18:47:23 +0530
commit4c584cb025311cdb7b4b3fd1cbd0d0247e32fa4a (patch)
treed66b159c72cfdb537231aa9122f8fb61ad0cebb6
parent01054c6684a626d77a1f78ebe0cf3fb7d29584d2 (diff)
Tasks and MigrateDiskTask resources
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java1
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java43
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TaskResource.java20
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java42
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java97
5 files changed, 162 insertions, 41 deletions
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
index 745e460b..40f13fbe 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
@@ -54,6 +54,7 @@ public class RESTConstants {
public static final String FORM_PARAM_SOURCE = "source";
public static final String FORM_PARAM_TARGET = "target";
public static final String FORM_PARAM_BRICKS = "bricks";
+ public static final String FROM_PARAM_AUTO_COMMIT = "autoCommit";
public static final String PATH_PARAM_VOLUME_NAME = "volumeName";
public static final String PATH_PARAM_CLUSTER_NAME = "clusterName";
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java
index 9268d060..5143c2dd 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java
@@ -27,17 +27,20 @@ public abstract class Task {
public String[] TASK_TYPE_STR = { "Format Disk", "Migrate Brick", "Volume Rebalance" };
- private TaskInfo info;
+ private TaskInfo taskInfo;
- public Task(TASK_TYPE type, String reference, String description) {
- info = new TaskInfo();
- info.setId(getTaskType(type) + "-" + reference); // construct id
- info.setType(type);
- info.setReference(reference);
- info.setDescription(description);
+ protected String serverName;
+
+ public Task(TASK_TYPE type, String reference) {
+ taskInfo = new TaskInfo();
+ taskInfo.setId(getTaskType(type) + "-" + reference); // construct id
+ taskInfo.setType(type);
+ taskInfo.setReference(reference);
+ // info.setDescription("Migrating brick on volume [" + volu);
}
- public Task(TaskInfo info) {
- setInfo(info);
+
+ public Task(TaskInfo taskInfo) {
+ setTaskInfo(taskInfo);
}
public String getTaskType(TASK_TYPE type) {
@@ -46,21 +49,35 @@ public abstract class Task {
public abstract String getId();
+ public abstract TaskInfo start();
+
public abstract TaskInfo resume();
public abstract TaskInfo stop();
public abstract TaskInfo pause();
+
+ public abstract TaskInfo status();
public abstract TASK_TYPE getType();
public abstract TaskInfo getTaskInfo();
- public TaskInfo getInfo() {
- return info;
+ public abstract void setTaskDescription();
+
+ public String getOnlineServer() {
+ return serverName;
+ }
+
+ public void setOnlineServer(String serverName) {
+ this.serverName = serverName;
+ }
+
+ protected TaskInfo getInfo() {
+ return taskInfo;
}
- public void setInfo(TaskInfo info) {
- this.info = info; // TODO: review assigning reference and copy object
+ public void setTaskInfo(TaskInfo info) {
+ this.taskInfo = info; // TODO: review assigning reference and copy object
}
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TaskResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TaskResource.java
index eeac6843..462733de 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TaskResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TaskResource.java
@@ -56,12 +56,20 @@ public class TaskResource {
public TaskResource() {
}
- public void addTask(Task task) {
+ public void setTasksMap(Map<String, Task> tasksMap) {
+ this.tasksMap = tasksMap;
+ }
+
+ public Map<String, Task> getTasksMap() {
+ return tasksMap;
+ }
+
+ public void addTask(Task task) { // task should be one of MuigrateDiskTask, FormatDiskTask, etc
getTasksMap().put(task.getId(), task);
}
public void removeTask(Task task) {
- getTasksMap().remove(task);
+ getTasksMap().remove(task.getId());
}
public List<Task> getAllTasks() {
@@ -143,12 +151,4 @@ public class TaskResource {
return null;
}
- public void setTasksMap(Map<String, Task> tasksMap) {
- this.tasksMap = tasksMap;
- }
-
- public Map<String, Task> getTasksMap() {
- return tasksMap;
- }
-
}
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 aa23fe3c..f7d166f5 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
@@ -26,6 +26,7 @@ import static com.gluster.storage.management.core.constants.RESTConstants.FORM_P
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_TARGET;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_START;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_STOP;
+import static com.gluster.storage.management.core.constants.RESTConstants.FROM_PARAM_AUTO_COMMIT;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_VOLUME_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_BRICKS;
@@ -37,8 +38,8 @@ import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_LOG_SEVERITY;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_TO_TIMESTAMP;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_VOLUME_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_DEFAULT_OPTIONS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_BRICKS;
+import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_DEFAULT_OPTIONS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_DOWNLOAD;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_LOGS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_OPTIONS;
@@ -76,10 +77,13 @@ import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Brick;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.core.model.Task.TASK_TYPE;
+import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.model.VolumeLogMessage;
import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.LogMessageListResponse;
+import com.gluster.storage.management.core.response.TaskResponse;
import com.gluster.storage.management.core.response.VolumeListResponse;
import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse;
import com.gluster.storage.management.core.utils.DateUtil;
@@ -89,6 +93,7 @@ import com.gluster.storage.management.core.utils.ProcessUtil;
import com.gluster.storage.management.server.constants.VolumeOptionsDefaults;
import com.gluster.storage.management.server.data.ClusterInfo;
import com.gluster.storage.management.server.services.ClusterService;
+import com.gluster.storage.management.server.tasks.MigrateDiskTask;
import com.gluster.storage.management.server.utils.GlusterUtil;
import com.gluster.storage.management.server.utils.ServerUtil;
import com.sun.jersey.api.core.InjectParam;
@@ -626,7 +631,8 @@ public class VolumesResource {
}
try {
- return glusterUtil.migrateDisk(volumeName, diskFrom, diskTo, operation, onlineServer.getName());
+
+ return glusterUtil.migrateDisk(volumeName, diskFrom, diskTo, "start", onlineServer.getName());
} catch (ConnectionException e) {
// online server has gone offline! try with a different one.
onlineServer = glusterServersResource.getNewOnlineServer(clusterName);
@@ -637,6 +643,38 @@ public class VolumesResource {
return glusterUtil.migrateDisk(volumeName, diskFrom, diskTo, operation, onlineServer.getName());
}
}
+
+ @PUT
+ @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_BRICKS)
+ public TaskResponse migrateBrick(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
+ @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, @FormParam(FORM_PARAM_SOURCE) String diskFrom,
+ @FormParam(FORM_PARAM_TARGET) String diskTo, @FormParam(FROM_PARAM_AUTO_COMMIT) Boolean autoCommit) {
+
+ TaskResponse taskResponse = new TaskResponse();
+ GlusterServer onlineServer = glusterServersResource.getOnlineServer(clusterName);
+ if (onlineServer == null) {
+ taskResponse.setData(null);
+ taskResponse.setStatus(new Status(Status.STATUS_CODE_FAILURE, "No online servers found in cluster ["
+ + clusterName + "]"));
+ return taskResponse;
+ }
+
+ try {
+ MigrateDiskTask migrateDiskTask = new MigrateDiskTask(TASK_TYPE.BRICK_MIGRATE, volumeName, diskFrom, diskTo);
+ migrateDiskTask.setAutoCommit(autoCommit);
+ TaskInfo taskInfo = migrateDiskTask.start();
+ if (taskInfo.isSuccess()) {
+ TaskResource taskResource = new TaskResource();
+ taskResource.addTask(migrateDiskTask);
+ }
+ taskResponse.setData(taskInfo);
+ taskResponse.setStatus(new Status(Status.STATUS_CODE_SUCCESS, ""));
+ return taskResponse;
+ } catch (ConnectionException e) {
+ //TODO online server has gone offline! try with a different one.
+ }
+ return null;
+ }
public static void main(String[] args) throws ClassNotFoundException {
VolumesResource vr = new VolumesResource();
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 5d48d53f..68a4e1b4 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
@@ -20,53 +20,118 @@
*/
package com.gluster.storage.management.server.tasks;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Task;
import com.gluster.storage.management.core.model.TaskInfo;
+import com.gluster.storage.management.core.model.TaskStatus;
+import com.gluster.storage.management.server.utils.SshUtil;
public class MigrateDiskTask extends Task {
- public MigrateDiskTask(TASK_TYPE type, String reference, String description ) {
- super(type, reference, description );
+ private String fromBrick;
+ private String toBrick;
+ private Boolean autoCommit;
+
+ @Autowired
+ private SshUtil sshUtil;
+
+ public String getFromBrick() {
+ return fromBrick;
}
-
+
+ public void setFromBrick(String fromBrick) {
+ this.fromBrick = fromBrick;
+ }
+
+ public String getToBrick() {
+ return toBrick;
+ }
+
+ public void setToBrick(String toBrick) {
+ this.toBrick = toBrick;
+ }
+
+ public Boolean getAutoCommit() {
+ return autoCommit;
+ }
+
+ public void setAutoCommit(Boolean autoCommit) {
+ this.autoCommit = autoCommit;
+ }
+
+ public MigrateDiskTask(TASK_TYPE type, String volumeName, String fromBrick, String toBrick) {
+ super(type, volumeName);
+ setFromBrick(fromBrick);
+ setToBrick(toBrick);
+ setTaskDescription();
+ getInfo().setCanPause(true);
+ getInfo().setCanStop(true);
+ }
+
public MigrateDiskTask(TaskInfo info) {
super(info);
+ setTaskDescription();
}
-
+
@Override
public String getId() {
return getInfo().getId();
}
-
+
+ @Override
+ public TaskInfo start() {
+ getInfo().setStatus(
+ new TaskStatus(new Status(sshUtil.executeRemote(getOnlineServer(), "gluster volume replace-brick "
+ + getInfo().getReference() + " " + getFromBrick() + " " + getToBrick() + " start" ) )));
+ return getInfo();
+ }
+
@Override
public TaskInfo resume() {
- // To make a decision is the task has the ability to start the task
- return null;
+ return start();
}
-
@Override
public TaskInfo stop() {
- // To make a decision is the task has the ability to stop the task
- return null;
+ getInfo().setStatus(
+ new TaskStatus(new Status(sshUtil.executeRemote(getOnlineServer(), "gluster volume replace-brick "
+ + getInfo().getReference() + " " + getFromBrick() + " " + getToBrick() + " abort" ) )));
+ return getInfo();
}
-
@Override
public TaskInfo pause() {
- // To make a decision is the task has the ability to pause the task
- return null;
+ getInfo().setStatus(
+ new TaskStatus(new Status(sshUtil.executeRemote(getOnlineServer(), "gluster volume replace-brick "
+ + getInfo().getReference() + " " + getFromBrick() + " " + getToBrick() + " pause" ) )));
+ return getInfo();
+
}
-
@Override
public TASK_TYPE getType() {
-
- return null;
+ return getTaskInfo().getType();
}
@Override
public TaskInfo getTaskInfo() {
return getInfo();
}
+
+ @Override
+ public void setTaskDescription() {
+ TaskInfo taskInfo = getTaskInfo();
+ getTaskInfo().setDescription(
+ getTaskType(getType()) + " on volume [" + taskInfo.getReference() + "] from [" + getFromBrick()
+ + "] to [" + getToBrick() + "]");
+ }
+
+
+ @Override
+ public TaskInfo status() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}