summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <anjalshireesh@gmail.com>2011-08-08 10:04:32 -0700
committerShireesh Anjal <anjalshireesh@gmail.com>2011-08-08 10:04:32 -0700
commit968de364c1b924e77eaf1279c27f3c8784400221 (patch)
treee3b7ad0b75a68ab932ce175a785fa924a2c9733a /src
parent796c6d32694d537092854756fe7f463d347d6854 (diff)
parent2034897d0085ec7808cb22cad72d8b9e0c90f879 (diff)
Merge pull request #207 from Selvasundaram/46ff3a7d199308498c90e37a7d20fffd6daaa3cf
GlusterFS download URI updated
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java9
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/CommitTaskAction.java2
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/actions/RebalanceVolumeAction.java12
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/InitializeDiskTypeSelection.java2
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/MigrateBrickWizard.java18
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/pages/AbstractDisksPage.java27
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/constants/VolumeOptionsDefaults.java4
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/TasksResource.java25
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java8
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/MigrateBrickTask.java20
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$")