diff options
| author | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-08-08 10:04:32 -0700 |
|---|---|---|
| committer | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-08-08 10:04:32 -0700 |
| commit | 968de364c1b924e77eaf1279c27f3c8784400221 (patch) | |
| tree | e3b7ad0b75a68ab932ce175a785fa924a2c9733a /src | |
| parent | 796c6d32694d537092854756fe7f463d347d6854 (diff) | |
| parent | 2034897d0085ec7808cb22cad72d8b9e0c90f879 (diff) | |
Merge pull request #207 from Selvasundaram/46ff3a7d199308498c90e37a7d20fffd6daaa3cf
GlusterFS download URI updated
Diffstat (limited to 'src')
10 files changed, 98 insertions, 29 deletions
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java index 5e8e5325..46f4393b 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java @@ -830,6 +830,15 @@ public class GlusterDataModelManager { return null; } + public TaskInfo getTaskByReference(String reference) { + for (TaskInfo taskInfo: model.getCluster().getTaskInfoList()) { + if (taskInfo.getReference().equals(reference)) { + return taskInfo; + } + } + return null; + } + // Updating the Task public void updateTask(TaskInfo taskInfo) { for (ClusterListener listener : listeners) { diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/CommitTaskAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/CommitTaskAction.java index ff47ff41..ea47bd8f 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/CommitTaskAction.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/CommitTaskAction.java @@ -36,7 +36,7 @@ public class CommitTaskAction extends AbstractActionDelegate { @Override public void run() { try { - String volumeName = taskInfo.getReference(); + String volumeName = taskInfo.getReference().split("-")[0]; //Extract volume name from reference Volume oldVolume = modelManager.getModel().getCluster().getVolume(volumeName); Volume newVolume = (new VolumesClient()).getVolume(volumeName); diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/RebalanceVolumeAction.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/RebalanceVolumeAction.java index 14c001aa..aeed223f 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/RebalanceVolumeAction.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/RebalanceVolumeAction.java @@ -21,12 +21,14 @@ package com.gluster.storage.management.console.actions; import java.net.URI; import org.eclipse.jface.action.IAction; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import com.gluster.storage.management.client.TasksClient; import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.console.GlusterDataModelManager; import com.gluster.storage.management.console.utils.GUIHelper; +import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.TaskInfo; import com.gluster.storage.management.core.model.Volume; @@ -38,12 +40,20 @@ public class RebalanceVolumeAction extends AbstractActionDelegate { protected void performAction(final IAction action) { final String actionDesc = action.getDescription(); try { + TaskInfo existingTaskInfo = GlusterDataModelManager.getInstance().getTaskByReference(volume.getName()); + if (existingTaskInfo != null && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_SUCCESS + && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_FAILURE) { + showInfoDialog(actionDesc, "Volume [" + volume.getName() + + "] rebalance is already in progress! Try later."); + return; + } + URI uri = new VolumesClient().rebalanceStart(volume.getName(), false, false, false); // Add the task to model TasksClient taskClient = new TasksClient(); TaskInfo taskInfo = taskClient.getTaskInfo(uri); if (taskInfo != null && taskInfo instanceof TaskInfo) { - GlusterDataModelManager.getInstance().getModel().getCluster().addTaskInfo(taskInfo); + GlusterDataModelManager.getInstance().addTask(taskInfo); } showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] rebalance started successfully!"); guiHelper.showTaskView(); diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java index 060e68ac..2467735f 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java @@ -45,7 +45,7 @@ public class InitializeDiskTypeSelection extends Dialog { private final GUIHelper guiHelper = GUIHelper.getInstance(); private Composite initializeDiskTypeComposite; private Composite composite; - private String fsType; + private String fsType; public InitializeDiskTypeSelection(Shell parentShell) { super(parentShell); diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/MigrateBrickWizard.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/MigrateBrickWizard.java index eef810fe..2f7c2fb9 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/MigrateBrickWizard.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/MigrateBrickWizard.java @@ -29,6 +29,7 @@ import com.gluster.storage.management.console.GlusterDataModelManager; import com.gluster.storage.management.console.utils.GUIHelper; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Cluster; +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; @@ -63,19 +64,28 @@ public class MigrateBrickWizard extends Wizard { String dialogTitle = "Brick migration"; try { + String reference = volume.getName() + "-" + sourceDir + "-" + targetDir; + TaskInfo existingTaskInfo = GlusterDataModelManager.getInstance().getTaskByReference(reference); + if (existingTaskInfo != null && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_SUCCESS + && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_FAILURE) { + MessageDialog.openInformation(getShell(), dialogTitle, "Volume brick [" + reference + + "] migration is already in progress! Try later."); + return true; + } + URI uri = volumesClient.startMigration(volume.getName(), sourceDir, targetDir, autoCommit); // To get the object TasksClient taskClient = new TasksClient(); TaskInfo taskInfo = taskClient.getTaskInfo(uri); if (taskInfo != null && taskInfo instanceof TaskInfo) { - cluster.addTaskInfo(taskInfo); - modelManager.refreshVolumeData(cluster.getVolume(taskInfo.getReference())); + // cluster.addTaskInfo(taskInfo); + String volumeName = taskInfo.getReference().split("-")[0]; + modelManager.addTask(taskInfo); + modelManager.refreshVolumeData(cluster.getVolume(volumeName)); // If auto commit selected and migration operation complete immediately, if (taskInfo.getStatus().getCode() == TaskStatus.STATUS_CODE_SUCCESS) { - - String volumeName = taskInfo.getReference(); Volume oldVolume = cluster.getVolume(volumeName); Volume newVolume = (new VolumesClient()).getVolume(volumeName); diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java index cf702ef5..58712e93 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java @@ -53,6 +53,7 @@ import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.core.model.Event; import com.gluster.storage.management.core.model.Event.EVENT_TYPE; +import com.gluster.storage.management.core.model.GlusterDataModel; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.TaskInfo; @@ -242,6 +243,18 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk @Override public void linkActivated(HyperlinkEvent e) { + GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + + // If the same task is already running return + String reference = device.getServerName() + ":" + device.getName(); + TaskInfo existingTaskInfo = modelManager.getTaskByReference(reference); + if (existingTaskInfo != null && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_SUCCESS + && existingTaskInfo.getStatus().getCode() != Status.STATUS_CODE_FAILURE) { + MessageDialog.openInformation(getShell(), "Error: Initialize disk", "Initializing disk [" + reference + + "] is already in progress! Try later."); + return; + } + InitializeDiskTypeSelection formatDialog = new InitializeDiskTypeSelection(getShell()); int userAction = formatDialog.open(); if (userAction == Window.CANCEL) { @@ -258,15 +271,21 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk TaskInfo taskInfo = taskClient.getTaskInfo(uri); if (taskInfo != null && taskInfo instanceof TaskInfo) { - GlusterDataModelManager.getInstance().getModel().getCluster().addTaskInfo(taskInfo); + modelManager.addTask(taskInfo); } if (taskInfo.getStatus().getCode() == Status.STATUS_CODE_RUNNING) { updateStatus(DEVICE_STATUS.INITIALIZING, true); } else if (taskInfo.getStatus().getCode() == Status.STATUS_CODE_SUCCESS) { - updateStatus(DEVICE_STATUS.INITIALIZED, true); - GlusterDataModelManager.getInstance().updateDeviceStatus(device.getServerName(), device.getName(), - DEVICE_STATUS.INITIALIZED); + // If format completed (instantly), get the server details and update the server in the model + GlusterServer oldServer = modelManager.getModel().getCluster().getServer(device.getServerName()); + GlusterServer newServer = serversClient.getGlusterServer(device.getServerName()); + modelManager.glusterServerChanged(oldServer, newServer); + // updateStatus(DEVICE_STATUS.INITIALIZED, true); + // GlusterDataModelManager.getInstance().updateDeviceStatus(device.getServerName(), device.getName(), + // DEVICE_STATUS.INITIALIZED); + } else { + MessageDialog.openError(getShell(), "Error: Initialize disk", taskInfo.getStatus().getMessage()); } guiHelper.showTaskView(); } catch (Exception e1) { diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/constants/VolumeOptionsDefaults.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/constants/VolumeOptionsDefaults.java index 4c39b97d..0e008b32 100644 --- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/constants/VolumeOptionsDefaults.java +++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/constants/VolumeOptionsDefaults.java @@ -55,8 +55,8 @@ public class VolumeOptionsDefaults { * @return list of volume option information objects */ public List<VolumeOptionInfo> getDefaults(String clusterName) { - return getVolumeOptionsInfo(clusterName); - // return getVolumeOptionsInfo(); + // return getVolumeOptionsInfo(clusterName); + return getVolumeOptionsInfo(); } diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/TasksResource.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/TasksResource.java index d838aac6..0861e1d6 100644 --- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/TasksResource.java +++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/TasksResource.java @@ -56,24 +56,33 @@ import com.sun.jersey.spi.resource.Singleton; @Path(RESOURCE_PATH_CLUSTERS + "/{" + PATH_PARAM_CLUSTER_NAME + "}/" + RESOURCE_TASKS) @Singleton @Component + public class TasksResource extends AbstractResource { private Map<String, Map<String, Task>> tasksMap = new HashMap<String, Map<String, Task>>(); public TasksResource() { } - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) public void addTask(String clusterName, Task task) { Map clusterTaskMap = tasksMap.get(clusterName); if(clusterTaskMap == null) { clusterTaskMap = new HashMap<String, Task>(); tasksMap.put(clusterName, clusterTaskMap); } + // Remove the task if already exist + if (clusterTaskMap.containsKey(task.getId())) { + removeTask(clusterName, task); + } clusterTaskMap.put(task.getId(), task); } - public void removeTask(Task task) { - tasksMap.remove(task.getId()); + @SuppressWarnings("rawtypes") + public void removeTask(String clusterName, Task task) { + Map clusterTaskMap = tasksMap.get(clusterName); + if (clusterTaskMap != null) { + clusterTaskMap.remove(task.getId()); + } } public List<TaskInfo> getAllTasksInfo(String clusterName) { @@ -176,7 +185,11 @@ public class TasksResource extends AbstractResource { @PathParam(PATH_PARAM_TASK_ID) String taskId, @QueryParam(FORM_PARAM_OPERATION) String taskOperation) { Task task = getTask(clusterName, taskId); if (task == null) { - return notFoundResponse("Task [" + taskId + "] not found!"); + return notFoundResponse("Requested task not found!"); + } + + if(clusterName == null || clusterName.isEmpty()) { + return badRequestResponse("Parameter [" + PATH_PARAM_CLUSTER_NAME + "] is missing in request!"); } if(taskOperation == null || taskOperation.isEmpty()) { @@ -191,12 +204,12 @@ public class TasksResource extends AbstractResource { try { if (taskOperation.equals(RESTConstants.TASK_STOP)) { task.stop(); - // On successfully stopping the task, we can delete (forget) it as it is no more useful + // On successful, intentionally stopped task can be removed from task list also taskOperation = RESTConstants.TASK_DELETE; } if (taskOperation.equals(RESTConstants.TASK_DELETE)) { - removeTask(task); + removeTask(clusterName, task); } return noContentResponse(); diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java index e15ed62e..be167133 100644 --- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java +++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java @@ -47,9 +47,11 @@ public class InitializeDiskTask extends Task { private ServerUtil serverUtil; private GlusterUtil glusterUtil; - public InitializeDiskTask(ClusterService clusterService, String clusterName, String serverName, String diskName, String fsType) { - super(clusterService, clusterName, TASK_TYPE.DISK_FORMAT, diskName, "Initialize disk " + serverName + ":" - + diskName, false, false, false); + public InitializeDiskTask(ClusterService clusterService, String clusterName, String serverName, String diskName, + String fsType) { + // Reference contains "Server:disk" + super(clusterService, clusterName, TASK_TYPE.DISK_FORMAT, serverName + ":" + diskName, "Initialize disk " + + serverName + ":" + diskName, false, false, false); setServerName(serverName); setDiskName(diskName); diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/MigrateBrickTask.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/MigrateBrickTask.java index cc2c2b97..9dcb38c4 100644 --- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/MigrateBrickTask.java +++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/MigrateBrickTask.java @@ -65,8 +65,9 @@ public class MigrateBrickTask extends Task { 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); + super(clusterService, clusterName, TASK_TYPE.BRICK_MIGRATE, volumeName + "-" + fromBrick + "-" + toBrick, + "Brick Migration on volume [" + volumeName + "] from [" + fromBrick + "] to [" + toBrick + "]", true, + true, true); setFromBrick(fromBrick); setToBrick(toBrick); taskInfo.setName(getId()); @@ -95,7 +96,8 @@ public class MigrateBrickTask extends Task { } private void startMigration(String onlineServerName) { - ProcessResult processResult = glusterUtil.executeBrickMigration(onlineServerName, getTaskInfo().getReference(), + String volumeName = getTaskInfo().getReference().split("-")[0]; + ProcessResult processResult = glusterUtil.executeBrickMigration(onlineServerName, volumeName, getFromBrick(), getToBrick(), "start"); if (processResult.getOutput().trim().matches(".*started successfully$")) { getTaskInfo().setStatus( @@ -115,7 +117,8 @@ public class MigrateBrickTask extends Task { } private void pauseMigration(String onlineServer) { - ProcessResult processResult = glusterUtil.executeBrickMigration(onlineServer, taskInfo.getReference(), + String volumeName = getTaskInfo().getReference().split("-")[0]; + ProcessResult processResult = glusterUtil.executeBrickMigration(onlineServer, volumeName, getFromBrick(), getToBrick(), "pause"); TaskStatus taskStatus = new TaskStatus(); if (processResult.getOutput().trim().matches(".*paused successfully$")) { @@ -142,7 +145,8 @@ public class MigrateBrickTask extends Task { } private void commitMigration(String serverName) { - ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, getTaskInfo().getReference(), + String volumeName = getTaskInfo().getReference().split("-")[0]; + ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, volumeName, getFromBrick(), getToBrick(), "commit"); TaskStatus taskStatus = new TaskStatus(); if (processResult.isSuccess()) { @@ -165,7 +169,8 @@ public class MigrateBrickTask extends Task { } private void stopMigration(String serverName) { - ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, taskInfo.getReference(), getFromBrick(), + String volumeName = getTaskInfo().getReference().split("-")[0]; + ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, volumeName, getFromBrick(), getToBrick(), "abort"); TaskStatus taskStatus = new TaskStatus(); if (processResult.getOutput().trim().matches(".*aborted successfully$")) { @@ -193,7 +198,8 @@ public class MigrateBrickTask extends Task { TaskStatus taskStatus = new TaskStatus(); try { - ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, getTaskInfo().getReference(), + String volumeName = getTaskInfo().getReference().split("-")[0]; + ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, volumeName, getFromBrick(), getToBrick(), "status"); String output = processResult.getOutput().trim(); if (output.matches("^Number of files migrated.*Migration complete$") |
