diff options
Diffstat (limited to 'src')
14 files changed, 113 insertions, 150 deletions
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 56b52659..4f6c317c 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 @@ -95,12 +95,8 @@ public class Cluster extends Entity { } public void updateVolume(String volumeName, List<Brick> bricks) { - for (Volume volume : volumes) { - if (volume.getName().equals(volumeName)) { - volume.setBricks(bricks); - return; - } - } + Volume volume = getVolume(volumeName); + volume.setBricks(bricks); } public Cluster(String name, Entity parent) { @@ -165,4 +161,13 @@ public class Cluster extends Entity { } return null; } -}
\ No newline at end of file + + public Volume getVolume(String volumeName) { + for (Volume volume : getVolumes() ) { + if (volume.getName().equals(volumeName)) { + return volume; + } + } + return null; + } +} diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskInfoListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskInfoListResponse.java index 0ab27c35..ba1c4f9f 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskInfoListResponse.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskInfoListResponse.java @@ -20,6 +20,7 @@ */ package com.gluster.storage.management.core.response; +import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlElement; @@ -29,7 +30,7 @@ import com.gluster.storage.management.core.model.TaskInfo; @XmlRootElement(name = "tasks") public class TaskInfoListResponse { - private List<TaskInfo> taskInfoList; + private List<TaskInfo> taskInfoList = new ArrayList<TaskInfo>(); public TaskInfoListResponse() { diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml index 5b18421f..b0dfa9a9 100644 --- a/src/com.gluster.storage.management.gui/plugin.xml +++ b/src/com.gluster.storage.management.gui/plugin.xml @@ -476,7 +476,7 @@ visible="false"> <action allowLabelUpdate="false" - class="com.gluster.storage.management.gui.actions.MigrateDiskAction" + class="com.gluster.storage.management.gui.actions.MigrateBrickAction" definitionId="com.gluster.storage.management.gui.commands.MigrateDisk" icon="icons/disk-migrate.png" id="com.gluster.storage.management.gui.actions.MigrateDiskAction" @@ -593,7 +593,7 @@ </action> <action allowLabelUpdate="false" - class="com.gluster.storage.management.gui.actions.RemoveDiskAction" + class="com.gluster.storage.management.gui.actions.RemoveBrickAction" definitionId="com.gluster.storage.management.gui.commands.RemoveDisk" icon="icons/disk.png" id="com.gluster.storage.management.gui.actions.RemoveDiskAction" @@ -609,7 +609,7 @@ </action> <action allowLabelUpdate="false" - class="com.gluster.storage.management.gui.actions.AddDiskAction" + class="com.gluster.storage.management.gui.actions.AddBrickAction" definitionId="com.gluster.storage.management.gui.commands.AddDisk" icon="icons/disk.png" id="com.gluster.storage.management.gui.actions.AddDiskAction" @@ -659,7 +659,7 @@ definitionId="com.gluster.storage.management.gui.commands.Commit" icon="icons/stop.png" id="com.gluster.storage.management.gui.actions.Commit" - label="&Commit TaskTask" + label="&Commit Task" menubarPath="com.gluster.storage.management.gui.menu.cluster/cluster" mode="FORCE_TEXT" pulldown="false" @@ -1206,7 +1206,7 @@ objectClass="com.gluster.storage.management.core.model.Volume"> <action allowLabelUpdate="false" - class="com.gluster.storage.management.gui.actions.MigrateDiskAction" + class="com.gluster.storage.management.gui.actions.MigrateBrickAction" definitionId="com.gluster.storage.management.gui.commands.MigrateDisk" enablesFor="1" icon="icons/disk-migrate.png" diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddDiskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddBrickAction.java index be2cacee..e86164ec 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddDiskAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddBrickAction.java @@ -1,5 +1,5 @@ /** - * AddDiskAction.java + * AddBrickAction.java * * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com> * This file is part of Gluster Management Console. @@ -27,9 +27,9 @@ import org.eclipse.jface.wizard.WizardDialog; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.gui.dialogs.AddDiskWizard; +import com.gluster.storage.management.gui.dialogs.AddBrickWizard; -public class AddDiskAction extends AbstractActionDelegate { +public class AddBrickAction extends AbstractActionDelegate { private Volume volume; private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); @@ -43,7 +43,7 @@ public class AddDiskAction extends AbstractActionDelegate { // TODO: open a dialog box // MessageDialog.openInformation(getShell(), "Action captured", action.getDescription() + "\n" + // volume.getName()); - AddDiskWizard wizard = new AddDiskWizard(volume); // Also add single page + AddBrickWizard wizard = new AddBrickWizard(volume); // Also add single page WizardDialog dialog = new WizardDialog(getShell(), wizard); dialog.create(); 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 index d353898c..86e3032e 100644 --- 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 @@ -22,9 +22,10 @@ public class CommitTaskAction extends AbstractActionDelegate { new TasksClient().commitTask(taskInfo.getName()); taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_SUCCESS, "Committed"))); modelManager.removeTask(taskInfo); - Volume volume = (new VolumesClient()).getVolume( taskInfo.getReference()); - modelManager.updateVolumeBricks(getVolume(taskInfo.getReference()), volume.getBricks()); - + Volume volume = (new VolumesClient()).getVolume(taskInfo.getReference()); + modelManager.updateVolumeBricks(modelManager.getModel().getCluster().getVolume(taskInfo.getReference()), + volume.getBricks()); + showInfoDialog(actionDesc, "Commit successful"); } catch (Exception e) { showErrorDialog(actionDesc, @@ -47,14 +48,4 @@ public class CommitTaskAction extends AbstractActionDelegate { public void dispose() { } - - private Volume getVolume(String volumeName) { - for (Volume volume : modelManager.getModel().getCluster().getVolumes() ) { - if (volume.getName().equals(volumeName)) { - return volume; - } - } - return null; - } - } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/MigrateDiskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/MigrateBrickAction.java index 2512a188..41770d98 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/MigrateDiskAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/MigrateBrickAction.java @@ -26,16 +26,16 @@ import org.eclipse.jface.wizard.WizardDialog; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.gui.dialogs.MigrateDiskWizard; +import com.gluster.storage.management.gui.dialogs.MigrateBrickWizard; import com.gluster.storage.management.gui.utils.GUIHelper; -public class MigrateDiskAction extends AbstractActionDelegate { +public class MigrateBrickAction extends AbstractActionDelegate { private Volume volume; private Brick brick; @Override protected void performAction(IAction action) { - MigrateDiskWizard wizard = new MigrateDiskWizard(volume, brick); + MigrateBrickWizard wizard = new MigrateBrickWizard(volume, brick); WizardDialog dialog = new WizardDialog(window.getShell(), wizard); dialog.create(); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveBrickAction.java index d4c5a54a..0f411a59 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveBrickAction.java @@ -20,7 +20,7 @@ import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.utils.GUIHelper; import com.gluster.storage.management.gui.views.VolumeBricksView; -public class RemoveDiskAction extends AbstractActionDelegate { +public class RemoveBrickAction extends AbstractActionDelegate { private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); private GUIHelper guiHelper = GUIHelper.getInstance(); private Set<Brick> bricks; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java index 48a46c84..961dca88 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java @@ -39,7 +39,7 @@ import com.richclientgui.toolbox.duallists.IRemovableContentProvider; * @author root * */ -public class AddDiskPage extends WizardPage { +public class AddBrickPage extends WizardPage { private List<Disk> availableDisks = new ArrayList<Disk>(); private List<Disk> selectedDisks = new ArrayList<Disk>(); private Volume volume = null; @@ -51,7 +51,7 @@ public class AddDiskPage extends WizardPage { /** * @param pageName */ - protected AddDiskPage(Volume volume) { + protected AddBrickPage(Volume volume) { super(PAGE_NAME); this.volume = volume; setTitle("Add Brick"); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskWizard.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickWizard.java index bb55ece1..bcb3ce3d 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskWizard.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickWizard.java @@ -38,18 +38,18 @@ import com.gluster.storage.management.core.utils.StringUtil; /** * */ -public class AddDiskWizard extends Wizard { - private AddDiskPage page; +public class AddBrickWizard extends Wizard { + private AddBrickPage page; private Volume volume; - public AddDiskWizard(Volume volume) { + public AddBrickWizard(Volume volume) { setWindowTitle("Gluster Management Console - Add Brick"); setHelpAvailable(false); // TODO: Introduce wizard help this.volume = volume; } public void addPages() { - page = new AddDiskPage(volume); + page = new AddBrickPage(volume); addPage(page); } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickPage1.java index 4533ca23..f7ce744f 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickPage1.java @@ -1,21 +1,24 @@ -/******************************************************************************* +/** + * MigrateBrickPage1.java + * * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com> * This file is part of Gluster Management Console. * - * Gluster Management Console is free software; you can redistribute it and/or + * Gluster Management Console is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. - * - * Gluster Management Console is distributed in the hope that it will be useful, + * + * Gluster Management Console is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License * for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see * <http://www.gnu.org/licenses/>. - *******************************************************************************/ + */ + package com.gluster.storage.management.gui.dialogs; import java.util.List; @@ -48,7 +51,7 @@ import com.gluster.storage.management.core.utils.NumberUtil; import com.gluster.storage.management.gui.TableLabelProviderAdapter; import com.gluster.storage.management.gui.utils.GUIHelper; -public class MigrateDiskPage1 extends WizardPage { +public class MigrateBrickPage1 extends WizardPage { private static final String PAGE_NAME = "migrate.disk.page.1"; private enum DISK_TABLE_COLUMN_INDICES { @@ -118,7 +121,7 @@ public class MigrateDiskPage1 extends WizardPage { /** * Create the wizard. */ - public MigrateDiskPage1(Volume volume, Brick brick) { + public MigrateBrickPage1(Volume volume, Brick brick) { super(PAGE_NAME); this.volume = volume; this.fromBrick = brick; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickWizard.java index 2d65a869..4693726b 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickWizard.java @@ -30,12 +30,12 @@ import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.TaskInfo; import com.gluster.storage.management.core.model.Volume; -public class MigrateDiskWizard extends Wizard { +public class MigrateBrickWizard extends Wizard { private Volume volume; private Brick brick; - private MigrateDiskPage1 page; + private MigrateBrickPage1 page; - public MigrateDiskWizard(Volume volume, Brick brick) { + public MigrateBrickWizard(Volume volume, Brick brick) { setWindowTitle("Gluster Management Console - Migrate Brick [" + volume.getName() + "]"); this.volume = volume; this.brick = brick; @@ -44,7 +44,7 @@ public class MigrateDiskWizard extends Wizard { @Override public void addPages() { - page = new MigrateDiskPage1(volume, brick); + page = new MigrateBrickPage1(volume, brick); addPage(page); } 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(); |
