summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server
diff options
context:
space:
mode:
authorSelvasundaram <selvam@gluster.com>2011-07-04 19:20:26 +0530
committerSelvasundaram <selvam@gluster.com>2011-07-04 19:20:26 +0530
commitc2d7de50f8e54c85e53dc8803a8100d6711d1bb1 (patch)
treea9a9bf318c02d6b1bc4152b7f63a3e54f91f456c /src/com.gluster.storage.management.server
parentf9ddc60ee998d24ff1f2b5f158a2b0e14f965b0d (diff)
parent45ca89a241e826d80802d9e3e93d28f8cd026316 (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.java4
-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.java32
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();