summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim <timothyasir@gluster.com>2011-07-05 15:38:35 +0530
committerTim <timothyasir@gluster.com>2011-07-05 15:38:35 +0530
commit72722169d06f0a930c58b1eb8ae892cfc14ec096 (patch)
tree5c420ccf5490fde2024382d0cf10dabb825eb418
parent482457016156b7eb46f3f0f60ae9003ed267ea44 (diff)
parent429d3149d5cf042f1aabc5836d7df451c7da06bd (diff)
Merge remote branch 'upstream/master'
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java192
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java41
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java8
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/constants/ClientConstants.java2
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/utils/ClientUtil.java2
-rw-r--r--src/com.gluster.storage.management.core/.classpath1
-rw-r--r--src/com.gluster.storage.management.core/META-INF/MANIFEST.MF5
-rw-r--r--src/com.gluster.storage.management.core/build.properties5
-rw-r--r--src/com.gluster.storage.management.core/lib/log4j-1.2.16.jarbin0 -> 481534 bytes
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/GlusterConstants.java1
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java30
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java18
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java2
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java40
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java29
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java12
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java49
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java52
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java19
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java69
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java16
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/User.java3
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java111
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java28
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskInfoListResponse.java3
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java55
-rw-r--r--src/com.gluster.storage.management.gui/plugin.xml10
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java5
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java6
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddBrickAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddDiskAction.java)44
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java27
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java27
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CommitTaskAction.java37
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CreateVolumeAction.java32
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java97
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DownloadVolumeLogsAction.java7
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/MigrateBrickAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/MigrateDiskAction.java)8
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java31
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java24
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveBrickAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java)64
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java4
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java30
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java7
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java28
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java45
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskPage.java)13
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickWizard.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddDiskWizard.java)25
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java6
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickPage1.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java)19
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickWizard.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java)8
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java4
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java24
-rw-r--r--src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml8
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/AbstractResource.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java)13
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/AbstractServersResource.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java)2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/AlertsResource.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java)2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java)2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/DiscoveredServersResource.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java)2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java)11
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TasksResource.java)2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/UsersResource.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/UsersResource.java)16
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/VolumesResource.java (renamed from src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java)10
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java54
-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)131
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java78
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java9
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java99
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java1
-rw-r--r--src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml2
71 files changed, 1035 insertions, 836 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index f3feb1cb..221651a3 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -20,6 +20,7 @@ package com.gluster.storage.management.client;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -29,7 +30,6 @@ import com.gluster.storage.management.core.model.Cluster;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.Disk;
import com.gluster.storage.management.core.model.Disk.DISK_STATUS;
-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;
@@ -111,44 +111,173 @@ public class GlusterDataModelManager {
private void updateModel(GlusterDataModel model) {
updateVolumes(model);
- updateServers(model);
- // TODO: Update other entities like discovered servers
+ updateGlusterServers(model);
+ updateDiscoveredServers(model);
}
- private void updateServers(GlusterDataModel newModel) {
+ private void updateDiscoveredServers(GlusterDataModel newModel) {
+ List<Server> oldServers = model.getCluster().getAutoDiscoveredServers();
+ List<Server> newServers = newModel.getCluster().getAutoDiscoveredServers();
+
+ Set<Server> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
+ for (Server addedServer : addedServers) {
+ addDiscoveredServer(addedServer);
+ }
+
+ Set<Server> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
+ for (Server removedServer : removedServers) {
+ removeDiscoveredServer(removedServer);
+ }
+
+ Map<Server, Server> modifiedServers = GlusterCoreUtil.getModifiedEntities(oldServers, newServers);
+ for(Entry<Server, Server> entry : modifiedServers.entrySet()) {
+ discoveredServerChanged(entry.getKey(), entry.getValue());
+ }
+ }
+
+ private void updateGlusterServers(GlusterDataModel newModel) {
List<GlusterServer> oldServers = model.getCluster().getServers();
List<GlusterServer> newServers = newModel.getCluster().getServers();
- List<GlusterServer> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
+ Set<GlusterServer> addedServers = GlusterCoreUtil.getAddedEntities(oldServers, newServers, true);
for (GlusterServer addedServer : addedServers) {
addGlusterServer(addedServer);
}
- List<GlusterServer> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
+ Set<GlusterServer> removedServers = GlusterCoreUtil.getAddedEntities(newServers, oldServers, true);
for (GlusterServer removedServer : removedServers) {
removeGlusterServer(removedServer);
}
- // TODO: Refresh "modified" servers
+ Map<GlusterServer, GlusterServer> modifiedServers = GlusterCoreUtil.getModifiedEntities(oldServers, newServers);
+ for(Entry<GlusterServer, GlusterServer> entry : modifiedServers.entrySet()) {
+ glusterServerChanged(entry.getKey(), entry.getValue());
+ }
+ }
+
+ public void glusterServerChanged(GlusterServer oldServer, GlusterServer newServer) {
+ oldServer.copyFrom(newServer);
+ for (ClusterListener listener : listeners) {
+ listener.serverChanged(oldServer, new Event(EVENT_TYPE.GLUSTER_SERVER_CHANGED, newServer));
+ }
+
+ updateDisks(oldServer, oldServer.getDisks(), newServer.getDisks());
+ }
+
+ private void updateDisks(Server server, List<Disk> oldDisks, List<Disk> newDisks) {
+ Set<Disk> addedDisks = GlusterCoreUtil.getAddedEntities(oldDisks, newDisks, false);
+ addDisks(server, addedDisks);
+
+ Set<Disk> removedDisks = GlusterCoreUtil.getAddedEntities(newDisks, oldDisks, false);
+ removeDisks(server, removedDisks);
+
+ Map<Disk, Disk> modifiedDisks = GlusterCoreUtil.getModifiedEntities(oldDisks, newDisks);
+ disksChanged(server, modifiedDisks);
+ }
+
+ private void disksChanged(Server server, Map<Disk, Disk> modifiedDisks) {
+ if(modifiedDisks.size() == 0) {
+ return;
+ }
+
+ for (Entry<Disk, Disk> entry : modifiedDisks.entrySet()) {
+ entry.getKey().copyFrom(entry.getValue());
+ }
+ for (ClusterListener listener : listeners) {
+ if (server instanceof GlusterServer) {
+ listener.serverChanged((GlusterServer) server, new Event(EVENT_TYPE.DISKS_CHANGED, modifiedDisks));
+ } else {
+ listener.discoveredServerChanged(server, new Event(EVENT_TYPE.DISKS_CHANGED, modifiedDisks));
+ }
+ }
+ }
+
+ public void addDisks(Server server, Set<Disk> disks) {
+ if(disks.size() == 0) {
+ return;
+ }
+
+ server.addDisks(disks);
+ for (ClusterListener listener : listeners) {
+ if(server instanceof GlusterServer) {
+ listener.serverChanged((GlusterServer)server, new Event(EVENT_TYPE.DISKS_ADDED, disks));
+ } else {
+ listener.discoveredServerChanged(server, new Event(EVENT_TYPE.DISKS_ADDED, disks));
+ }
+ }
+ }
+
+ public void removeDisks(Server server, Set<Disk> disks) {
+ if(disks.size() == 0) {
+ return;
+ }
+
+ for(Disk disk : disks) {
+ server.removeDisk(disk);
+ }
+
+ for (ClusterListener listener : listeners) {
+ if(server instanceof GlusterServer) {
+ listener.serverChanged((GlusterServer)server, new Event(EVENT_TYPE.DISKS_REMOVED, disks));
+ } else {
+ listener.discoveredServerChanged(server, new Event(EVENT_TYPE.DISKS_REMOVED, disks));
+ }
+ }
}
private void updateVolumes(GlusterDataModel newModel) {
List<Volume> oldVolumes = model.getCluster().getVolumes();
List<Volume> newVolumes = newModel.getCluster().getVolumes();
- List<Volume> addedVolumes = GlusterCoreUtil.getAddedEntities(oldVolumes, newVolumes, false);
+ Set<Volume> addedVolumes = GlusterCoreUtil.getAddedEntities(oldVolumes, newVolumes, false);
for (Volume addedVolume : addedVolumes) {
addVolume(addedVolume);
}
- List<Volume> removedVolumes = GlusterCoreUtil.getAddedEntities(newVolumes, oldVolumes, false);
+ Set<Volume> removedVolumes = GlusterCoreUtil.getAddedEntities(newVolumes, oldVolumes, false);
for (Volume removedVolume : removedVolumes) {
deleteVolume(removedVolume);
}
- // TODO: Refresh "modified" volumes
+ Map<Volume, Volume> modifiedVolumes = GlusterCoreUtil.getModifiedEntities(oldVolumes, newVolumes);
+ for(Entry<Volume, Volume> entry : modifiedVolumes.entrySet()) {
+ volumeChanged(entry.getKey(), entry.getValue());
+ }
}
+ private void volumeChanged(Volume oldVolume, Volume newVolume) {
+ oldVolume.copyFrom(newVolume);
+ for (ClusterListener listener : listeners) {
+ listener.volumeChanged(oldVolume, new Event(EVENT_TYPE.VOLUME_CHANGED, newVolume));
+ }
+ updateBricks(oldVolume, oldVolume.getBricks(), newVolume.getBricks());
+ }
+
+ private void updateBricks(Volume volume, List<Brick> oldBricks, List<Brick> newBricks) {
+ Set<Brick> addedBricks = GlusterCoreUtil.getAddedEntities(oldBricks, newBricks, false);
+ addBricks(volume, addedBricks);
+
+ Set<Brick> removedBricks = GlusterCoreUtil.getAddedEntities(newBricks, oldBricks, false);
+ removeBricks(volume, removedBricks);
+
+ Map<Brick, Brick> modifiedBricks = GlusterCoreUtil.getModifiedEntities(oldBricks, newBricks);
+ bricksChanged(volume, modifiedBricks);
+ }
+
+ public void bricksChanged(Volume volume, Map<Brick, Brick> modifiedBricks) {
+ if(modifiedBricks.size() == 0) {
+ return;
+ }
+
+ for(Entry<Brick, Brick> entry : modifiedBricks.entrySet()) {
+ entry.getKey().copyFrom(entry.getValue());
+ }
+
+ for (ClusterListener listener : listeners) {
+ listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_CHANGED, modifiedBricks));
+ }
+ }
+
private void initializeGlusterServers(Cluster cluster) {
cluster.setServers(new GlusterServersClient().getServers());
}
@@ -167,8 +296,8 @@ public class GlusterDataModelManager {
}
public void initializeTasks(Cluster cluster) {
- // List<TaskInfo> taskInfoList = new TasksClient(cluster.getName()).getAllTasks();
- List<TaskInfo> taskInfoList = getDummyTasks();
+ List<TaskInfo> taskInfoList = new TasksClient(cluster.getName()).getAllTasks();
+ // List<TaskInfo> taskInfoList = getDummyTasks();
cluster.setTaskInfoList(taskInfoList);
}
@@ -179,8 +308,8 @@ public class GlusterDataModelManager {
TaskInfo taskInfo = new TaskInfo();
taskInfo.setType(TASK_TYPE.BRICK_MIGRATE);
taskInfo.setName("Migrate Brick-music");
- taskInfo.setCanPause(true);
- taskInfo.setCanStop(true);
+ taskInfo.setPauseSupported(true);
+ taskInfo.setStopSupported(true);
taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, "")));
taskInfo.getStatus().setMessage("Migrating file xxxxx to yyyy");
@@ -190,8 +319,8 @@ public class GlusterDataModelManager {
taskInfo = new TaskInfo();
taskInfo.setType(TASK_TYPE.DISK_FORMAT);
taskInfo.setName("Format Disk-server1:sdc");
- taskInfo.setCanPause(false);
- taskInfo.setCanStop(false);
+ taskInfo.setPauseSupported(false);
+ taskInfo.setStopSupported(false);
taskInfo.setStatus( new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, "")));
taskInfo.getStatus().setMessage("Format completes 80% ...");
taskInfo.setDescription("Formatting disk server1:sdc.");
@@ -341,6 +470,14 @@ public class GlusterDataModelManager {
}
}
+ public void discoveredServerChanged(Server oldServer, Server newServer) {
+ oldServer.copyFrom(newServer);
+ for (ClusterListener listener : listeners) {
+ listener.discoveredServerChanged(oldServer, new Event(EVENT_TYPE.DISCOVERED_SERVER_CHANGED, newServer));
+ }
+ updateDisks(oldServer, oldServer.getDisks(), newServer.getDisks());
+ }
+
public void removeDiscoveredServer(String serverName) {
Cluster cluster = model.getCluster();
// TODO: Move auto-discovered servers outside the cluster
@@ -398,13 +535,27 @@ public class GlusterDataModelManager {
}
}
- public void addBricks(Volume volume, List<Brick> bricks) {
+ public void addBricks(Volume volume, Set<Brick> bricks) {
+ if(bricks.size() == 0) {
+ return;
+ }
+
+ volume.addBricks(bricks);
for (ClusterListener listener : listeners) {
listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_ADDED, bricks));
}
}
public void removeBricks(Volume volume, Set<Brick> bricks) {
+ if(bricks.size() == 0) {
+ return;
+ }
+
+ // Remove the bricks from the volume object
+ for (Brick brick : bricks) {
+ volume.removeBrick(brick);
+ }
+
for (ClusterListener listener : listeners) {
listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_REMOVED, bricks));
}
@@ -425,6 +576,13 @@ public class GlusterDataModelManager {
listener.volumeCreated(volume);
}
}
+
+ public void updateVolumeBricks(Volume volume, List<Brick> bricks) {
+ model.getCluster().updateVolume( volume.getName(), bricks );
+ for (ClusterListener listener : listeners) {
+ listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICK_REPLACED , bricks));
+ }
+ }
public void addTask(TaskInfo taskInfo) {
Cluster cluster = model.getCluster();
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java
index c839a15a..6dc251dc 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java
@@ -22,6 +22,8 @@ import java.net.ConnectException;
import javax.ws.rs.core.Response;
+import org.apache.log4j.Logger;
+
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Status;
import com.sun.jersey.api.client.UniformInterfaceException;
@@ -32,6 +34,7 @@ public class UsersClient extends AbstractClient {
private static final String RESOURCE_NAME = "users";
private static final String FORM_PARAM_OLD_PASSWORD = "oldpassword";
private static final String FORM_PARAM_NEW_PASSWORD = "newpassword";
+ private static final Logger logger = Logger.getLogger(UsersClient.class);
private String generateSecurityToken(String user, String password) {
return new String(Base64.encode(user + ":" + password));
@@ -44,7 +47,7 @@ public class UsersClient extends AbstractClient {
public void authenticate(String user, String password) {
setSecurityToken(generateSecurityToken(user, password));
try {
- fetchSubResource(user, String.class);
+ fetchSubResource(user, Status.class);
} catch (RuntimeException e) {
Throwable cause = e.getCause();
if(cause == null) {
@@ -58,14 +61,16 @@ public class UsersClient extends AbstractClient {
setSecurityToken(null);
throw new GlusterRuntimeException("Invalid user id or password!");
} else {
- // TODO: Log the exception
- throw new GlusterRuntimeException("Exception during authentication: ["
- + e1.getResponse().getStatus() + "]");
+ String errMsg = "Exception during authentication: [" + e1.getResponse().getStatus() + "]";
+ logger.error(errMsg);
+ throw new GlusterRuntimeException(errMsg);
}
} else if(cause instanceof ConnectException) {
throw new GlusterRuntimeException("Couldn't connect to Gluster Management Gateway!");
} else {
- throw new GlusterRuntimeException("Exception during authentication: [" + e.getMessage() + "]");
+ String errMsg = "Exception during authentication: [" + e.getMessage() + "]";
+ logger.error(errMsg);
+ throw new GlusterRuntimeException(errMsg);
}
}
}
@@ -80,20 +85,18 @@ public class UsersClient extends AbstractClient {
}
public static void main(String[] args) {
-// UsersClient authClient = new UsersClient();
-//
-// // authenticate user
-// authClient.authenticate("gluster", "gluster");
-//
-// // change password to gluster1
-// authClient.changePassword("gluster", "gluster", "gluster1");
-//
-// // change it back to gluster
-// authClient.changePassword("gluster", "gluster1", "gluster");
-//
-// System.out.println("success");
- System.out.println(new String(Base64.encode("abcdefghijklmnopqrstuvwxyz")));
- System.out.println(new String(Base64.decode("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=")));
+ UsersClient authClient = new UsersClient();
+
+ // authenticate user
+ authClient.authenticate("gluster", "gluster");
+
+ // change password to gluster1
+ authClient.changePassword("gluster", "gluster", "gluster1");
+
+ // change it back to gluster
+ authClient.changePassword("gluster", "gluster1", "gluster");
+
+ System.out.println("success");
}
/*
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
index b5d2711a..7beb8433 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
@@ -139,7 +139,7 @@ public class VolumesClient extends AbstractClient {
VolumeOptionInfoListResponse.class)).getOptions();
}
- public void addBricks(String volumeName, List<String> brickList) {
+ public void addBricks(String volumeName, Set<String> brickList) {
String bricks = StringUtil.collectionToString(brickList, ",");
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_BRICKS, bricks);
@@ -241,12 +241,6 @@ public class VolumesClient extends AbstractClient {
putRequest(volumeName, form);
}
- public void rebalanceStatus(String volumeName) {
- Form form = new Form();
- form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_REBALANCE_STATUS);
- putRequest(volumeName, form);
- }
-
public void rebalanceStop(String volumeName) {
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_REBALANCE_STOP);
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/constants/ClientConstants.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/constants/ClientConstants.java
index 4726fc36..765735fb 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/constants/ClientConstants.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/constants/ClientConstants.java
@@ -27,7 +27,7 @@ public class ClientConstants {
public static final String SYS_PROP_SERVER_URL = "gluster.server.url";
public static final String DEFAULT_SERVER_URL = "https://localhost:8443/glustermg/linux.gtk.x86_64";
public static final String CONTEXT_ROOT = "glustermg";
- public static final String WEB_RESOURCE_BASE_PATH = "resources";
+ public static final String REST_API_VERSION = "1.0";
// SSL related
public static final String TRUSTED_KEYSTORE = "gmc-trusted.keystore";
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/utils/ClientUtil.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/utils/ClientUtil.java
index 4f7ea64e..3f87fd27 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/utils/ClientUtil.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/utils/ClientUtil.java
@@ -9,7 +9,7 @@ import com.gluster.storage.management.client.constants.ClientConstants;
public class ClientUtil {
public static URI getServerBaseURI() {
- return UriBuilder.fromUri(getBaseURL()).path(ClientConstants.WEB_RESOURCE_BASE_PATH).build();
+ return UriBuilder.fromUri(getBaseURL()).path(ClientConstants.REST_API_VERSION).build();
}
private static String getBaseURL() {
diff --git a/src/com.gluster.storage.management.core/.classpath b/src/com.gluster.storage.management.core/.classpath
index b41cbcdb..221aeec4 100644
--- a/src/com.gluster.storage.management.core/.classpath
+++ b/src/com.gluster.storage.management.core/.classpath
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
+ <classpathentry exported="true" kind="lib" path="lib/log4j-1.2.16.jar"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="junit"/>
diff --git a/src/com.gluster.storage.management.core/META-INF/MANIFEST.MF b/src/com.gluster.storage.management.core/META-INF/MANIFEST.MF
index a32970c8..fae660fb 100644
--- a/src/com.gluster.storage.management.core/META-INF/MANIFEST.MF
+++ b/src/com.gluster.storage.management.core/META-INF/MANIFEST.MF
@@ -9,5 +9,8 @@ Export-Package: com.gluster.storage.management.core.constants,
com.gluster.storage.management.core.exceptions,
com.gluster.storage.management.core.model,
com.gluster.storage.management.core.response,
- com.gluster.storage.management.core.utils
+ com.gluster.storage.management.core.utils,
+ org.apache.log4j
Require-Bundle: org.eclipse.core.runtime;bundle-version="3.6.0"
+Bundle-ClassPath: lib/log4j-1.2.16.jar,
+ .
diff --git a/src/com.gluster.storage.management.core/build.properties b/src/com.gluster.storage.management.core/build.properties
index 34d2e4d2..89d32a46 100644
--- a/src/com.gluster.storage.management.core/build.properties
+++ b/src/com.gluster.storage.management.core/build.properties
@@ -1,4 +1,7 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
- .
+ .,\
+ lib/
+src.includes = lib/,\
+ src/
diff --git a/src/com.gluster.storage.management.core/lib/log4j-1.2.16.jar b/src/com.gluster.storage.management.core/lib/log4j-1.2.16.jar
new file mode 100644
index 00000000..3f9d8476
--- /dev/null
+++ b/src/com.gluster.storage.management.core/lib/log4j-1.2.16.jar
Binary files differ
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/GlusterConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/GlusterConstants.java
index 064037ec..f48f33cf 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/GlusterConstants.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/GlusterConstants.java
@@ -31,5 +31,4 @@ public class GlusterConstants {
};
public static final List<String> VOLUME_LOG_LEVELS_ARR = StringUtil.enumToArray(VOLUME_LOG_LEVELS.values());
-
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
index fef8f969..0b330514 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java
@@ -19,6 +19,7 @@
package com.gluster.storage.management.core.model;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
import com.gluster.storage.management.core.utils.StringUtil;
@@ -35,6 +36,12 @@ public class Brick extends Entity {
public Brick() {
}
+ @Override
+ @XmlTransient
+ public String getName() {
+ return getQualifiedName();
+ }
+
public BRICK_STATUS getStatus() {
return status;
}
@@ -83,7 +90,7 @@ public class Brick extends Entity {
}
public boolean filter(String filterString, boolean caseSensitive) {
- return StringUtil.filterString(getServerName() + getBrickDirectory() + getDiskName(), filterString,
+ return StringUtil.filterString(getServerName() + getBrickDirectory() + getDiskName() + getStatusStr(), filterString,
caseSensitive);
}
@@ -91,4 +98,25 @@ public class Brick extends Entity {
public String toString() {
return getQualifiedName();
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Brick)) {
+ return false;
+ }
+
+ Brick brick = (Brick)obj;
+ if(getQualifiedName().equals(brick.getQualifiedName()) && getStatus() == brick.getStatus()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void copyFrom(Brick newBrick) {
+ setServerName(newBrick.getServerName());
+ setBrickDirectory(newBrick.getBrickDirectory());
+ setDiskName(newBrick.getDiskName());
+ setStatus(newBrick.getStatus());
+ }
}
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 d6757cba..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
@@ -55,7 +55,7 @@ public class Cluster extends Entity {
}
public void deleteVolume(Volume volume) {
- volumes.remove(volume);
+ volumes.remove(volume);
}
public void setServers(List<GlusterServer> servers) {
@@ -93,6 +93,11 @@ public class Cluster extends Entity {
public void addVolume(Volume volume) {
this.volumes.add(volume);
}
+
+ public void updateVolume(String volumeName, List<Brick> bricks) {
+ Volume volume = getVolume(volumeName);
+ volume.setBricks(bricks);
+ }
public Cluster(String name, Entity parent) {
super(name, parent);
@@ -156,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/model/ClusterListener.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
index 71de5e23..350c9102 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
@@ -27,6 +27,8 @@ public interface ClusterListener {
public void discoveredServerRemoved(Server server);
+ public void discoveredServerChanged(Server server, Event event);
+
public void serverAdded(GlusterServer server);
public void serverRemoved(GlusterServer server);
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
index d3b0e42e..c530fde4 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
@@ -26,79 +26,83 @@ public class DefaultClusterListener implements ClusterListener {
@Override
public void serverAdded(GlusterServer server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void serverRemoved(GlusterServer server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void serverChanged(GlusterServer server, Event event) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeAdded(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeRemoved(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeChanged(Volume volume, Event event) {
- clusterChanged();
+ modelChanged();
}
@Override
public void discoveredServerAdded(Server server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void discoveredServerRemoved(Server server) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeCreated(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void volumeDeleted(Volume volume) {
- clusterChanged();
+ modelChanged();
}
@Override
public void taskAdded(TaskInfo taskInfo) {
- clusterChanged();
+ modelChanged();
}
@Override
public void taskRemoved(TaskInfo taskInfo) {
- clusterChanged();
+ modelChanged();
}
@Override
public void taskUpdated(TaskInfo taskInfo) {
- clusterChanged();
+ modelChanged();
}
-
+
/**
* This method is called by every other event method. Thus, if a view/listener is interested in performing the same
- * task on any change happening in the cluster data model, it can simply override this method and implement the
- * logic. e.g. A view may simply refresh its tree/table viewer whenever the cluster data model changes.
+ * task on any change happening in the data model, it can simply override this method and implement the
+ * logic. e.g. A view may simply refresh its tree/table viewer whenever the data model changes.
*/
- public void clusterChanged() {
+ public void modelChanged() {
}
-
+
+ @Override
+ public void discoveredServerChanged(Server server, Event event) {
+ modelChanged();
+ }
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java
index a399a03a..ecc3a278 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java
@@ -132,4 +132,31 @@ public class Disk extends Entity {
public String getQualifiedBrickName(String volumeName) {
return getServerName() + ":" + getMountPoint() + File.separator + volumeName;
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Disk)) {
+ return false;
+ }
+ Disk disk = (Disk)obj;
+
+ if (getName().equals(disk.getName()) && getServerName().equals(disk.getServerName())
+ && getMountPoint().equals(disk.getMountPoint()) && getDescription().equals(disk.getDescription())
+ && getStatus() == disk.getStatus() && getSpace() == disk.getSpace()
+ && getSpaceInUse() == disk.getSpaceInUse()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void copyFrom(Disk newDisk) {
+ setName(newDisk.getName());
+ setDescription(newDisk.getDescription());
+ setMountPoint(newDisk.getMountPoint());
+ setServerName(newDisk.getServerName());
+ setStatus(newDisk.getStatus());
+ setSpace(newDisk.getSpace());
+ setSpaceInUse(newDisk.getSpaceInUse());
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java
index 99594b5d..62f70040 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java
@@ -22,11 +22,17 @@ public class Event {
public enum EVENT_TYPE {
BRICKS_ADDED,
BRICKS_REMOVED,
- NETWORK_INTERFACE_ADDED,
- NETWORK_INTERFACE_REMOVED,
+ BRICKS_CHANGED,
+ BRICK_REPLACED,
VOLUME_STATUS_CHANGED,
VOLUME_OPTIONS_RESET,
- VOLUME_OPTION_SET
+ VOLUME_OPTION_SET,
+ VOLUME_CHANGED,
+ GLUSTER_SERVER_CHANGED,
+ DISKS_ADDED,
+ DISKS_REMOVED,
+ DISKS_CHANGED,
+ DISCOVERED_SERVER_CHANGED
}
private EVENT_TYPE eventType;
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
index 8324b22d..f2ccc5db 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java
@@ -88,7 +88,6 @@ public class GlusterDummyModel {
initializeAutoDiscoveredServers(cluster);
initializeDisks();
addDisksToServers();
- addDisksToVolumes();
addVolumeOptions();
createDummyLogMessages();
@@ -170,27 +169,6 @@ public class GlusterDummyModel {
server5.addDisk(s5db);
}
- private void addDisksToVolumes() {
- volume1.addDisk("server1:sda");
-
- volume2.addDisk("server2:sda");
- volume2.addDisk("server1:sdb");
- volume2.addDisk("server3:sda");
- volume2.addDisk("server4:sda");
-
- volume3.addDisk("server2:sdb");
- volume3.addDisk("server4:sda");
- volume3.addDisk("server5:sda");
-
- volume4.addDisk("server1:sda");
- volume4.addDisk("server3:sda");
- volume4.addDisk("server4:sda");
- volume4.addDisk("server5:sdb");
-
- volume5.addDisk("server2:sda");
- volume5.addDisk("server5:sdb");
- }
-
private void initializeGlusterServers(Cluster cluster) {
List<GlusterServer> servers = new ArrayList<GlusterServer>();
server1 = addGlusterServer(servers, cluster, "Server1", SERVER_STATUS.ONLINE, "eth0", 4, 56.3, 16, 8.4);
@@ -254,33 +232,6 @@ public class GlusterDummyModel {
return null;
}
- public List<Disk> getReadyDisksOfVolume(Volume volume) {
- // List<Disk> disks = new ArrayList<Disk>();
- // for (Disk disk : volume.getDisks()) {
- // if (disk.isReady()) {
- // disks.add(disk);
- // }
- // }
- // return disks;
- Disk disk = null;
- List<Disk> volumeDisks = new ArrayList<Disk>();
- for (String volumeDisk : volume.getDisks()) {
- disk = getVolumeDisk(volumeDisk);
- if (disk != null && disk.isReady()) {
- volumeDisks.add(disk);
- }
- }
- return volumeDisks;
- }
-
- public List<Disk> getReadyDisksOfAllVolumes() {
- List<Disk> disks = new ArrayList<Disk>();
- for (Volume volume : ((Cluster) model.getChildren().get(0)).getVolumes()) {
- disks.addAll(getReadyDisksOfVolume(volume));
- }
- return disks;
- }
-
public List<Disk> getReadyDisksOfAllServers() {
return getReadyDisksOfAllServersExcluding(new ArrayList<Disk>());
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
index a9455f48..025db809 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
@@ -33,7 +33,6 @@ public class GlusterServer extends Server {
private String uuid;
private SERVER_STATUS status;
- private Cluster cluster;
public GlusterServer() {
}
@@ -48,12 +47,6 @@ public class GlusterServer extends Server {
setStatus(status);
}
- public GlusterServer(String name, Entity parent, SERVER_STATUS status, int numOfCPUs, double cpuUsage,
- double totalMemory, double memoryInUse, Cluster cluster) {
- this(name, parent, status, numOfCPUs, cpuUsage, totalMemory, memoryInUse);
- setCluster(cluster);
- }
-
public Boolean isOnline() {
return getStatus() == SERVER_STATUS.ONLINE;
}
@@ -78,32 +71,31 @@ public class GlusterServer extends Server {
this.uuid = uuid;
}
-
-// public NetworkInterface getPreferredNetworkInterface() {
-// return preferredNetworkInterface;
-// }
-//
-// public void setPreferredNetworkInterface(NetworkInterface preferredNetworkInterface) {
-// this.preferredNetworkInterface = preferredNetworkInterface;
-// preferredNetworkInterface.setPreferred(true);
-// }
-
-
- @XmlTransient
- public Cluster getCluster() {
- return cluster;
- }
-
- public void setCluster(Cluster cluster) {
- this.cluster = cluster;
- }
-
/**
- * Filter matches if any of the properties name, status and primary/secondary/third
- * DNS contains the filter string
+ * Filter matches if any of the properties name and status contains the filter string
*/
@Override
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getStatusStr(), filterString, caseSensitive);
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof GlusterServer)) {
+ return false;
+ }
+ GlusterServer server = (GlusterServer)obj;
+
+ if (super.equals(server) && getUuid().equals(server.getUuid()) && getStatus() == server.getStatus()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void copyFrom(GlusterServer server) {
+ super.copyFrom(server);
+ setUuid(server.getUuid());
+ setStatus(server.getStatus());
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
index c0521ef3..181b8e66 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
@@ -92,4 +92,21 @@ public class NetworkInterface extends Entity {
this.speed = speed;
}
-}
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof NetworkInterface)) {
+ return false;
+ }
+
+ NetworkInterface networkInterface = (NetworkInterface) obj;
+ if (getName().equals(networkInterface.getName()) && getHwAddr().equals(networkInterface.getHwAddr())
+ && getIpAddress().equals(networkInterface.getIpAddress())
+ && getDefaultGateway().equals(networkInterface.getDefaultGateway())
+ && getNetMask().equals(networkInterface.getNetMask()) && getSpeed().equals(networkInterface.getSpeed())
+ && getModel().equals(networkInterface.getModel())) {
+ return true;
+ }
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
index 487733c3..9e9212dc 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
@@ -19,17 +19,18 @@
package com.gluster.storage.management.core.model;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
+import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.StringUtil;
@XmlRootElement(name = "server")
public class Server extends Entity {
- private List<NetworkInterface> networkInterfaces = new ArrayList<NetworkInterface>();
private int numOfCPUs;
private double cpuUsage;
private double totalMemory;
@@ -37,6 +38,7 @@ public class Server extends Entity {
private double totalDiskSpace = 0;
private double diskSpaceInUse = 0;
private List<Disk> disks = new ArrayList<Disk>();
+ private List<NetworkInterface> networkInterfaces = new ArrayList<NetworkInterface>();
public Server() {
@@ -143,7 +145,7 @@ public class Server extends Entity {
}
}
- public void addDisks(List<Disk> disks) {
+ public void addDisks(Collection<Disk> disks) {
for (Disk disk : disks) {
addDisk(disk);
}
@@ -184,19 +186,54 @@ public class Server extends Entity {
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getIpAddressesAsString(), filterString, caseSensitive);
}
-
+
+ /**
+ * Note: this method doesn't copy the disks. Clients should write separate code to identify added/removed/modified
+ * disks and update the server disks appropriately.
+ *
+ * @param server
+ */
@SuppressWarnings("unchecked")
public void copyFrom(Server server) {
- this.setName(server.getName());
- this.setParent(server.getParent());
- this.setChildren(( List<Entity>) server.getChildren());
- this.setNetworkInterfaces(server.getNetworkInterfaces());
- this.setNumOfCPUs(server.getNumOfCPUs());
- this.setCpuUsage(server.getCpuUsage());
- this.setTotalMemory(server.getTotalMemory());
- this.setMemoryInUse(server.getMemoryInUse());
- this.setTotalDiskSpace(server.getTotalDiskSpace());
- this.setDiskSpaceInUse(server.getDiskSpaceInUse());
- this.setDisks(server.getDisks());
- }
-}
+ setName(server.getName());
+ setParent(server.getParent());
+ setChildren((List<Entity>) server.getChildren());
+ setNetworkInterfaces(server.getNetworkInterfaces());
+ setNumOfCPUs(server.getNumOfCPUs());
+ setCpuUsage(server.getCpuUsage());
+ setTotalMemory(server.getTotalMemory());
+ setMemoryInUse(server.getMemoryInUse());
+ setTotalDiskSpace(server.getTotalDiskSpace());
+ setDiskSpaceInUse(server.getDiskSpaceInUse());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Server)) {
+ return false;
+ }
+ Server server = (Server)obj;
+
+ if (!(getName().equals(server.getName()) && getNumOfCPUs() == server.getNumOfCPUs()
+ && getCpuUsage() == server.getCpuUsage() && getTotalMemory() == server.getTotalMemory()
+ && getMemoryInUse() == server.getMemoryInUse() && getDisks().size() == server.getDisks().size() && getNetworkInterfaces()
+ .size() == server.getNetworkInterfaces().size())) {
+ return false;
+ }
+
+ for(Disk disk : getDisks()) {
+ if (!disk.equals(GlusterCoreUtil.getEntity(server.getDisks(), disk.getName(), false))) {
+ return false;
+ }
+ }
+
+ for (NetworkInterface networkInterface : getNetworkInterfaces()) {
+ if (!networkInterface.equals(GlusterCoreUtil.getEntity(server.getNetworkInterfaces(),
+ networkInterface.getName(), false))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java
index 1ce2fa04..d3267ec4 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java
@@ -78,28 +78,28 @@ public class TaskInfo extends Entity {
public void setStatus(TaskStatus status) {
this.status = status;
}
-
- public Boolean canPause() {
+
+ public Boolean getPauseSupported() {
return pauseSupported;
}
- public void setCanPause(Boolean canPause) {
+ public void setPauseSupported(Boolean canPause) {
this.pauseSupported = canPause;
}
- public Boolean canStop() {
+ public Boolean getStopSupported() {
return stopSupported;
}
-
- public void setCanStop(Boolean canStop) {
+
+ public void setStopSupported(Boolean canStop) {
this.stopSupported = canStop;
}
- public Boolean canCommit() {
+ public Boolean getCommitSupported() {
return this.commitSupported;
}
- public void setCanCommit(Boolean canCommit) {
+ public void setCommitSupported(Boolean canCommit) {
this.commitSupported = canCommit;
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/User.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/User.java
index da92ca14..ed5d12f7 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/User.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/User.java
@@ -19,6 +19,7 @@
package com.gluster.storage.management.core.model;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
@XmlRootElement
public class User {
@@ -31,6 +32,8 @@ public class User {
public void setUserId(String userId) {
this.userId = userId;
}
+
+ @XmlTransient
public String getPassword() {
return password;
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
index 1d5b2fec..006202fb 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java
@@ -20,6 +20,7 @@ package com.gluster.storage.management.core.model;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -30,6 +31,7 @@ import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
+import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.StringUtil;
@XmlRootElement
@@ -62,16 +64,12 @@ public class Volume extends Entity {
private static final String[] STATUS_STR = new String[] { "Online", "Offline" };
private static final String[] NAS_PROTOCOL_STR = new String[] { "Gluster", "NFS" };
- private Cluster cluster;
private VOLUME_TYPE volumeType;
private TRANSPORT_TYPE transportType;
private VOLUME_STATUS status;
private int replicaCount;
private int stripeCount;
private VolumeOptions options = new VolumeOptions();
-
- private double totalDiskSpace = 0;
- private List<String> disks = new ArrayList<String>();
private List<Brick> bricks = new ArrayList<Brick>();
public Volume() {
@@ -105,10 +103,6 @@ public class Volume extends Entity {
return STATUS_STR[getStatus().ordinal()];
}
- public int getNumOfDisks() {
- return disks.size();
- }
-
public int getNumOfBricks() {
return bricks.size();
}
@@ -164,15 +158,6 @@ public class Volume extends Entity {
this.status = status;
}
- @XmlTransient
- public Cluster getCluster() {
- return cluster;
- }
-
- public void setCluster(Cluster cluster) {
- this.cluster = cluster;
- }
-
@XmlElementWrapper(name = "nasProtocols")
@XmlElement(name = "nasProtocol", type=NAS_PROTOCOL.class)
public Set<NAS_PROTOCOL> getNASProtocols() {
@@ -214,38 +199,11 @@ public class Volume extends Entity {
this.options.setOptionsMap(options);
}
- public double getTotalDiskSpace() {
- return totalDiskSpace;
- }
-
- public List<String> getDisks() {
- return disks;
- }
-
- public void addDisk(String disk) {
- disks.add(disk);
- }
-
- public void addDisks(List<String> disks) {
- for (String disk : disks) {
- addDisk(disk);
- }
- }
-
- public void removeDisk(String disk) {
- disks.remove(disk);
- }
-
- public void removeAllDisks() {
- disks.clear();
- totalDiskSpace = 0;
- }
-
public void addBrick(Brick brick) {
bricks.add(brick);
}
- public void addBricks(List<Brick> bricks) {
+ public void addBricks(Collection<Brick> bricks) {
this.bricks.addAll(bricks);
}
@@ -264,11 +222,6 @@ public class Volume extends Entity {
return bricks;
}
- public void setDisks(List<String> disks) {
- removeAllDisks();
- addDisks(disks);
- }
-
public void enableNFS() {
nasProtocols.add(NAS_PROTOCOL.NFS);
}
@@ -284,13 +237,6 @@ public class Volume extends Entity {
setStatus(status);
}
- public Volume(String name, Entity parent, Cluster cluster, VOLUME_TYPE volumeType, TRANSPORT_TYPE transportType,
- VOLUME_STATUS status) {
- this(name, parent, volumeType, transportType, status);
-
- setCluster(cluster);
- }
-
/**
* Filter matches if any of the properties name, volume type, transport type, status and number of disks contains
* the filter string
@@ -298,7 +244,7 @@ public class Volume extends Entity {
@Override
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getVolumeTypeStr() + getTransportTypeStr() + getStatusStr()
- + getNumOfDisks(), filterString, caseSensitive);
+ + getNumOfBricks(), filterString, caseSensitive);
}
public List<String> getBrickDirectories() {
@@ -308,4 +254,51 @@ public class Volume extends Entity {
}
return brickDirectories;
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Volume)) {
+ return false;
+ }
+
+ Volume volume = (Volume)obj;
+
+ if (!(getName().equals(volume.getName()) && getVolumeType() == volume.getVolumeType()
+ && getTransportType() == volume.getTransportType() && getStatus() == volume.getStatus()
+ && getReplicaCount() == volume.getReplicaCount() && getStripeCount() == volume.getStripeCount())
+ && getOptions().equals(volume.getOptions())) {
+ return false;
+ }
+
+ for(NAS_PROTOCOL nasProtocol : getNASProtocols()) {
+ if(!(volume.getNASProtocols().contains(nasProtocol))) {
+ return false;
+ }
+ }
+
+ for (Brick brick : getBricks()) {
+ if (!(brick.equals(GlusterCoreUtil.getEntity(volume.getBricks(), brick.getName(), false)))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Note: this method doesn't copy the bricks. Clients should write separate code to identify added/removed/modified
+ * bricks and update the volume bricks appropriately.
+ *
+ * @param newVolume
+ */
+ public void copyFrom(Volume newVolume) {
+ setName(newVolume.getName());
+ setVolumeType(newVolume.getVolumeType());
+ setTransportType(newVolume.getTransportType());
+ setStatus(newVolume.getStatus());
+ setReplicaCount(newVolume.getReplicaCount());
+ setStripeCount(newVolume.getStripeCount());
+ setNASProtocols(newVolume.getNASProtocols());
+ getOptions().copyFrom(newVolume.getOptions());
+ }
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java
index f16dd809..f928c241 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java
@@ -86,4 +86,30 @@ public class VolumeOptions {
public boolean containsKey(String key) {
return optionsMap.containsKey(key);
}
-}
+
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof VolumeOptions)) {
+ return false;
+ }
+
+ VolumeOptions options = (VolumeOptions)obj;
+ if(getOptions().size() != options.size()) {
+ return false;
+ }
+
+ for(VolumeOption option : getOptions()) {
+ if(!(option.getValue().equals(options.get(option.getKey())))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public void copyFrom(VolumeOptions options) {
+ for(Entry<String, String> entry : options.entrySet()) {
+ optionsMap.put(entry.getKey(), entry.getValue());
+ }
+ }
+} \ No newline at end of file
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.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
index 76a7fbfc..838612be 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java
@@ -21,7 +21,10 @@
package com.gluster.storage.management.core.utils;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import com.gluster.storage.management.core.model.Brick;
@@ -48,6 +51,25 @@ public class GlusterCoreUtil {
}
/**
+ * Compares the two entity lists and returns the list of entities from first list that have been modified in the second
+ *
+ * @param oldEntities
+ * @param newEntities
+ * @return List of entities that have been modified
+ */
+ public static <T extends Entity> Map<T, T> getModifiedEntities(List<T> oldEntities, List<T> newEntities) {
+ Map<T, T> modifiedEntities = new HashMap<T, T>();
+ for (T oldEntity : oldEntities) {
+ T newEntity = getEntity(newEntities, oldEntity.getName(), false);
+ if(newEntity != null && !oldEntity.equals(newEntity)) {
+ // old and new entities differ. mark it as modified.
+ modifiedEntities.put(oldEntity, newEntity);
+ }
+ }
+ return modifiedEntities;
+ }
+
+ /**
* Compares the two entity lists and returns the list of entities present only in the second argument
* <code>newEntities</code>
*
@@ -56,10 +78,11 @@ public class GlusterCoreUtil {
* @param caseInsensitive If true, the entity name comparison will be done in case insensitive manner
* @return List of entities that are present only in the second argument <code>newEntities</code>
*/
- public static <T extends Entity> List<T> getAddedEntities(List<T> oldEntities, List<T> newEntities, boolean caseInsensitive) {
- List<T> addedEntities = new ArrayList<T>();
- for(T newEntity : newEntities) {
- if(!containsEntity(oldEntities, newEntity, caseInsensitive)) {
+ public static <T extends Entity> Set<T> getAddedEntities(List<T> oldEntities, List<T> newEntities,
+ boolean caseInsensitive) {
+ Set<T> addedEntities = new HashSet<T>();
+ for (T newEntity : newEntities) {
+ if (!containsEntity(oldEntities, newEntity, caseInsensitive)) {
// old entity list doesn't contain this entity. mark it as new.
addedEntities.add(newEntity);
}
@@ -67,22 +90,26 @@ public class GlusterCoreUtil {
return addedEntities;
}
- public static <T extends Entity> boolean containsEntity(List<T> entityList, Entity searchEntity, boolean caseInsensitive) {
- String searchEntityName = searchEntity.getName();
- if(caseInsensitive) {
+ public static <T extends Entity> boolean containsEntity(List<T> entityList, Entity searchEntity,
+ boolean caseInsensitive) {
+ return getEntity(entityList, searchEntity.getName(), caseInsensitive) != null;
+ }
+
+ public static <T extends Entity> T getEntity(List<T> entityList, String searchEntityName, boolean caseInsensitive) {
+ if (caseInsensitive) {
searchEntityName = searchEntityName.toUpperCase();
}
-
- for(T entity : entityList) {
+
+ for (T entity : entityList) {
String nextEntityName = entity.getName();
- if(caseInsensitive) {
+ if (caseInsensitive) {
nextEntityName = nextEntityName.toUpperCase();
}
- if(nextEntityName.equals(searchEntityName)) {
- return true;
+ if (nextEntityName.equals(searchEntityName)) {
+ return entity;
}
}
-
- return false;
+
+ return null;
}
}
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="&amp;Commit TaskTask"
+ label="&amp;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/VolumeOptionsTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java
index 007c7adb..cd85d22b 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java
@@ -20,19 +20,16 @@ package com.gluster.storage.management.gui;
import java.util.Map.Entry;
-import com.gluster.storage.management.gui.utils.GUIHelper;
import com.gluster.storage.management.gui.views.pages.VolumeOptionsPage.OPTIONS_TABLE_COLUMN_INDICES;
public class VolumeOptionsTableLabelProvider extends TableLabelProviderAdapter {
- private GUIHelper guiHelper = GUIHelper.getInstance();
-
@Override
public String getColumnText(Object element, int columnIndex) {
if (!(element instanceof Entry)) {
return null;
}
- Entry<String, String> entry = (Entry) element;
+ Entry<String, String> entry = (Entry<String, String>) element;
String key = entry.getKey();
String value = entry.getValue();
return (columnIndex == OPTIONS_TABLE_COLUMN_INDICES.OPTION_KEY.ordinal() ? key
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java
index 859d76db..6498d902 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java
@@ -18,8 +18,6 @@
*******************************************************************************/
package com.gluster.storage.management.gui.actions;
-import java.util.Set;
-
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
@@ -31,13 +29,13 @@ import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.ui.internal.UIPlugin;
import com.gluster.storage.management.core.model.Entity;
-import com.gluster.storage.management.gui.utils.GUIHelper;
/**
* All action delegates in the application should extend from this class. It provides common functionality of grabbing
* the Window object on initialization and extracting the selected entity in case of selection change on the navigation
* tree.
*/
+@SuppressWarnings("restriction")
public abstract class AbstractActionDelegate implements IWorkbenchWindowActionDelegate {
protected IWorkbenchWindow window;
@@ -56,7 +54,7 @@ public abstract class AbstractActionDelegate implements IWorkbenchWindowActionDe
});
}
- abstract protected void performAction(IAction action);
+ abstract protected void performAction(final IAction action);
@Override
public void selectionChanged(IAction action, ISelection selection) {
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 cc57c541..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.
@@ -24,53 +24,33 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.widgets.Display;
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();
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
- */
@Override
public void dispose() {
window = null;
}
- /* (non-Javadoc)
- * @see com.gluster.storage.management.gui.actions.AbstractActionDelegate#performAction(org.eclipse.jface.action.IAction)
- */
@Override
protected void performAction(IAction action) {
- //TODO: open a dialog box
- // MessageDialog.openInformation(getShell(), "Action captured", action.getDescription() + "\n" + volume.getName());
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- AddDiskWizard wizard = new AddDiskWizard(volume); // Also add single page
-
- WizardDialog dialog = new WizardDialog(getShell(), wizard);
- dialog.create();
- dialog.getShell().setSize(1024, 600);
- dialog.open();
- }
- });
+ // TODO: open a dialog box
+ // MessageDialog.openInformation(getShell(), "Action captured", action.getDescription() + "\n" +
+ // volume.getName());
+ AddBrickWizard wizard = new AddBrickWizard(volume); // Also add single page
+
+ WizardDialog dialog = new WizardDialog(getShell(), wizard);
+ dialog.create();
+ dialog.getShell().setSize(1024, 600);
+ dialog.open();
}
-
- /*
- * (non-Javadoc)
- *
- * @see
- * com.gluster.storage.management.gui.actions.AbstractActionDelegate#selectionChanged(org.eclipse.jface.action.IAction
- * , org.eclipse.jface.viewers.ISelection)
- */
@Override
public void selectionChanged(IAction action, ISelection selection) {
super.selectionChanged(action, selection);
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
index 18731632..81661942 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
@@ -30,8 +30,6 @@ import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.GlusterServersClient;
import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.model.Server;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.response.GlusterServerResponse;
import com.gluster.storage.management.gui.utils.GUIHelper;
public class AddServerAction extends AbstractActionDelegate {
@@ -52,36 +50,23 @@ public class AddServerAction extends AbstractActionDelegate {
String partErrMsg = "";
for (Server server : selectedServers) {
guiHelper.setStatusMessage("Adding server [" + server.getName() + "]...");
-
+
try {
glusterServersClient.addServer(server);
modelManager.addGlusterServer(glusterServersClient.getGlusterServer(server.getName()));
successServers.add(server);
- } catch(Exception e) {
+ } catch (Exception e) {
// TODO: Handle error conditions
}
-
-// Status status = response.getStatus();
-// if (status.isSuccess()) {
-// modelManager.removeDiscoveredServer(server);
-// modelManager.addGlusterServer(response.getGlusterServer());
-// successServers.add(server);
-// } else if (status.isPartSuccess()) {
-// modelManager.removeDiscoveredServer(server);
-// modelManager.addGlusterServer(response.getGlusterServer());
-// partSuccessServers.add(server);
-// partErrMsg += "[" + server.getName() + "] : " + status;
-// } else {
-// errMsg += "[" + server.getName() + "] : " + status;
-// }
}
guiHelper.clearStatusMessage();
- showStatusMessage(action.getDescription(), selectedServers, successServers, partSuccessServers, errMsg, partErrMsg);
+ showStatusMessage(action.getDescription(), selectedServers, successServers, partSuccessServers, errMsg,
+ partErrMsg);
}
};
-
- BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
+
+ BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
@Override
public void run() {
Display.getDefault().asyncExec(addServerThread);
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java
index f1eb8a94..6fff4f44 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java
@@ -2,7 +2,6 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Display;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.TasksClient;
@@ -15,23 +14,15 @@ public class ClearTaskAction extends AbstractActionDelegate {
@Override
protected void performAction(final IAction action) {
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- final String actionDesc = action.getDescription();
-
- try {
- new TasksClient().resumeTask(taskInfo.getName());
- // TODO Update taskInfo in the model
- // modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE);
- modelManager.removeTask(taskInfo);
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Task [" + taskInfo.getName() + "] could not be cleared! Error: [" + e.getMessage() + "]");
- }
- }
- });
+ final String actionDesc = action.getDescription();
+
+ try {
+ new TasksClient().resumeTask(taskInfo.getName());
+ modelManager.removeTask(taskInfo);
+ } catch (Exception e) {
+ showErrorDialog(actionDesc,
+ "Task [" + taskInfo.getName() + "] could not be cleared! Error: [" + e.getMessage() + "]");
+ }
}
@Override
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 9655b2b3..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
@@ -2,13 +2,14 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Display;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.TasksClient;
+import com.gluster.storage.management.client.VolumesClient;
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;
public class CommitTaskAction extends AbstractActionDelegate {
private TaskInfo taskInfo;
@@ -16,23 +17,20 @@ public class CommitTaskAction extends AbstractActionDelegate {
@Override
protected void performAction(final IAction action) {
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- final String actionDesc = action.getDescription();
-
- try {
- new TasksClient().commitTask(taskInfo.getName());
- taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_SUCCESS, taskInfo.getName()
- + " is commited")));
- modelManager.updateTask(taskInfo);
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Task [" + taskInfo.getName() + "] could not be Stopped! Error: [" + e.getMessage() + "]");
- }
- }
- });
+ final String actionDesc = action.getDescription();
+ try {
+ 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(modelManager.getModel().getCluster().getVolume(taskInfo.getReference()),
+ volume.getBricks());
+
+ showInfoDialog(actionDesc, "Commit successful");
+ } catch (Exception e) {
+ showErrorDialog(actionDesc,
+ "Task [" + taskInfo.getName() + "] could not be Committed! Error: [" + e.getMessage() + "]");
+ }
}
@Override
@@ -41,7 +39,7 @@ public class CommitTaskAction extends AbstractActionDelegate {
action.setEnabled(false);
if (selectedEntity instanceof TaskInfo) {
taskInfo = (TaskInfo) selectedEntity;
- action.setEnabled(taskInfo.canCommit()
+ action.setEnabled(taskInfo.getCommitSupported()
&& taskInfo.getStatus().getCode() == Status.STATUS_CODE_COMMIT_PENDING);
}
}
@@ -50,5 +48,4 @@ public class CommitTaskAction extends AbstractActionDelegate {
public void dispose() {
}
-
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CreateVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CreateVolumeAction.java
index 1b412617..2cfa0916 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CreateVolumeAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CreateVolumeAction.java
@@ -33,27 +33,21 @@ import com.gluster.storage.management.gui.dialogs.CreateVolumeWizard;
public class CreateVolumeAction extends AbstractActionDelegate {
@Override
protected void performAction(IAction action) {
- Display.getDefault().asyncExec(new Runnable() {
-
+ CreateVolumeWizard wizard = new CreateVolumeWizard();
+
+ WizardDialog dialog = new WizardDialog(getShell(), wizard) {
@Override
- public void run() {
- CreateVolumeWizard wizard = new CreateVolumeWizard();
-
- WizardDialog dialog = new WizardDialog(getShell(), wizard) {
- @Override
- protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
- Button button = super.createButton(parent, id, label, defaultButton);
- if(id == IDialogConstants.FINISH_ID) {
- button.setText("&Create");
- }
- return button;
- }
- };
- dialog.create();
- dialog.getShell().setSize(500, 550);
- dialog.open();
+ protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
+ Button button = super.createButton(parent, id, label, defaultButton);
+ if (id == IDialogConstants.FINISH_ID) {
+ button.setText("&Create");
+ }
+ return button;
}
- });
+ };
+ dialog.create();
+ dialog.getShell().setSize(500, 550);
+ dialog.open();
}
@Override
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java
index eca8e789..0d61b21f 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java
@@ -21,11 +21,9 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Display;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.VolumesClient;
-import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
import com.gluster.storage.management.gui.IImageKeys;
@@ -37,66 +35,57 @@ public class DeleteVolumeAction extends AbstractActionDelegate {
@Override
protected void performAction(final IAction action) {
+ final String actionDesc = action.getDescription();
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
-
- final String actionDesc = action.getDescription();
+ String warningMessage;
+ if (volume.getStatus() == VOLUME_STATUS.OFFLINE) {
+ warningMessage = "Are you sure to delete the Volume[" + volume.getName() + "] ?";
+ } else {
+ warningMessage = "Volume [" + volume.getName() + "] is online, \nAre you sure to continue?";
+ }
- String warningMessage;
- if (volume.getStatus() == VOLUME_STATUS.OFFLINE) {
- warningMessage = "Are you sure to delete the Volume[" + volume.getName() + "] ?";
- } else {
- warningMessage = "Volume [" + volume.getName() + "] is online, \nAre you sure to continue?";
- }
+ Integer deleteOption = new MessageDialog(getShell(), "Delete Volume", GUIHelper.getInstance().getImage(
+ IImageKeys.VOLUME), warningMessage, MessageDialog.QUESTION, new String[] { "Cancel",
+ "Delete volume and data", "Delete volume, keep data" }, -1).open();
+ if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1)
+ return;
+ }
- Integer deleteOption = new MessageDialog(getShell(), "Delete Volume", GUIHelper.getInstance().getImage(
- IImageKeys.VOLUME), warningMessage, MessageDialog.QUESTION, new String[] { "Cancel",
- "Delete volume and data", "Delete volume, keep data" }, -1).open();
- if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1)
- return;
- }
+ VolumesClient client = new VolumesClient();
- VolumesClient client = new VolumesClient();
+ if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // To stop the volume service, if running
+ try {
+ client.stopVolume(volume.getName());
+ } catch (Exception e) {
+ showErrorDialog(actionDesc,
+ "Volume [" + volume.getName() + "] could not be stopped! Error: [" + e.getMessage() + "]");
+ return;
+ }
+ }
- Status status;
- if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // To stop the volume service, if running
- try {
- client.stopVolume(volume.getName());
- } catch(Exception e) {
- showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be stopped! Error: ["
- + e.getMessage() + "]");
- return;
- }
- }
+ boolean confirmDelete = false;
+ if (deleteOption == 1) {
+ confirmDelete = true;
+ }
- boolean confirmDelete = false;
- if (deleteOption == 1) {
- confirmDelete = true;
- }
+ try {
+ client.deleteVolume(volume, confirmDelete);
+ showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] deleted successfully!");
+ modelManager.deleteVolume(volume);
+ } catch (Exception e) {
+ showErrorDialog(actionDesc, e.getMessage());
- try {
- client.deleteVolume(volume, confirmDelete);
- showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] deleted successfully!");
- modelManager.deleteVolume(volume);
- } catch(Exception e) {
- showErrorDialog(actionDesc, e.getMessage());
-
- // there is a possibility that the error was in post-delete operation, which means
- // volume was deleted, but some other error happened. check if this is the case,
- // and if so, update the model manager
- if(client.volumeExists(volume.getName())) {
- showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be deleted! Error: ["
- + e.getMessage() + "]");
- } else {
- modelManager.deleteVolume(volume);
- showWarningDialog(actionDesc, "Volume deleted, but following error(s) occured: " + e.getMessage());
- }
- }
+ // there is a possibility that the error was in post-delete operation, which means
+ // volume was deleted, but some other error happened. check if this is the case,
+ // and if so, update the model manager
+ if (client.volumeExists(volume.getName())) {
+ showErrorDialog(actionDesc,
+ "Volume [" + volume.getName() + "] could not be deleted! Error: [" + e.getMessage() + "]");
+ } else {
+ modelManager.deleteVolume(volume);
+ showWarningDialog(actionDesc, "Volume deleted, but following error(s) occured: " + e.getMessage());
}
- });
+ }
}
@Override
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DownloadVolumeLogsAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DownloadVolumeLogsAction.java
index d7f68646..226e4d00 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DownloadVolumeLogsAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DownloadVolumeLogsAction.java
@@ -34,20 +34,13 @@ import com.gluster.storage.management.gui.utils.GUIHelper;
public class DownloadVolumeLogsAction extends AbstractActionDelegate {
private GUIHelper guiHelper = GUIHelper.getInstance();
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
- */
@Override
public void dispose() {
}
- /* (non-Javadoc)
- * @see com.gluster.storage.management.gui.actions.AbstractActionDelegate#performAction(org.eclipse.jface.action.IAction)
- */
@Override
protected void performAction(IAction action) {
final VolumesClient client = new VolumesClient();
-
final Runnable downloadLogsThread = new Runnable() {
@Override
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 56ea8179..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();
@@ -61,7 +61,5 @@ public class MigrateDiskAction extends AbstractActionDelegate {
@Override
public void dispose() {
- // TODO Auto-generated method stub
-
}
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java
index b36b7855..e3a4b835 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java
@@ -22,7 +22,6 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Display;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.TasksClient;
@@ -37,33 +36,25 @@ public class PauseTaskAction extends AbstractActionDelegate {
@Override
protected void performAction(final IAction action) {
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- final String actionDesc = action.getDescription();
+ final String actionDesc = action.getDescription();
- try {
- new TasksClient().pauseTask(taskInfo.getName());
- taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_PAUSE, taskInfo.getName()
- + " is Paused")));
- modelManager.updateTask(taskInfo);
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Task [" + taskInfo.getName() + "] could not be Paused! Error: [" + e.getMessage() + "]");
- }
- }
- });
+ try {
+ new TasksClient().pauseTask(taskInfo.getName());
+ taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_PAUSE, "Paused")));
+ modelManager.updateTask(taskInfo);
+ } catch (Exception e) {
+ showErrorDialog(actionDesc,
+ "Task [" + taskInfo.getDescription() + "] could not be Paused! Error: [" + e.getMessage() + "]");
+ }
}
-
-
+
@Override
public void selectionChanged(IAction action, ISelection selection) {
super.selectionChanged(action, selection);
action.setEnabled(false);
if (selectedEntity instanceof TaskInfo) {
taskInfo = (TaskInfo) selectedEntity;
- action.setEnabled(taskInfo.canPause() && taskInfo.getStatus().getCode() == Status.STATUS_CODE_RUNNING);
+ action.setEnabled(taskInfo.getPauseSupported() && taskInfo.getStatus().getCode() == Status.STATUS_CODE_RUNNING);
}
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java
index 33ca0e5b..a203dfb4 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java
@@ -20,7 +20,6 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Display;
import com.gluster.storage.management.client.VolumesClient;
import com.gluster.storage.management.core.model.Volume;
@@ -30,22 +29,15 @@ public class RebalanceVolumeAction extends AbstractActionDelegate {
@Override
protected void performAction(final IAction action) {
+ final String actionDesc = action.getDescription();
+ try {
+ new VolumesClient().rebalanceStart(volume.getName(), false, false, false);
+ showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] rebalance started successfully!");
+ } catch (Exception e) {
+ showErrorDialog(actionDesc, "Volume rebalance could not be started on [" + volume.getName() + "]! Error: ["
+ + e.getMessage() + "]");
+ }
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- final String actionDesc = action.getDescription();
- try {
- new VolumesClient().rebalanceStart(volume.getName(), false, false, false);
- showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] rebalance started successfully!");
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Volume rebalance could not be started on [" + volume.getName() + "]! Error: [" + e.getMessage() + "]");
- }
-
- }
- });
}
@Override
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 b79a4ee4..f7d1207c 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
@@ -1,14 +1,12 @@
package com.gluster.storage.management.gui.actions;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPart;
@@ -16,15 +14,13 @@ import org.eclipse.ui.IWorkbenchPart;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.VolumesClient;
import com.gluster.storage.management.core.model.Brick;
-import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.utils.StringUtil;
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;
@@ -33,48 +29,34 @@ public class RemoveDiskAction extends AbstractActionDelegate {
@Override
protected void performAction(final IAction action) {
- Display.getDefault().asyncExec(new Runnable() {
+ final String actionDesc = action.getDescription();
+ List<String> brickList = getBrickList(bricks);
+ Integer deleteOption = new MessageDialog(getShell(), "Remove Bricks(s)", GUIHelper.getInstance().getImage(
+ IImageKeys.VOLUME), "Are you sure you want to remove following bricks from volume [" + volume.getName()
+ + "] ? \n" + StringUtil.collectionToString(brickList, ", "), MessageDialog.QUESTION, new String[] {
+ "Cancel", "Remove bricks, delete data", "Remove bricks, keep data" }, -1).open();
+ if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1)
+ return;
+ }
- @Override
+ if (deleteOption == 1) {
+ confirmDelete = true;
+ }
+ BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
public void run() {
+ VolumesClient client = new VolumesClient();
+ try {
+ client.removeBricks(volume.getName(), bricks, confirmDelete);
+ // Update model with removed bricks in the volume
+ modelManager.removeBricks(volume, bricks);
- final String actionDesc = action.getDescription();
- List<String> brickList = getBrickList(bricks);
- Integer deleteOption = new MessageDialog(getShell(), "Remove Bricks(s)", GUIHelper.getInstance()
- .getImage(IImageKeys.VOLUME), "Are you sure you want to remove following bricks from volume ["
- + volume.getName() + "] ? \n" + StringUtil.collectionToString(brickList, ", "),
- MessageDialog.QUESTION, new String[] { "Cancel", "Remove bricks, delete data",
- "Remove bricks, keep data" }, -1).open();
- if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1)
- return;
- }
-
- if (deleteOption == 1) {
- confirmDelete = true;
+ showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] bricks(s) removed successfully!");
+ } catch (Exception e) {
+ showErrorDialog(actionDesc, "Volume [" + volume.getName()
+ + "] bricks(s) could not be removed! Error: [" + e.getMessage() + "]");
}
- BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
- public void run() {
- VolumesClient client = new VolumesClient();
- try {
- client.removeBricks(volume.getName(), bricks, confirmDelete);
- // Remove the bricks from the volume object
- for (Brick brick : bricks) {
- volume.removeBrick(brick);
- }
- // Update model with removed bricks in the volume
- modelManager.removeBricks(volume, bricks);
-
- showInfoDialog(actionDesc, "Volume [" + volume.getName()
- + "] bricks(s) removed successfully!");
- } catch (Exception e) {
- showErrorDialog(actionDesc, "Volume [" + volume.getName()
- + "] bricks(s) could not be removed! Error: [" + e.getMessage() + "]");
- }
- }
- });
}
});
-
}
@Override
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java
index 911c57a8..4862b7b1 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java
@@ -29,16 +29,12 @@ import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.PlatformUI;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.GlusterServersClient;
import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.gui.utils.GUIHelper;
-import com.gluster.storage.management.gui.views.NavigationView;
public class RemoveServerAction extends AbstractActionDelegate {
private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java
index fc80b04d..d8f1b955 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java
@@ -2,7 +2,6 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Display;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.TasksClient;
@@ -16,23 +15,16 @@ public class ResumeTaskAction extends AbstractActionDelegate {
@Override
protected void performAction(final IAction action) {
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- final String actionDesc = action.getDescription();
-
- try {
- new TasksClient().resumeTask(taskInfo.getName());
- taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, taskInfo.getName()
- + " is Resumed")));
- modelManager.updateTask(taskInfo);
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Task [" + taskInfo.getName() + "] could not be Resumed! Error: [" + e.getMessage() + "]");
- }
- }
- });
+ final String actionDesc = action.getDescription();
+
+ try {
+ new TasksClient().resumeTask(taskInfo.getName());
+ taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, "Resumed")));
+ modelManager.updateTask(taskInfo);
+ } catch (Exception e) {
+ showErrorDialog(actionDesc,
+ "Task [" + taskInfo.getDescription() + "] could not be Resumed! Error: [" + e.getMessage() + "]");
+ }
}
@Override
@@ -47,9 +39,7 @@ public class ResumeTaskAction extends AbstractActionDelegate {
@Override
public void dispose() {
-
}
-
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java
index c259c661..322a87f9 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java
@@ -53,13 +53,6 @@ public class StartVolumeAction extends AbstractActionDelegate {
}
- /*
- * (non-Javadoc)
- *
- * @see
- * com.gluster.storage.management.gui.actions.AbstractActionDelegate#selectionChanged(org.eclipse.jface.action.IAction
- * , org.eclipse.jface.viewers.ISelection)
- */
@Override
public void selectionChanged(IAction action, ISelection selection) {
super.selectionChanged(action, selection);
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java
index abde4e57..12d14b43 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java
@@ -16,22 +16,16 @@ public class StopTaskAction extends AbstractActionDelegate {
@Override
protected void performAction(final IAction action) {
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- final String actionDesc = action.getDescription();
-
- try {
- new TasksClient().resumeTask(taskInfo.getName());
- taskInfo.setStatus( new TaskStatus( new Status(Status.STATUS_CODE_SUCCESS, taskInfo.getName() + " is Stopped")));
- modelManager.updateTask(taskInfo);
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Task [" + taskInfo.getName() + "] could not be Stopped! Error: [" + e.getMessage() + "]");
- }
- }
- });
+ final String actionDesc = action.getDescription();
+
+ try {
+ new TasksClient().resumeTask(taskInfo.getName());
+ taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_SUCCESS, "Stopped")));
+ modelManager.updateTask(taskInfo);
+ } catch (Exception e) {
+ showErrorDialog(actionDesc,
+ "Task [" + taskInfo.getDescription() + "] could not be Stopped! Error: [" + e.getMessage() + "]");
+ }
}
@Override
@@ -40,7 +34,7 @@ public class StopTaskAction extends AbstractActionDelegate {
action.setEnabled(false);
if (selectedEntity instanceof TaskInfo) {
taskInfo = (TaskInfo) selectedEntity;
- action.setEnabled(taskInfo.canStop()
+ action.setEnabled(taskInfo.getStopSupported()
&& (taskInfo.getStatus().getCode() == Status.STATUS_CODE_PAUSE
|| taskInfo.getStatus().getCode() == Status.STATUS_CODE_RUNNING));
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java
index d4e3d363..62c690e2 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java
@@ -21,7 +21,6 @@ package com.gluster.storage.management.gui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Display;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.VolumesClient;
@@ -36,34 +35,28 @@ public class StopVolumeAction extends AbstractActionDelegate {
@Override
protected void performAction(final IAction action) {
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- final String actionDesc = action.getDescription();
- if (volume.getStatus() == VOLUME_STATUS.OFFLINE) {
- showWarningDialog(actionDesc, "Volume [" + volume.getName() + "] is already offline!");
- return; // Volume already offline. Don't do anything.
- }
+ final String actionDesc = action.getDescription();
+ if (volume.getStatus() == VOLUME_STATUS.OFFLINE) {
+ showWarningDialog(actionDesc, "Volume [" + volume.getName() + "] is already offline!");
+ return; // Volume already offline. Don't do anything.
+ }
- Integer deleteOption = new MessageDialog(getShell(), "Stop Volume", GUIHelper.getInstance().getImage(
- IImageKeys.VOLUME), "Are you sure you want to stop the volume [" + volume.getName() + "] ?",
- MessageDialog.QUESTION, new String[] { "No", "Yes" }, -1).open();
+ Integer deleteOption = new MessageDialog(getShell(), "Stop Volume", GUIHelper.getInstance().getImage(
+ IImageKeys.VOLUME), "Are you sure you want to stop the volume [" + volume.getName() + "] ?",
+ MessageDialog.QUESTION, new String[] { "No", "Yes" }, -1).open();
- if (deleteOption <= 0) {
- return;
- }
+ if (deleteOption <= 0) {
+ return;
+ }
- try {
- new VolumesClient().stopVolume(volume.getName());
- showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] stopped successfully!");
- modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE);
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Volume [" + volume.getName() + "] could not be stopped! Error: [" + e.getMessage() + "]");
- }
- }
- });
+ try {
+ new VolumesClient().stopVolume(volume.getName());
+ showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] stopped successfully!");
+ modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE);
+ } catch (Exception e) {
+ showErrorDialog(actionDesc,
+ "Volume [" + volume.getName() + "] could not be stopped! Error: [" + e.getMessage() + "]");
+ }
}
@Override
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..bd36ff7c 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
@@ -21,7 +21,9 @@
package com.gluster.storage.management.gui.dialogs;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
@@ -39,7 +41,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 +53,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");
@@ -90,12 +92,11 @@ public class AddDiskPage extends WizardPage {
return availableDisks;
}
-
- public List<Disk> getChosenDisks( ) {
- return page.getChosenDisks();
+ public Set<Disk> getChosenDisks() {
+ return new HashSet<Disk>(page.getChosenDisks());
}
- public List<Brick> getChosenBricks( String volumeName ) {
+ public Set<Brick> getChosenBricks( String volumeName ) {
return page.getChosenBricks(volumeName);
}
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..58255f8c 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
@@ -20,8 +20,9 @@
*/
package com.gluster.storage.management.gui.dialogs;
-import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.Wizard;
@@ -29,27 +30,24 @@ import org.eclipse.jface.wizard.Wizard;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.VolumesClient;
import com.gluster.storage.management.core.model.Brick;
-import com.gluster.storage.management.core.model.Disk;
-import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.utils.GlusterCoreUtil;
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);
}
@@ -60,15 +58,12 @@ public class AddDiskWizard extends Wizard {
*/
@Override
public boolean performFinish() {
- List<Brick> bricks = page.getChosenBricks(volume.getName());
+ Set<Brick> bricks = page.getChosenBricks(volume.getName());
VolumesClient volumeClient = new VolumesClient();
try {
- List<String> brickList = getBrickList(bricks);
+ Set<String> brickList = getBrickList(bricks);
volumeClient.addBricks(volume.getName(), brickList);
- List<Disk> disks = page.getChosenDisks();
- volume.addDisks(GlusterCoreUtil.getQualifiedDiskNames(disks));
- volume.addBricks(bricks);
// Update model with new bricks in the volume
GlusterDataModelManager.getInstance().addBricks(volume, bricks);
@@ -82,8 +77,8 @@ public class AddDiskWizard extends Wizard {
}
}
- private List<String> getBrickList(List<Brick> bricks) {
- List<String> brickList = new ArrayList<String>();
+ private Set<String> getBrickList(Set<Brick> bricks) {
+ Set<String> brickList = new HashSet<String>();
for(Brick brick : bricks) {
brickList.add(brick.getServerName() + ":" + brick.getBrickDirectory());
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java
index fbfb52d1..db963b18 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java
@@ -19,7 +19,9 @@
package com.gluster.storage.management.gui.dialogs;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.SWT;
@@ -314,11 +316,11 @@ public class BricksSelectionPage extends Composite {
return null;
}
- public List<Brick> getChosenBricks(String volumeName) {
+ public Set<Brick> getChosenBricks(String volumeName) {
Object[] bricksArr = (Object[]) chosenBricksContentProvider.getElements(dualTableViewer);
if (bricksArr != null) {
- List<Brick> bricks = new ArrayList<Brick>();
+ Set<Brick> bricks = new HashSet<Brick>();
for (Object disk : bricksArr) {
bricks.add(new Brick(((Disk) disk).getServerName(), BRICK_STATUS.ONLINE, ((Disk) disk).getName(),
((Disk) disk).getMountPoint() + "/" + volumeName)); // Assumption mount point is not having
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.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java
index a4152899..e010ed5c 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java
@@ -18,8 +18,8 @@
*******************************************************************************/
package com.gluster.storage.management.gui.dialogs;
-import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
@@ -112,7 +112,7 @@ public class SelectDisksDialog extends Dialog {
return disksPage.getChosenDisks();
}
- public List<Brick> getSelectedBricks(String volumeName) {
+ public Set<Brick> getSelectedBricks(String volumeName) {
return disksPage.getChosenBricks(volumeName);
}
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java
index 458dcf61..8acb4a75 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java
@@ -82,7 +82,7 @@ public class NavigationView extends ViewPart implements ISelectionListener {
// Refresh the navigation tree whenever there is a change to the data model
GlusterDataModelManager.getInstance().addClusterListener(new DefaultClusterListener() {
- public void clusterChanged() {
+ public void modelChanged() {
treeViewer.refresh();
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java
index ce68e22f..8d48af76 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java
@@ -32,7 +32,10 @@ import org.eclipse.ui.IWorkbenchSite;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.DefaultClusterListener;
+import com.gluster.storage.management.core.model.Event;
import com.gluster.storage.management.core.model.TaskInfo;
+import com.gluster.storage.management.core.model.Volume;
+import com.gluster.storage.management.core.model.Event.EVENT_TYPE;
import com.gluster.storage.management.gui.TasksTableLabelProvider;
public class TasksPage extends AbstractTableViewerPage<TaskInfo> {
@@ -45,10 +48,9 @@ public class TasksPage extends AbstractTableViewerPage<TaskInfo> {
private static final String[] TASK_TABLE_COLUMN_NAMES = new String[] { "Task", "Status"};
- @SuppressWarnings("unchecked")
- public TasksPage(IWorkbenchSite site, Composite parent, int style, Object taskInfo) {
+ public TasksPage(IWorkbenchSite site, Composite parent, int style, List<TaskInfo> taskInfo) {
super(site, parent, style, false, false, taskInfo);
- this.taskInfoList = (List<TaskInfo>) taskInfo;
+ this.taskInfoList = taskInfo;
}
/* (non-Javadoc)
@@ -67,10 +69,26 @@ public class TasksPage extends AbstractTableViewerPage<TaskInfo> {
refreshViewer();
}
+ @Override
+ public void taskUpdated(TaskInfo taskInfo) {
+ refreshViewer();
+ }
+
private void refreshViewer() {
tableViewer.refresh();
parent.update();
}
+
+ @Override
+ public void volumeChanged(Volume volume, Event event) {
+ super.volumeChanged(volume, event);
+ if (event.getEventType() == EVENT_TYPE.BRICK_REPLACED) {
+ if (!tableViewer.getControl().isDisposed()) {
+ tableViewer.refresh();
+ }
+ }
+ }
+
};
}
diff --git a/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml b/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml
index 4aaa3c9b..7c20d6c7 100644
--- a/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml
+++ b/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml
@@ -30,12 +30,12 @@
<!-- Jersey REST servlet -->
<servlet>
- <servlet-name>gluster-resources</servlet-name>
+ <servlet-name>gluster-resources-1.0</servlet-name>
<!-- servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class -->
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
- <param-value>com.gluster.storage.management.server.resources</param-value>
+ <param-value>com.gluster.storage.management.server.resources.v1_0</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
@@ -44,8 +44,8 @@
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
- <servlet-name>gluster-resources</servlet-name>
- <url-pattern>/resources/*</url-pattern>
+ <servlet-name>gluster-resources-1.0</servlet-name>
+ <url-pattern>/1.0/*</url-pattern>
</servlet-mapping>
<!-- JNLP download servlet -->
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/AbstractResource.java
index feef8b3e..c28c0da0 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/AbstractResource.java
@@ -16,7 +16,7 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
-package com.gluster.storage.management.server.resources;
+package com.gluster.storage.management.server.resources.v1_0;
import java.net.URI;
import java.util.ArrayList;
@@ -158,17 +158,6 @@ public class AbstractResource {
}
/**
- * Creates an OK response without any entity in the response body.
- *
- * @param mediaType
- * Media type to be set on the response
- * @return the {@link Response} object
- */
- protected Response okResponse(String mediaType) {
- return Response.ok().type(mediaType).build();
- }
-
- /**
* Creates a streaming output response and sets the given streaming output in the response. Typically used for
* "download" requests
*
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/AbstractServersResource.java
index dd6e2804..8b4b6d99 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/AbstractServersResource.java
@@ -18,7 +18,7 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
-package com.gluster.storage.management.server.resources;
+package com.gluster.storage.management.server.resources.v1_0;
import com.gluster.storage.management.server.utils.GlusterUtil;
import com.gluster.storage.management.server.utils.ServerUtil;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/AlertsResource.java
index 3c70beec..91eeef1a 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/AlertsResource.java
@@ -1,4 +1,4 @@
-package com.gluster.storage.management.server.resources;
+package com.gluster.storage.management.server.resources.v1_0;
import static com.gluster.storage.management.core.constants.RESTConstants.*;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java
index 4c834973..431de952 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ClustersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java
@@ -16,7 +16,7 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
-package com.gluster.storage.management.server.resources;
+package com.gluster.storage.management.server.resources.v1_0;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CLUSTER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SERVER_NAME;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/DiscoveredServersResource.java
index 283ab147..cb39746c 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/DiscoveredServersResource.java
@@ -16,7 +16,7 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
-package com.gluster.storage.management.server.resources;
+package com.gluster.storage.management.server.resources.v1_0;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_SERVER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DETAILS;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java
index a9ef7fbb..619e4f55 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java
@@ -16,7 +16,7 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
-package com.gluster.storage.management.server.resources;
+package com.gluster.storage.management.server.resources.v1_0;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SERVER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME;
@@ -414,13 +414,14 @@ public class GlusterServersResource extends AbstractServersResource {
return badRequestResponse("Disk name must not be empty!");
}
- InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, diskName, serverName);
+ InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, serverName, diskName);
try {
initializeTask.start();
taskResource.addTask(initializeTask);
- return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_TASKS
- + "/" + initializeTask.getId());
- } catch (ConnectionException e) {
+
+ return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_TASKS + "/"
+ + initializeTask.getId());
+ } catch (Exception e) {
return errorResponse(e.getMessage());
}
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TasksResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java
index 53122f11..777565eb 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TasksResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java
@@ -18,7 +18,7 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
-package com.gluster.storage.management.server.resources;
+package com.gluster.storage.management.server.resources.v1_0;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPERATION;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/UsersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/UsersResource.java
index 0ccb4263..1b5e8fad 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/UsersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/UsersResource.java
@@ -16,7 +16,7 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
-package com.gluster.storage.management.server.resources;
+package com.gluster.storage.management.server.resources.v1_0;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_USER;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_USERS;
@@ -30,12 +30,14 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.encoding.PasswordEncoder;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.provisioning.JdbcUserDetailsManager;
import org.springframework.stereotype.Component;
+import com.gluster.storage.management.core.model.Status;
import com.sun.jersey.spi.resource.Singleton;
@Singleton
@@ -47,6 +49,8 @@ public class UsersResource extends AbstractResource {
@Autowired
private PasswordEncoder passwordEncoder;
+
+ private static final Logger logger = Logger.getLogger(UsersResource.class);
@Path("{" + PATH_PARAM_USER + "}")
@GET
@@ -67,8 +71,8 @@ public class UsersResource extends AbstractResource {
}
public Response getAuthenticationResponse(String user, String mediaType) {
- return (SecurityContextHolder.getContext().getAuthentication().getName().equals(user) ? okResponse(mediaType)
- : unauthorizedResponse());
+ return (SecurityContextHolder.getContext().getAuthentication().getName().equals(user) ? okResponse(
+ Status.STATUS_SUCCESS, mediaType) : unauthorizedResponse());
}
@Path("{" + PATH_PARAM_USER + "}")
@@ -78,9 +82,9 @@ public class UsersResource extends AbstractResource {
try {
jdbcUserService.changePassword(oldPassword, passwordEncoder.encodePassword(newPassword, null));
} catch (Exception ex) {
- // TODO: Log the exception
- ex.printStackTrace();
- return errorResponse("Could not change password. Error: [" + ex.getMessage() + "]");
+ String errMsg = "Could not change password. Error: [" + ex.getMessage() + "]";
+ logger.error(errMsg, ex);
+ return errorResponse(errMsg);
}
return noContentResponse();
}
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/v1_0/VolumesResource.java
index d568d519..a09b7f08 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/v1_0/VolumesResource.java
@@ -18,7 +18,7 @@
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
-package com.gluster.storage.management.server.resources;
+package com.gluster.storage.management.server.resources.v1_0;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_ACCESS_PROTOCOLS;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_AUTO_COMMIT;
@@ -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;
@@ -208,7 +208,7 @@ public class VolumesResource extends AbstractResource {
}
try {
- createVolume(clusterName, volumeName, volumeType, transportType, replicaCount, stripeCount, bricks, accessProtocols,
+ performCreateVolume(clusterName, volumeName, volumeType, transportType, replicaCount, stripeCount, bricks, accessProtocols,
options);
return createdResponse(volumeName);
} catch (Exception e) {
@@ -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();
@@ -978,7 +978,7 @@ public class VolumesResource extends AbstractResource {
return rebalanceStart(clusterName, volumeName, layout);
}
- public String rebalanceStart(String clusterName, String volumeName, String layout) {
+ private String rebalanceStart(String clusterName, String volumeName, String layout) {
RebalanceVolumeTask rebalanceTask = new RebalanceVolumeTask(clusterService, clusterName, volumeName);
rebalanceTask.setLayout(layout);
rebalanceTask.start();
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java
index 5f3f8e30..4592b759 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java
@@ -20,21 +20,26 @@
*/
package com.gluster.storage.management.server.tasks;
+import com.gluster.storage.management.core.exceptions.ConnectionException;
+import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.TaskInfo;
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 InitializeDiskTask extends Task {
private static final String INITIALIZE_DISK_SCRIPT = "initialize_disk.py";
- private static final String INITIALIZE_DISK_STATUS_SCRIPT = "initialize_disk_status.py";
private String serverName;
private String diskName;
private SshUtil sshUtil = new SshUtil();
+ private GlusterUtil glusterUtil;
public InitializeDiskTask(ClusterService clusterService, String clusterName, String serverName, String diskName) {
super(clusterService, clusterName, TASK_TYPE.DISK_FORMAT, diskName, "Initialize disk " + serverName + ":"
@@ -50,22 +55,29 @@ public class InitializeDiskTask extends Task {
@Override
public String getId() {
- return taskInfo.getType() + "-" + serverName + ":" + diskName;
+ return new String(
+ Base64.encode(getClusterName() + "-" + taskInfo.getType() + "-" + serverName + ":" + diskName));
}
@Override
public void resume() {
- getTaskInfo().setStatus( new TaskStatus( new Status(Status.STATUS_CODE_FAILURE, "Can not resume disk initialization")));
+ getTaskInfo().setStatus(
+ new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
+ "Stop/Pause/Resume is not supported in Disk Initialization")));
}
@Override
public void stop() {
- getTaskInfo().setStatus( new TaskStatus( new Status(Status.STATUS_CODE_FAILURE, "Can not stop disk initialization")));
+ getTaskInfo().setStatus(
+ new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
+ "Stop/Pause/Resume is not supported in Disk Initialization")));
}
@Override
public void pause() {
- getTaskInfo().setStatus( new TaskStatus( new Status(Status.STATUS_CODE_FAILURE, "Can not suspend disk initialization")));
+ getTaskInfo().setStatus(
+ new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
+ "Stop/Pause/Resume is not supported in Disk Initialization")));
}
@Override
@@ -85,17 +97,37 @@ public class InitializeDiskTask extends Task {
@Override
public void start() {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(sshUtil.executeRemote(getServerName(), INITIALIZE_DISK_SCRIPT + " "
- + getDiskName()))));
+ try {
+ startInitializeDisk(serverName);
+ } catch(ConnectionException e) {
+ // online server might have gone offline. update the failure status
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage())));
+ }
+ }
+
+ private void startInitializeDisk(String serverName) {
+ ProcessResult processResult = sshUtil.executeRemote(serverName, INITIALIZE_DISK_SCRIPT + " " + getDiskName());
+ if (processResult.isSuccess()) {
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
+ return;
+ }
+
+ // if we reach here, it means Initialize disk start failed.
+ throw new GlusterRuntimeException(processResult.toString());
+
}
@Override
public TaskStatus checkStatus() {
- return new TaskStatus(new Status(sshUtil.executeRemote(getServerName(), INITIALIZE_DISK_STATUS_SCRIPT + " "
- + getDiskName())));
+
+ try {
+ return glusterUtil.checkInitializeDiskStatus(serverName, getDiskName());
+ } catch(ConnectionException e) {
+ // online server might have gone offline. update the failure status
+ return new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage()));
+ }
}
-
+
public void setDiskName(String diskName) {
this.diskName = diskName;
}
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 9bdc9c94..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().matches("*pause")) { //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,84 +149,74 @@ 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 we reach here, it means rebalance start failed.
- throw new GlusterRuntimeException(processResult.toString());
+ if (processResult.getOutput().trim().matches(".*aborted successfully$")) {
+ taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
+ taskStatus.setMessage(processResult.getOutput());
+ getTaskInfo().setStatus(taskStatus);
+ }
}
-
@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) {
- String command = "gluster volume replace-brick " + getTaskInfo().getReference() + " " + getFromBrick() + " "
- + getToBrick() + " status";
- ProcessResult processResult = sshUtil.executeRemote(serverName, command);
+ if (getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_PAUSE) {
+ return getTaskInfo().getStatus();
+ }
+
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) {
commitMigration(serverName);
+ return getTaskInfo().getStatus(); // return the committed status
+ } else {
+ taskStatus.setMessage(processResult.getOutput().trim()
+ .replaceAll("Migration complete", "Commit pending"));
}
- } else if ( processResult.getOutput().trim().matches("^Number of files migrated.*Current file=.*")) {
+ } 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/tasks/RebalanceVolumeTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java
index 7f9fb6bf..f94613e0 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/RebalanceVolumeTask.java
@@ -28,33 +28,40 @@ 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 RebalanceVolumeTask extends Task {
private String layout;
+ private String serverName;
private SshUtil sshUtil = new SshUtil();
+ private GlusterUtil glusterUtil = new GlusterUtil();
public RebalanceVolumeTask(ClusterService clusterService, String clusterName, TaskInfo taskInfo) {
super(clusterService, clusterName, taskInfo);
}
public RebalanceVolumeTask(ClusterService clusterService, String clusterName, String volumeName) {
- super(clusterService, clusterName, TASK_TYPE.VOLUME_REBALANCE, volumeName, "Volume rebalance running on " + volumeName, false, true, false);
+ super(clusterService, clusterName, TASK_TYPE.VOLUME_REBALANCE, volumeName, "Volume " + volumeName
+ + " Rebalance", false, true, false);
}
@Override
public String getId() {
- return taskInfo.getType() + "-" + taskInfo.getReference();
+ return new String(Base64.encode(getClusterName() + "-" + taskInfo.getType() + "-" + taskInfo.getReference()));
}
@Override
public void start() {
try {
- startRebalance(getOnlineServer().getName());
+ serverName = getOnlineServer().getName();
+ startRebalance(serverName);
} catch(ConnectionException e) {
// online server might have gone offline. try with a new one
- startRebalance(getNewOnlineServer().getName());
+ serverName = getNewOnlineServer().getName();
+ startRebalance(serverName);
}
}
@@ -62,11 +69,10 @@ public class RebalanceVolumeTask extends Task {
String command = "gluster volume rebalance " + getTaskInfo().getReference() + " " + getLayout() + " start";
ProcessResult processResult = sshUtil.executeRemote(serverName, command);
if (processResult.isSuccess()) {
- if (processResult.getOutput().trim().matches(".*has been successful$")) {
- getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
- }
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput())));
+ return;
}
-
+
// if we reach here, it means rebalance start failed.
throw new GlusterRuntimeException(processResult.toString());
}
@@ -74,70 +80,38 @@ public class RebalanceVolumeTask extends Task {
@Override
public void resume() {
getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, "Pause/Resume is not supported in Volume Rebalance")));
+ new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
+ "Pause/Resume is not supported in Volume Rebalance")));
}
@Override
public void stop() {
try {
- stopRebalance(getOnlineServer().getName());
- } catch(ConnectionException e) {
- // online server might have gone offline. try with a new one
- stopRebalance(getNewOnlineServer().getName());
+ glusterUtil.stopRebalance(serverName, getTaskInfo().getReference());
+ } catch (ConnectionException e) {
+ // online server might have gone offline. update the failure status
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage())));
}
}
- private void stopRebalance(String serverName) {
- String command = "gluster volume rebalance " + getTaskInfo().getReference() + " stop";
- ProcessResult processResult = sshUtil.executeRemote(serverName, command);
- TaskStatus taskStatus = new TaskStatus();
- if (processResult.isSuccess()) {
- if (processResult.getOutput().trim().matches(".*has been successful$")) {
- taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- }
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- }
- taskStatus.setMessage(processResult.getOutput()); // Common
- getTaskInfo().setStatus(taskStatus);
- }
-
@Override
public void pause() {
getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, "Pause/Resume is not supported in Volume Rebalance")));
+ new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
+ "Pause/Resume is not supported in Volume Rebalance")));
}
@Override
public TaskStatus checkStatus() {
try {
- return checkRebalanceStatus(getOnlineServer().getName());
+ return glusterUtil.checkRebalanceStatus(serverName, getTaskInfo().getReference());
} catch(ConnectionException e) {
- // online server might have gone offline. try with a new one.
- return checkRebalanceStatus(getNewOnlineServer().getName());
+ // online server might have gone offline. update the failure status
+ getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage())));
+ return getTaskInfo().getStatus();
}
}
- // TODO: This method should move to glusterUtil
- private TaskStatus checkRebalanceStatus(String serverName) {
- String command = "gluster volume rebalance " + getTaskInfo().getReference() + " status";
- ProcessResult processResult = sshUtil.executeRemote(serverName, command);
- TaskStatus taskStatus = new TaskStatus();
- if (processResult.isSuccess()) {
- if (processResult.getOutput().trim().matches(".*rebalance completed$")) {
- taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
- } else {
- taskStatus.setCode(Status.STATUS_CODE_RUNNING);
- }
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- }
- taskStatus.setMessage(processResult.getOutput()); // Common
- return taskStatus;
- }
-
public void setLayout(String layout) {
this.layout = layout;
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java
index b0959445..e5b8d726 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java
@@ -30,7 +30,7 @@ import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.utils.ProcessResult;
import com.gluster.storage.management.server.data.ClusterInfo;
import com.gluster.storage.management.server.data.PersistenceDao;
-import com.gluster.storage.management.server.resources.DiscoveredServersResource;
+import com.gluster.storage.management.server.resources.v1_0.DiscoveredServersResource;
import com.gluster.storage.management.server.utils.ServerUtil;
/**
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java
index 49cd0b8b..119f6297 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/Task.java
@@ -33,14 +33,15 @@ public abstract class Task {
protected String clusterName;
private ClusterService clusterService;
- public Task(ClusterService clusterService, String clusterName, TASK_TYPE type, String reference, String desc, boolean canPause, boolean canStop, boolean canCommit) {
+ public Task(ClusterService clusterService, String clusterName, TASK_TYPE type, String reference, String desc,
+ boolean canPause, boolean canStop, boolean canCommit) {
TaskInfo taskInfo = new TaskInfo();
taskInfo.setType(type);
taskInfo.setReference(reference);
taskInfo.setDescription(desc);
- taskInfo.setCanPause(canPause);
- taskInfo.setCanStop(canStop);
- taskInfo.setCanCommit(canCommit);
+ taskInfo.setPauseSupported(canPause);
+ taskInfo.setStopSupported(canStop);
+ taskInfo.setCommitSupported(canCommit);
init(clusterService, clusterName, taskInfo);
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 788e3eab..a24e147c 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,7 @@ 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;
import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
@@ -44,9 +44,7 @@ import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE;
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.gluster.storage.management.server.resources.v1_0.TasksResource;
import com.sun.jersey.api.core.InjectParam;
@Component
@@ -69,8 +67,11 @@ public class GlusterUtil {
private static final String VOLUME_LOG_LOCATION_PFX = "log file location:";
private static final String VOLUME_TYPE_DISTRIBUTE = "Distribute";
private static final String VOLUME_TYPE_REPLICATE = "Replicate";
+ private static final String GLUSTERD_INFO_FILE = "/etc/glusterd/glusterd.info";
private static final GlusterCoreUtil glusterCoreUtil = new GlusterCoreUtil();
+
+ private static final String INITIALIZE_DISK_STATUS_SCRIPT = "initialize_disk_status.py";
@Autowired
private SshUtil sshUtil;
@@ -112,6 +113,15 @@ public class GlusterUtil {
}
return null;
}
+
+ private String getUuid(String serverName) {
+ ProcessResult result = getSshUtil().executeRemote(serverName, "cat " + GLUSTERD_INFO_FILE);
+ if (!result.isSuccess()) {
+ throw new GlusterRuntimeException("Couldn't read file [" + GLUSTERD_INFO_FILE + "]. Error: "
+ + result.toString());
+ }
+ return result.getOutput().split("=")[1];
+ }
public List<GlusterServer> getGlusterServers(GlusterServer knownServer) {
String output = getPeerStatus(knownServer.getName());
@@ -119,9 +129,11 @@ public class GlusterUtil {
return null;
}
+ knownServer.setUuid(getUuid(knownServer.getName()));
+
List<GlusterServer> glusterServers = new ArrayList<GlusterServer>();
- // TODO: Append the known server. But where? Order matters in replication/striping
glusterServers.add(knownServer);
+
GlusterServer server = null;
boolean foundHost = false;
boolean foundUuid = false;
@@ -388,26 +400,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) {
@@ -550,6 +543,64 @@ public class GlusterUtil {
throw new GlusterRuntimeException("Couldn't remove server [" + serverName + "]! Error: " + result);
}
}
+
+ public TaskStatus checkRebalanceStatus(String serverName, String volumeName) {
+ String command = "gluster volume rebalance " + volumeName + " status";
+ ProcessResult processResult = sshUtil.executeRemote(serverName, command);
+ TaskStatus taskStatus = new TaskStatus();
+ if (processResult.isSuccess()) {
+ if (processResult.getOutput().trim().matches("^rebalance completed.*")) {
+ taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
+ } else if(processResult.getOutput().trim().matches(".*in progress:.*")) {
+ taskStatus.setCode(Status.STATUS_CODE_RUNNING);
+ } else {
+ taskStatus.setCode(Status.STATUS_CODE_FAILURE);
+ }
+ } else {
+ taskStatus.setCode(Status.STATUS_CODE_FAILURE);
+ }
+ taskStatus.setMessage(processResult.getOutput()); // Common
+ return taskStatus;
+ }
+
+ public void stopRebalance(String serverName, String volumeName) {
+ String command = "gluster volume rebalance " + volumeName + " stop";
+ ProcessResult processResult = sshUtil.executeRemote(serverName, command);
+ TaskStatus taskStatus = new TaskStatus();
+ if (processResult.isSuccess()) {
+ taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
+ taskStatus.setMessage(processResult.getOutput());
+ }
+ }
+
+ public TaskStatus checkInitializeDiskStatus(String serverName, String diskName) {
+ ProcessResult processResult = sshUtil.executeRemote(serverName, INITIALIZE_DISK_STATUS_SCRIPT + " " + diskName);
+ TaskStatus taskStatus = new TaskStatus();
+ if (processResult.isSuccess()) {
+ // TODO: Message needs to change according to the script return
+ if (processResult.getOutput().trim().matches(".*Initailize completed$")) {
+ taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
+ } else {
+ // TODO: Percentage completed needs to be set, according to the script output
+ taskStatus.setCode(Status.STATUS_CODE_RUNNING);
+ // taskStatus.setPercentCompleted(processResult.getOutput());
+ }
+ } else {
+ taskStatus.setCode(Status.STATUS_CODE_FAILURE);
+ }
+ 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();
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
index ed77def3..2e78b57b 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
@@ -91,6 +91,7 @@ public class ServerUtil {
throw new GlusterRuntimeException(((Status)response).getMessage());
}
server.copyFrom((Server) response); // Update the details in <Server> object
+ server.setDisks(((Server) response).getDisks());
}
/**
diff --git a/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml b/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml
index 59714c87..c8301c7b 100644
--- a/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml
+++ b/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml
@@ -16,7 +16,7 @@
<intercept-url pattern="/*" access="permitAll" /-->
<!-- SSL Protection -->
- <intercept-url pattern="/resources/*" access="hasRole('ROLE_ADMIN')
+ <intercept-url pattern="/1.0/*" access="hasRole('ROLE_ADMIN')
and fullyAuthenticated"
requires-channel="https" />
<intercept-url pattern="/*" access="permitAll" requires-channel="any" />