diff options
| author | Selvasundaram <selvam@gluster.com> | 2011-06-16 18:48:19 +0530 |
|---|---|---|
| committer | Selvasundaram <selvam@gluster.com> | 2011-06-16 18:48:19 +0530 |
| commit | dfde7c0331af85646f4f49bcc394caa1c5bf5e61 (patch) | |
| tree | c0db369de842f5dde235611a6c75aade2832afdd /src/com.gluster.storage.management.server | |
| parent | 2fff45c027063d1fe9a5151c19744728c320a36d (diff) | |
| parent | 4c584cb025311cdb7b4b3fd1cbd0d0247e32fa4a (diff) | |
Merge branch 'tasks'
Diffstat (limited to 'src/com.gluster.storage.management.server')
3 files changed, 131 insertions, 28 deletions
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; + } } |
