diff options
| author | Selvasundaram <selvam@gluster.com> | 2011-07-04 19:20:26 +0530 |
|---|---|---|
| committer | Selvasundaram <selvam@gluster.com> | 2011-07-04 19:20:26 +0530 |
| commit | c2d7de50f8e54c85e53dc8803a8100d6711d1bb1 (patch) | |
| tree | a9a9bf318c02d6b1bc4152b7f63a3e54f91f456c /src/com.gluster.storage.management.server | |
| parent | f9ddc60ee998d24ff1f2b5f158a2b0e14f965b0d (diff) | |
| parent | 45ca89a241e826d80802d9e3e93d28f8cd026316 (diff) | |
Merge branch 'tasks'
Conflicts:
src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddBrickAction.java
src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CommitTaskAction.java
src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateBrickTask.java
src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
Diffstat (limited to 'src/com.gluster.storage.management.server')
| -rw-r--r-- | src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java | 4 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateBrickTask.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java) | 123 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java | 32 |
3 files changed, 61 insertions, 98 deletions
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 4318945c..6260142a 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 @@ -102,7 +102,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.tasks.MigrateBrickTask; import com.gluster.storage.management.server.tasks.RebalanceVolumeTask; import com.gluster.storage.management.server.utils.GlusterUtil; import com.gluster.storage.management.server.utils.ServerUtil; @@ -956,7 +956,7 @@ public class VolumesResource extends AbstractResource { private String migrateBrickStart(String clusterName, String volumeName, String fromBrick, String toBrick, Boolean autoCommit) { - MigrateDiskTask migrateDiskTask = new MigrateDiskTask(clusterService, clusterName, volumeName, fromBrick, + MigrateBrickTask migrateDiskTask = new MigrateBrickTask(clusterService, clusterName, volumeName, fromBrick, toBrick); migrateDiskTask.setAutoCommit(autoCommit); migrateDiskTask.start(); 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/MigrateBrickTask.java index 88de96da..3961c427 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/MigrateBrickTask.java @@ -20,6 +20,10 @@ */ package com.gluster.storage.management.server.tasks; +import java.util.concurrent.ExecutionException; + +import org.apache.derby.iapi.sql.execute.ExecPreparedStatement; + import com.gluster.storage.management.core.exceptions.ConnectionException; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Status; @@ -28,14 +32,16 @@ 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; import com.gluster.storage.management.server.services.ClusterService; +import com.gluster.storage.management.server.utils.GlusterUtil; import com.gluster.storage.management.server.utils.SshUtil; import com.sun.jersey.core.util.Base64; -public class MigrateDiskTask extends Task { +public class MigrateBrickTask extends Task { private String fromBrick; private String toBrick; private Boolean autoCommit; + private GlusterUtil glusterUtil = new GlusterUtil(); private SshUtil sshUtil = new SshUtil(); @@ -63,7 +69,8 @@ public class MigrateDiskTask extends Task { this.autoCommit = autoCommit; } - public MigrateDiskTask(ClusterService clusterService, String clusterName, String volumeName, String fromBrick, String toBrick) { + public MigrateBrickTask(ClusterService clusterService, String clusterName, String volumeName, String fromBrick, + String toBrick) { super(clusterService, clusterName, TASK_TYPE.BRICK_MIGRATE, volumeName, "Brick Migration on volume [" + volumeName + "] from [" + fromBrick + "] to [" + toBrick + "]", true, true, true); setFromBrick(fromBrick); @@ -71,80 +78,68 @@ public class MigrateDiskTask extends Task { taskInfo.setName(getId()); } - public MigrateDiskTask(ClusterService clusterService, String clusterName, TaskInfo info) { + public MigrateBrickTask(ClusterService clusterService, String clusterName, TaskInfo info) { super(clusterService, clusterName, info); } @Override public String getId() { - return new String( Base64.encode( taskInfo.getType() + "-" + taskInfo.getReference() + "-" + fromBrick + "-" + toBrick )); + return new String(Base64.encode(clusterName + "-" + taskInfo.getType() + "-" + taskInfo.getReference() + "-" + fromBrick + "-" + + toBrick)); } @Override public void start() { try { startMigration(getOnlineServer().getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server might have gone offline. try with a new one. startMigration(getNewOnlineServer().getName()); } } private void startMigration(String onlineServerName) { - String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " " - + getToBrick() + " start"; - ProcessResult processResult = sshUtil.executeRemote(onlineServerName, command); - if (processResult.isSuccess()) { - if (processResult.getOutput().trim().matches(".*started successfully$")) { - getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput().trim()))); - return; - } + ProcessResult processResult = glusterUtil.executeBrickMigration(onlineServerName, getTaskInfo().getReference(), + getFromBrick(), getToBrick(), "start"); + if (processResult.getOutput().trim().matches(".*started successfully$")) { + getTaskInfo().setStatus( + new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput().trim()))); + return; } - - // if we come here, it means task couldn't be started successfully. - throw new GlusterRuntimeException(processResult.toString()); } @Override public void pause() { try { pauseMigration(getOnlineServer().getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server might have gone offline. try with a new one. pauseMigration(getNewOnlineServer().getName()); } } private void pauseMigration(String onlineServer) { - String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " " + getToBrick() - + " pause"; - - ProcessResult processResult = sshUtil.executeRemote(onlineServer, command); + ProcessResult processResult = glusterUtil.executeBrickMigration(onlineServer, taskInfo.getReference(), + getFromBrick(), getToBrick(), "pause"); TaskStatus taskStatus = new TaskStatus(); - if (processResult.isSuccess()) { - if (processResult.getOutput().trim().matches(".*paused successfully$")) { //TODO replace correct pattern to identify the pause status - taskStatus.setCode(Status.STATUS_CODE_PAUSE); - taskStatus.setMessage(processResult.getOutput()); - getTaskInfo().setStatus(taskStatus); - return; - } - } - - // if we reach here, it means rebalance start failed. - throw new GlusterRuntimeException(processResult.toString()); + if (processResult.getOutput().trim().matches(".*paused successfully$")) { + taskStatus.setCode(Status.STATUS_CODE_PAUSE); + taskStatus.setMessage(processResult.getOutput()); + getTaskInfo().setStatus(taskStatus); + return; + } } - - + @Override public void resume() { start(); } - + @Override public void commit() { try { commitMigration(getOnlineServer().getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server might have gone offline. try with a new one. commitMigration(getNewOnlineServer().getName()); } @@ -154,75 +149,55 @@ public class MigrateDiskTask extends Task { public void stop() { try { stopMigration(getOnlineServer().getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server might have gone offline. try with a new one. stopMigration(getNewOnlineServer().getName()); } } private void stopMigration(String serverName) { - String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " " + getToBrick() - + " abort"; - - ProcessResult processResult = sshUtil.executeRemote(serverName, command); + ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, taskInfo.getReference(), getFromBrick(), + getToBrick(), "abort"); TaskStatus taskStatus = new TaskStatus(); - if (processResult.isSuccess()) { - if (processResult.getOutput().trim().matches(".*aborted successfully$")) { - taskStatus.setCode(Status.STATUS_CODE_SUCCESS); - taskStatus.setMessage(processResult.getOutput()); - getTaskInfo().setStatus(taskStatus); - return; - } + if (processResult.getOutput().trim().matches(".*aborted successfully$")) { + taskStatus.setCode(Status.STATUS_CODE_SUCCESS); + taskStatus.setMessage(processResult.getOutput()); + getTaskInfo().setStatus(taskStatus); } - - // if we reach here, it means rebalance start failed. - throw new GlusterRuntimeException(processResult.toString()); } - @Override public TaskStatus checkStatus() { try { return checkMigrationStatus(getOnlineServer().getName()); - } catch(ConnectionException e) { + } catch (ConnectionException e) { // online server might have gone offline. try with a new one. 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); + ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, getTaskInfo().getReference(), + getFromBrick(), getToBrick(), "commit"); 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) { - // TODO: If the task is already paused return the same status till FS gives correct status - if (getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_PAUSE ) { + if (getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_PAUSE) { return getTaskInfo().getStatus(); } - - String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " " - + getToBrick() + " status"; - ProcessResult processResult = sshUtil.executeRemote(serverName, command); TaskStatus taskStatus = new TaskStatus(); - if (processResult.isSuccess()) { + try { + ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, getTaskInfo().getReference(), + getFromBrick(), getToBrick(), "status"); if (processResult.getOutput().trim().matches("^Number of files migrated.*Migration complete$")) { taskStatus.setCode(Status.STATUS_CODE_COMMIT_PENDING); if (autoCommit) { @@ -232,16 +207,16 @@ public class MigrateDiskTask extends Task { taskStatus.setMessage(processResult.getOutput().trim() .replaceAll("Migration complete", "Commit pending")); } - return taskStatus; } else if (processResult.getOutput().trim().matches("^Number of files migrated.*Current file=.*")) { taskStatus.setCode(Status.STATUS_CODE_RUNNING); } else { taskStatus.setCode(Status.STATUS_CODE_FAILURE); } - } else { + taskStatus.setMessage(processResult.getOutput()); + } catch (Exception e) { taskStatus.setCode(Status.STATUS_CODE_FAILURE); + taskStatus.setMessage(e.getMessage()); } - 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/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java index 1dc5eb1a..f4eac91d 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 @@ -36,7 +36,6 @@ import com.gluster.storage.management.core.model.Brick.BRICK_STATUS; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; import com.gluster.storage.management.core.model.Status; -import com.gluster.storage.management.core.model.TaskInfo; import com.gluster.storage.management.core.model.TaskStatus; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE; @@ -46,8 +45,6 @@ import com.gluster.storage.management.core.utils.GlusterCoreUtil; import com.gluster.storage.management.core.utils.ProcessResult; import com.gluster.storage.management.core.utils.StringUtil; import com.gluster.storage.management.server.resources.TasksResource; -import com.gluster.storage.management.server.tasks.MigrateDiskTask; -import com.gluster.storage.management.server.tasks.RebalanceVolumeTask; import com.sun.jersey.api.core.InjectParam; @Component @@ -391,26 +388,7 @@ public class GlusterUtil { } private void addBrickToVolume(Volume volume, String serverName, String brickDir) { - // TODO: Brick status should be same as the server status (online/offline) - System.out.println(brickDir); volume.addBrick(new Brick(serverName, BRICK_STATUS.ONLINE, brickDir.split("/")[2].trim(), brickDir)); - - // volume.getBricks().get(0).getName(); - // - // try { - // volume.addDisk(serverName + ":" + brickDir.split("/")[2].trim()); - // } catch (ArrayIndexOutOfBoundsException e) { - // // brick directory of a different form, most probably created manually - // // connect to the server and get disk for the brick directory - // Status status = new ServerUtil().getDiskForDir(serverName, brickDir); - // if (status.isSuccess()) { - // volume.addDisk(serverName + ":" + status.getMessage()); - // } else { - // // Couldn't fetch disk for the brick directory. Log error and add "unknown" as disk name. - // System.out.println("Couldn't fetch disk name for brick [" + serverName + ":" + brickDir + "]"); - // volume.addDisk(serverName + ":unknown"); - // } - // } } private boolean readBrickGroup(String line) { @@ -601,6 +579,16 @@ public class GlusterUtil { taskStatus.setMessage(processResult.getOutput()); return taskStatus; } + + public ProcessResult executeBrickMigration(String onlineServerName, String volumeName, String fromBrick, + String toBrick, String operation) { + String command = "gluster volume replace-brick " + volumeName + " " + fromBrick + " " + toBrick + " " + operation; + ProcessResult processResult = sshUtil.executeRemote(onlineServerName, command); + if (!processResult.isSuccess()) { + throw new GlusterRuntimeException(processResult.toString()); + } + return processResult; + } public static void main(String args[]) { // List<String> names = new GlusterUtil().getGlusterServerNames(); |
