diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-05-20 15:12:17 +0530 |
|---|---|---|
| committer | Dhandapani <dhandapani@gluster.com> | 2011-05-25 18:03:35 +0530 |
| commit | 5b70e0e1270ba91fef2fe28f50b1fb87cc1e9b27 (patch) | |
| tree | 169be3cab5d4f335369486eb05b73d3f7ae0373a /src/com.gluster.storage.management.client | |
| parent | b321add074a8b8413f9285bac7458a1d4ceea60c (diff) | |
| parent | dfc27f51da469160e50e20d8ff59e714b5942546 (diff) | |
Merge branch 'disk-to-brick'
Diffstat (limited to 'src/com.gluster.storage.management.client')
2 files changed, 111 insertions, 70 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 e639f615..36da2631 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 @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map.Entry; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; +import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Cluster; import com.gluster.storage.management.core.model.ClusterListener; import com.gluster.storage.management.core.model.Disk; @@ -106,7 +107,7 @@ public class GlusterDataModelManager { private void addDiscoveredServer(List<Server> servers, Entity parent, String name, int numOfCPUs, double cpuUsage, double totalMemory, double memoryInUse, double totalDiskSpace, double diskSpaceInUse) { Server server = new Server(name, parent, numOfCPUs, cpuUsage, totalMemory, memoryInUse); - server.addDisk(new Disk(server, "sda", totalDiskSpace, diskSpaceInUse, DISK_STATUS.READY)); + server.addDisk(new Disk(server, "sda", "/export/md1", totalDiskSpace, diskSpaceInUse, DISK_STATUS.READY)); addNetworkInterface(server, "eth0"); servers.add(server); @@ -172,21 +173,21 @@ public class GlusterDataModelManager { } private void initializeDisks() { - s1da = new Disk(server1, "sda", 100d, 80d, DISK_STATUS.READY); - s1db = new Disk(server1, "sdb", 100d, 67.83, DISK_STATUS.READY); + s1da = new Disk(server1, "sda", "/export/md0", 100d, 80d, DISK_STATUS.READY); + s1db = new Disk(server1, "sdb", "/export/md1", 100d, 67.83, DISK_STATUS.READY); - s2da = new Disk(server2, "sda", 200d, 157.12, DISK_STATUS.READY); - s2db = new Disk(server2, "sdb", 200d, 182.27, DISK_STATUS.READY); - s2dc = new Disk(server2, "sdc", 200d, -1d, DISK_STATUS.UNINITIALIZED); - s2dd = new Disk(server2, "sdd", 200d, 124.89, DISK_STATUS.READY); + s2da = new Disk(server2, "sda", "/export/md0", 200d, 157.12, DISK_STATUS.READY); + s2db = new Disk(server2, "sdb", "/export/md1", 200d, 182.27, DISK_STATUS.READY); + s2dc = new Disk(server2, "sdc", "/export/md0", 200d, -1d, DISK_STATUS.UNINITIALIZED); + s2dd = new Disk(server2, "sdd", "/export/md1", 200d, 124.89, DISK_STATUS.READY); // disk name unavailable since server is offline - s3da = new Disk(server3, "NA", -1d, -1d, DISK_STATUS.OFFLINE); + s3da = new Disk(server3, "NA", "NA", -1d, -1d, DISK_STATUS.OFFLINE); - s4da = new Disk(server4, "sda", 100d, 85.39, DISK_STATUS.READY); + s4da = new Disk(server4, "sda", "/export/md0", 100d, 85.39, DISK_STATUS.READY); - s5da = new Disk(server5, "sda", 100d, 92.83, DISK_STATUS.READY); - s5db = new Disk(server5, "sdb", 200d, 185.69, DISK_STATUS.READY); + s5da = new Disk(server5, "sda", "/export/md1", 100d, 92.83, DISK_STATUS.READY); + s5db = new Disk(server5, "sdb", "/export/md1", 200d, 185.69, DISK_STATUS.READY); } private void addDisksToServers() { @@ -279,11 +280,29 @@ public class GlusterDataModelManager { return logMessages; } - public Disk getVolumeDisk(String volumeDisk) { + /** + * @param serverPartition Qualified name of the disk to be returned (serverName:diskName) + * @return The disk object for given qualified name + */ + public Disk getDisk(String serverPartition) { List<Disk> allDisks = getReadyDisksOfAllServers(); - String brickInfo[] = volumeDisk.split(":"); + String diskInfo[] = serverPartition.split(":"); for (Disk disk : allDisks) { - if (disk.getServerName().equals(brickInfo[0]) && disk.getName().equals(brickInfo[1])) { + if (disk.getServerName().equals(diskInfo[0]) && disk.getName().equals(diskInfo[1])) { + return disk; + } + } + return null; + } + + /* + * @param diskName (sda) + * @return The disk object for given disk name + */ + public Disk getDiskDetails(String diskName) { + List<Disk> allDisks = getReadyDisksOfAllServers(); + for (Disk disk : allDisks) { + if (disk.getName().equals(diskName)) { return disk; } } @@ -300,14 +319,34 @@ public class GlusterDataModelManager { Disk disk = null; List<Disk> volumeDisks = new ArrayList<Disk>(); for (String volumeDisk : volume.getDisks()) { - disk = getVolumeDisk(volumeDisk); + disk = getDisk(volumeDisk); if (disk != null && disk.isReady()) { volumeDisks.add(disk); } } return volumeDisks; } - + + + public List<Brick> getOnlineBricks(Volume volume) { + List<Brick> onlineBricks = new ArrayList<Brick>(); + for(Brick brick : volume.getBricks()) { + if (isOnlineDisk(brick.getDiskName())) { + onlineBricks.add(brick); + } + } + return onlineBricks; + } + + public boolean isOnlineDisk(String diskName) { + for( Disk disk : getReadyDisksOfAllServers() ) { + if (disk.getName().equals(diskName) && disk.isReady()) { + return true; + } + } + return false; + } + public List<Disk> getReadyDisksOfAllVolumes() { List<Disk> disks = new ArrayList<Disk>(); for (Volume volume : model.getCluster().getVolumes()) { @@ -424,6 +463,15 @@ public class GlusterDataModelManager { volume.setAccessControlList(accessControlList); setVolumeOption(volume, getOptionEntry(volume, Volume.OPTION_AUTH_ALLOW)); } + + public Server getGlusterServer(String serverName) { + for(Server server : model.getCluster().getServers() ) { + if (server.getName().equals(serverName)) { + return server; + } + } + return null; + } private Entry<String, String> getOptionEntry(Volume volume, String optionKey) { for (Entry entry : volume.getOptions().entrySet()) { 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 c0ce8620..0555e322 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 @@ -20,7 +20,6 @@ */ package com.gluster.storage.management.client; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -29,11 +28,9 @@ import javax.ws.rs.core.MultivaluedMap; import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.constants.GlusterConstants; import com.gluster.storage.management.core.constants.RESTConstants; -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.Brick; 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_TYPE; import com.gluster.storage.management.core.response.LogMessageListResponse; import com.gluster.storage.management.core.response.VolumeListResponse; import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse; @@ -92,7 +89,7 @@ public class VolumesClient extends AbstractClient { } public Status deleteVolume(Volume volume, boolean deleteOption) { - MultivaluedMap<String, String> queryParams = prepareGetDeleteVolumeQueryParams(volume.getName(), deleteOption); + MultivaluedMap<String, String> queryParams = prepareDeleteVolumeQueryParams(volume.getName(), deleteOption); return (Status) deleteSubResource(volume.getName(), Status.class, queryParams); } @@ -100,17 +97,11 @@ public class VolumesClient extends AbstractClient { return ((VolumeOptionInfoListResponse) fetchSubResource(RESTConstants.SUBRESOURCE_DEFAULT_OPTIONS, VolumeOptionInfoListResponse.class)); } - - public Status addDisks(String volumeName, List<Disk> diskList) { - String disks = StringUtil.ListToString( GlusterCoreUtil.getQualifiedDiskNames(diskList), ","); - Form form = new Form(); - form.add(RESTConstants.QUERY_PARAM_DISKS, disks); - return (Status) postRequest(volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); - } - public Status addDisks(String volumeName, String disks) { + public Status addBricks(String volumeName, List<String> brickList) { + String bricks = StringUtil.ListToString(brickList, ","); Form form = new Form(); - form.add(RESTConstants.QUERY_PARAM_DISKS, disks); + form.add(RESTConstants.FORM_PARAM_BRICKS, bricks); return (Status) postRequest(volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); } @@ -133,51 +124,54 @@ public class VolumesClient extends AbstractClient { * Number of most recent log messages to be fetched (from each disk) * @return Log Message List response received from the Gluster Management Server. */ - public LogMessageListResponse getLogs(String volumeName, String diskName, String severity, Date fromTimestamp, Date toTimestamp, int messageCount) { + public LogMessageListResponse getLogs(String volumeName, String diskName, String severity, Date fromTimestamp, + Date toTimestamp, int messageCount) { MultivaluedMap<String, String> queryParams = prepareGetLogQueryParams(diskName, severity, fromTimestamp, toTimestamp, messageCount); return (LogMessageListResponse) fetchSubResource(volumeName + "/" + RESTConstants.SUBRESOURCE_LOGS, queryParams, LogMessageListResponse.class); } - + public void downloadLogs(String volumeName, String filePath) { - downloadSubResource((volumeName) + "/" + RESTConstants.SUBRESOURCE_LOGS + "/" + RESTConstants.SUBRESOURCE_DOWNLOAD, filePath); + downloadSubResource((volumeName) + "/" + RESTConstants.SUBRESOURCE_LOGS + "/" + + RESTConstants.SUBRESOURCE_DOWNLOAD, filePath); } - - public Status removeBricks(String volumeName, List<Disk> diskList, boolean deleteOption) { - String disks = StringUtil.ListToString( GlusterCoreUtil.getQualifiedDiskNames(diskList), ","); - MultivaluedMap<String, String> queryParams = prepareGetRemoveBrickQueryParams(volumeName, disks, deleteOption); + + public Status removeBricks(String volumeName, List<Brick> BrickList, boolean deleteOption) { + String bricks = StringUtil.ListToString(GlusterCoreUtil.getQualifiedBrickList(BrickList), ","); + MultivaluedMap<String, String> queryParams = prepareRemoveBrickQueryParams(volumeName, bricks, deleteOption); return (Status) deleteSubResource(volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, queryParams); } - - private MultivaluedMap<String, String> prepareGetRemoveBrickQueryParams(String volumeName, String disks, boolean deleteOption) { + + private MultivaluedMap<String, String> prepareRemoveBrickQueryParams(String volumeName, String bricks, + boolean deleteOption) { MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); queryParams.add(RESTConstants.QUERY_PARAM_VOLUME_NAME, volumeName); - queryParams.add(RESTConstants.QUERY_PARAM_DISKS, disks); + queryParams.add(RESTConstants.QUERY_PARAM_BRICKS, bricks); queryParams.add(RESTConstants.QUERY_PARAM_DELETE_OPTION, "" + deleteOption); return queryParams; } - private MultivaluedMap<String, String> prepareGetDeleteVolumeQueryParams(String volumeName, boolean deleteOption) { + private MultivaluedMap<String, String> prepareDeleteVolumeQueryParams(String volumeName, boolean deleteOption) { MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); queryParams.add(RESTConstants.QUERY_PARAM_VOLUME_NAME, volumeName); queryParams.add(RESTConstants.QUERY_PARAM_DELETE_OPTION, "" + deleteOption); return queryParams; } - + private MultivaluedMap<String, String> prepareGetLogQueryParams(String diskName, String severity, Date fromTimestamp, Date toTimestamp, int messageCount) { MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); queryParams.add(RESTConstants.QUERY_PARAM_LINE_COUNT, "" + messageCount); - if(!diskName.equals(CoreConstants.ALL)) { + if (!diskName.equals(CoreConstants.ALL)) { queryParams.add(RESTConstants.QUERY_PARAM_DISK_NAME, diskName); } - + if (!severity.equals(CoreConstants.ALL)) { queryParams.add(RESTConstants.QUERY_PARAM_LOG_SEVERITY, severity); } - + if (fromTimestamp != null) { queryParams.add(RESTConstants.QUERY_PARAM_FROM_TIMESTAMP, DateUtil.dateToString(fromTimestamp, CoreConstants.DATE_WITH_TIME_FORMAT)); @@ -190,43 +184,42 @@ public class VolumesClient extends AbstractClient { return queryParams; } - public Status startMigration( String volumeName, String diskFrom, String diskTo) { + public Status startMigration(String volumeName, String brickFrom, String brickTo) { Form form = new Form(); - form.add(RESTConstants.FORM_PARAM_VALUE_SOURCE, diskFrom); - form.add(RESTConstants.FORM_PARAM_VALUE_TARGET, diskTo); + form.add(RESTConstants.FORM_PARAM_SOURCE, brickFrom); + form.add(RESTConstants.FORM_PARAM_TARGET, brickTo); form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.FORM_PARAM_VALUE_START); - - return (Status) putRequest( volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); + + return (Status) putRequest(volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); } - - public Status stopMigration(String volumeName, String diskFrom, String diskTo) { + + public Status stopMigration(String volumeName, String brickFrom, String brickkTo) { Form form = new Form(); - form.add(RESTConstants.FORM_PARAM_VALUE_SOURCE, diskFrom); - form.add(RESTConstants.FORM_PARAM_VALUE_TARGET, diskTo); + form.add(RESTConstants.FORM_PARAM_SOURCE, brickFrom); + form.add(RESTConstants.FORM_PARAM_TARGET, brickkTo); form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.FORM_PARAM_VALUE_STOP); - - return (Status) putRequest( volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); + + return (Status) putRequest(volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); } - - public Status pauseMigration(String volumeName, String diskFrom, String diskTo) { + + public Status pauseMigration(String volumeName, String brickFrom, String brickTo) { Form form = new Form(); - form.add(RESTConstants.FORM_PARAM_VALUE_SOURCE, diskFrom); - form.add(RESTConstants.FORM_PARAM_VALUE_TARGET, diskTo); + form.add(RESTConstants.FORM_PARAM_SOURCE, brickFrom); + form.add(RESTConstants.FORM_PARAM_TARGET, brickTo); form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.FORM_PARAM_VALUE_PAUSE); - - return (Status) putRequest( volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); + + return (Status) putRequest(volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); } - - public Status statusMigration(String volumeName, String diskFrom, String diskTo) { + + public Status statusMigration(String volumeName, String brickFrom, String brickTo) { Form form = new Form(); - form.add(RESTConstants.FORM_PARAM_VALUE_SOURCE, diskFrom); - form.add(RESTConstants.FORM_PARAM_VALUE_TARGET, diskTo); + form.add(RESTConstants.FORM_PARAM_SOURCE, brickFrom); + form.add(RESTConstants.FORM_PARAM_TARGET, brickTo); form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.FORM_PARAM_VALUE_STATUS); - - return (Status) putRequest( volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); + + return (Status) putRequest(volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); } - - + public static void main(String[] args) { UsersClient usersClient = new UsersClient(); if (usersClient.authenticate("gluster", "gluster").isSuccess()) { |
