diff options
22 files changed, 370 insertions, 265 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 41d76e58..0051d427 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() { @@ -307,7 +308,27 @@ public class GlusterDataModelManager { } 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()) { 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..b407296e 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 @@ -92,7 +92,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 = prepareGetDeleteVolumeQueryParams(volume.getName(), deleteOption); return (Status) deleteSubResource(volume.getName(), Status.class, queryParams); } @@ -100,17 +100,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 addDisks(String volumeName, List<String> brickList) { + String bricks = StringUtil.ListToString(brickList, ","); Form form = new Form(); - form.add(RESTConstants.QUERY_PARAM_DISKS, disks); + form.add(RESTConstants.QUERY_PARAM_DISKS, bricks); return (Status) postRequest(volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); } @@ -133,25 +127,28 @@ 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), ","); + String disks = StringUtil.ListToString(GlusterCoreUtil.getQualifiedBrickNames(diskList), ","); MultivaluedMap<String, String> queryParams = prepareGetRemoveBrickQueryParams(volumeName, disks, 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> prepareGetRemoveBrickQueryParams(String volumeName, String disks, + boolean deleteOption) { MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); queryParams.add(RESTConstants.QUERY_PARAM_VOLUME_NAME, volumeName); queryParams.add(RESTConstants.QUERY_PARAM_DISKS, disks); @@ -165,19 +162,19 @@ public class VolumesClient extends AbstractClient { 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 +187,42 @@ public class VolumesClient extends AbstractClient { return queryParams; } - public Status startMigration( String volumeName, String diskFrom, String diskTo) { + public Status startMigration(String volumeName, String diskFrom, String diskTo) { 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_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) { 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_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) { 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_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) { 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_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()) { 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 new file mode 100644 index 00000000..144eefb2 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * 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 + * 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, + * 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.core.model; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Bricks") +public class Brick { + + private String serverName; + private String diskName; + private String brickDirectory; + + public Brick() { + } + + public Brick(String serverName, String diskName, String brickDirectory) { + this.serverName = serverName; + this.diskName = diskName; + this.brickDirectory = brickDirectory; + } + + public void setServerName(String serverName) { + this.serverName = serverName; + } + + public String getServerName() { + return serverName; + } + + public void setBrickDirectory(String brickDirectory) { + this.brickDirectory = brickDirectory; + } + + public String getBrickDirectory() { + return brickDirectory; + } + + public void setDiskName(String diskName) { + this.diskName = diskName; + } + + public String getDiskName() { + return diskName; + } + + public String getQualifiedBrickName() { + return serverName + ":" + brickDirectory; + } +} 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 9924d596..dfb4e57e 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 @@ -19,7 +19,6 @@ 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; @@ -32,6 +31,7 @@ public class Disk extends Entity { private String[] DISK_STATUS_STR = { "Ready", "Uninitialized", "Initializing", "Offline" }; private String serverName; + private String mountPoint; private Double space; private Double spaceInUse; private DISK_STATUS status; @@ -88,9 +88,18 @@ public class Disk extends Entity { this.serverName = serverName; } - public Disk(Server server, String name, Double space, Double spaceInUse, DISK_STATUS status) { + public void setMountPoint(String mountPoint) { + this.mountPoint = mountPoint; + } + + public String getMountPoint() { + return mountPoint; + } + + public Disk(Server server, String name, String mountPoint, Double space, Double spaceInUse, DISK_STATUS status) { super(name, server); setServerName(server != null ? server.getName() : ""); + setMountPoint(mountPoint); setSpace(space); setSpaceInUse(spaceInUse); setStatus(status); @@ -104,4 +113,8 @@ public class Disk extends Entity { public String getQualifiedName() { return getServerName() + ":" + getName(); } + + public String getQualifiedBrickName() { + return getServerName() + ":" + getMountPoint(); + } } 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 09137014..979fe260 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 @@ -73,7 +73,7 @@ public class GlusterDummyModel { 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/md0", totalDiskSpace, diskSpaceInUse, DISK_STATUS.READY)); addNetworkInterface(server, "eth0"); servers.add(server); @@ -140,20 +140,21 @@ public class GlusterDummyModel { } 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); - s3da = new Disk(server3, "NA", -1d, -1d, DISK_STATUS.OFFLINE); // disk name unavailable since server is offline + // disk name unavailable since server is offline + s3da = new Disk(server3, "NA", "NA", -1d, -1d, DISK_STATUS.OFFLINE); // disk name unavailable since server is 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() { 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 41ed5a25..1326e14c 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 @@ -71,7 +71,7 @@ public class Volume extends Entity { private double totalDiskSpace = 0; private List<String> disks = new ArrayList<String>(); - private List<String> bricks = new ArrayList<String>(); + private List<Brick> bricks = new ArrayList<Brick>(); public Volume() { } @@ -225,15 +225,25 @@ public class Volume extends Entity { totalDiskSpace = 0; } - public void addBrick(String brick) { + public void addBrick(Brick brick) { bricks.add(brick); } - public void removeBrick(String brick) { + public void addBricks(List<Brick> bricks) { + bricks.addAll(bricks); + } + + + public void setBricks(List<Brick> bricks) { + this.bricks.clear(); + this.bricks.addAll(bricks); + } + + public void removeBrick(Brick brick) { bricks.remove(brick); } - public List<String> getBricks() { + public List<Brick> getBricks() { return bricks; } 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 9e3084fb..c18c53c0 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 @@ -23,6 +23,7 @@ package com.gluster.storage.management.core.utils; import java.util.ArrayList; import java.util.List; +import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Disk; @@ -35,4 +36,21 @@ public class GlusterCoreUtil { } return qualifiedDiskNames; } + + // Convert from Disk list to Qualified bricks list + public static final List<String> getQualifiedBrickNames(List<Disk> diskList) { + List<String> qualifiedBrickNames = new ArrayList<String>(); + for (Disk disk : diskList) { + qualifiedBrickNames.add(disk.getQualifiedBrickName()); + } + return qualifiedBrickNames; + } + + public List<String> getQualifiedBrickList(List<Brick> bricks) { + List<String> qualifiedBricks = new ArrayList<String>(); + for (Brick brick : bricks) { + qualifiedBricks.add(brick.getQualifiedBrickName()); + } + return qualifiedBricks; + } } diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml index 6c6983a3..0c6fc60e 100644 --- a/src/com.gluster.storage.management.gui/plugin.xml +++ b/src/com.gluster.storage.management.gui/plugin.xml @@ -109,7 +109,7 @@ class="com.gluster.storage.management.gui.views.VolumeDisksView" icon="icons/disks.png" id="com.gluster.storage.management.gui.views.VolumeDisksView" - name="Disks (Volume)" + name="Bricks" restorable="true"> </view> <view @@ -247,20 +247,20 @@ </command> <command categoryId="com.gluster.storage.management.gui.category" - description="Migrate Disk" + description="Migrate Brick" id="com.gluster.storage.management.gui.commands.MigrateDisk" - name="Migrate Disk"> + name="Migrate Brick"> </command> <command categoryId="com.gluster.storage.management.gui.category" - description="Remove Disk" + description="Remove Brick" id="com.gluster.storage.management.gui.commands.RemoveDisk" - name="Remove Disk"> + name="Remove Brick"> </command> <command - description="Add Disk" + description="Add Brick" id="com.gluster.storage.management.gui.commands.AddDisk" - name="Add Disk"> + name="Add Brick"> </command> </extension> <extension @@ -493,7 +493,7 @@ definitionId="com.gluster.storage.management.gui.commands.MigrateDisk" icon="icons/disk-migrate.png" id="com.gluster.storage.management.gui.actions.MigrateDiskAction" - label="&Migrate Disk" + label="&Migrate Brick" menubarPath="com.gluster.storage.management.gui.menu.glusterserver/glusterserver" mode="FORCE_TEXT" pulldown="false" @@ -610,7 +610,7 @@ definitionId="com.gluster.storage.management.gui.commands.RemoveDisk" icon="icons/disk.png" id="com.gluster.storage.management.gui.actions.RemoveDiskAction" - label="Remove Disk" + label="Remove Brick" menubarPath="com.gluster.storage.management.gui.menu.volume/volume" mode="FORCE_TEXT" pulldown="false" @@ -618,7 +618,7 @@ state="false" style="push" toolbarPath="Normal" - tooltip="Remove Disk from Volume"> + tooltip="Remove Brick from Volume"> </action> <action allowLabelUpdate="false" @@ -626,7 +626,7 @@ definitionId="com.gluster.storage.management.gui.commands.AddDisk" icon="icons/disk.png" id="com.gluster.storage.management.gui.actions.AddDiskAction" - label="&Add Disk" + label="&Add Brick" menubarPath="com.gluster.storage.management.gui.menu.volume/volume" mode="FORCE_TEXT" pulldown="false" @@ -634,7 +634,7 @@ state="false" style="push" toolbarPath="Normal" - tooltip="Add Disk to Volume"> + tooltip="Add Brick to Volume"> </action> <menu id="com.gluster.storage.management.gui.menu.volume" diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java index 92553797..9b258be1 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java @@ -80,7 +80,7 @@ public class DiskTableLabelProvider extends TableLabelProviderAdapter { Disk disk = (Disk) element; return (columnIndex == DISK_TABLE_COLUMN_INDICES.SERVER.ordinal() ? disk.getServerName() - : columnIndex == DISK_TABLE_COLUMN_INDICES.DISK.ordinal() ? disk.getName() + : columnIndex == DISK_TABLE_COLUMN_INDICES.DISK.ordinal() ? disk.getMountPoint() : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE.ordinal() ? getDiskSpace(disk) : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE_IN_USE.ordinal() ? getDiskSpaceInUse(disk) : columnIndex == DISK_TABLE_COLUMN_INDICES.STATUS.ordinal() ? disk.getStatusStr() : "Invalid"); 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/RemoveDiskAction.java index 47ef9e73..71175615 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/RemoveDiskAction.java @@ -28,10 +28,10 @@ public class RemoveDiskAction extends AbstractActionDelegate { @Override protected void performAction(IAction action) { final String actionDesc = action.getDescription(); - Integer deleteOption = new MessageDialog(getShell(), "Remove Disk(s)", GUIHelper.getInstance().getImage( - IImageKeys.VOLUME), "Are you sure you want to remove disks from volume [" + volume.getName() - + "] ?", MessageDialog.QUESTION, new String[] { "Cancel", "Remove disks, delete data", - "Remove disks, keep data" }, 2).open(); + Integer deleteOption = new MessageDialog(getShell(), "Remove Bricks(s)", GUIHelper.getInstance().getImage( + IImageKeys.VOLUME), "Are you sure you want to remove bricks from volume [" + volume.getName() + + "] ?", MessageDialog.QUESTION, new String[] { "Cancel", "Remove bricks, delete data", + "Remove bricks, keep data" }, 2).open(); if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1) return; } @@ -45,10 +45,10 @@ public class RemoveDiskAction extends AbstractActionDelegate { Status status = client.removeBricks(volume.getName(), disks, confirmDelete); if (status.isSuccess()) { - showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] disk(s) removed successfully!"); + showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] bricks(s) removed successfully!"); modelManager.deleteVolume(volume); } else { - showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] disk(s) could not be removed! Error: [" + showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] bricks(s) could not be removed! Error: [" + status + "]"); } } 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/AddDiskPage.java index 7eb107c0..6e123d55 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/AddDiskPage.java @@ -28,6 +28,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; @@ -53,20 +54,20 @@ public class AddDiskPage extends WizardPage { protected AddDiskPage(Volume volume) { super(PAGE_NAME); this.volume = volume; - setTitle("Add Disk"); + setTitle("Add Brick"); - String description = "Add disks to the Volume by choosing disks from the cluster servers.\n"; + String description = "Add bricks to the Volume by choosing bricks from the cluster servers.\n"; if ( volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_MIRROR) { - description += "(Disk selection should be multiples of " + volume.getReplicaCount() + ")"; + description += "(Brick selection should be multiples of " + volume.getReplicaCount() + ")"; } else if (volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_STRIPE) { - description += "(Disk selection should be multiples of " + volume.getStripeCount() + ")"; + description += "(Brick selection should be multiples of " + volume.getStripeCount() + ")"; } setDescription(description); availableDisks = getAvailableDisks(volume); setPageComplete(false); - setErrorMessage("Please select disks to be added to the volume."); + setErrorMessage("Please select bricks to be added to the volume. [" + volume.getName() +"]"); } @@ -94,6 +95,10 @@ public class AddDiskPage extends WizardPage { return page.getChosenDisks(); } + public List<Brick> getChosenBricks( String volumeName ) { + return page.getChosenBricks(volumeName); + } + private boolean isValidDiskSelection(int diskCount) { if ( diskCount == 0) { return false; @@ -138,11 +143,11 @@ public class AddDiskPage extends WizardPage { private void setError() { String errorMessage = null; if ( volume.getVolumeType() == VOLUME_TYPE.PLAIN_DISTRIBUTE) { - errorMessage = "Please select at least one disk!"; + errorMessage = "Please select at least one brick!"; } else if( volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_MIRROR) { - errorMessage = "Please select disks in multiples of " + volume.getReplicaCount(); + errorMessage = "Please select bricks in multiples of " + volume.getReplicaCount(); } else { - errorMessage = "Please select disks in multiples of " + volume.getStripeCount(); + errorMessage = "Please select bricks in multiples of " + volume.getStripeCount(); } setPageComplete(false); 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/AddDiskWizard.java index e9608e38..0be31598 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/AddDiskWizard.java @@ -20,7 +20,7 @@ */ package com.gluster.storage.management.gui.dialogs; - +import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; @@ -28,11 +28,12 @@ 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; /** * @@ -41,9 +42,8 @@ public class AddDiskWizard extends Wizard { private AddDiskPage page; private Volume volume; - public AddDiskWizard(Volume volume) { - setWindowTitle("Gluster Management Console - Add disk"); + setWindowTitle("Gluster Management Console - Add Brick"); setHelpAvailable(false); // TODO: Introduce wizard help this.volume = volume; } @@ -53,7 +53,6 @@ public class AddDiskWizard extends Wizard { addPage(page); } - /* * (non-Javadoc) * @@ -61,25 +60,36 @@ public class AddDiskWizard extends Wizard { */ @Override public boolean performFinish() { - List<Disk> disks = page.getChosenDisks(); + List<Brick> bricks = page.getChosenBricks(volume.getName()); VolumesClient volumeClient = new VolumesClient(GlusterDataModelManager.getInstance().getSecurityToken()); try { - Status status = volumeClient.addDisks(volume.getName(), disks); + List<String> brickList = getBrickList(bricks); + Status status = volumeClient.addDisks(volume.getName(), brickList); if (!status.isSuccess()) { - MessageDialog.openError(getShell(), "Add disk(s) to Volume", status.getMessage()); + MessageDialog.openError(getShell(), "Add brick(s) to Volume", status.getMessage()); return status.isSuccess(); } else { + List<Disk> disks = page.getChosenDisks(); volume.addDisks(GlusterCoreUtil.getQualifiedDiskNames(disks)); - MessageDialog.openInformation(getShell(), "Add disk(s) to Volume", "Disk(s) are successfully added to " - + volume.getName()); + volume.addBricks(bricks); + MessageDialog.openInformation(getShell(), "Add brick(s) to Volume", "Volume [" + volume.getName() + + "] is expanded with bricks [" + StringUtil.ListToString(brickList, ", ") + "]"); return status.isSuccess(); } } catch (Exception e) { - MessageDialog.openError(getShell(), "Add disk(s) to Volume", e.getMessage()); + MessageDialog.openError(getShell(), "Add brick(s) to Volume", e.getMessage()); return false; } } + private List<String> getBrickList(List<Brick> bricks) { + List<String> brickList = new ArrayList<String>(); + for(Brick brick : bricks) { + brickList.add(brick.getServerName() + ":" + brick.getBrickDirectory()); + } + return brickList; + } + /* * (non-Javadoc) * diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java index c105fa5a..9b2bb8bc 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java @@ -71,7 +71,7 @@ public class CreateVolumePage1 extends WizardPage { public CreateVolumePage1() { super(PAGE_NAME); setTitle("Create Volume"); - setDescription("Create a new Volume by choosing disks from the cluster servers and configuring the volume properties."); + setDescription("Create a new Volume by choosing bricks from the cluster servers and configuring the volume properties."); // by default, we create volume with all available disks allDisks = GlusterDataModelManager.getInstance().getReadyDisksOfAllServers(); @@ -183,7 +183,7 @@ public class CreateVolumePage1 extends WizardPage { private void createDisksCustomizeLink(Composite container) { linkCustomize = new Link(container, SWT.UNDERLINE_LINK); - linkCustomize.setText("All Disk(s) (<a>customize</a>)"); + linkCustomize.setText("All Brick(s) (<a>customize</a>)"); linkCustomize.addListener (SWT.Selection, new Listener () { public void handleEvent(Event event) { Display.getDefault().asyncExec(new Runnable() { @@ -195,8 +195,8 @@ public class CreateVolumePage1 extends WizardPage { dialog.create(); if(dialog.open() == Window.OK) { // user has customized disks. get them from the dialog box. - volume.setDisks(dialog.getSelectedBricks()); - linkCustomize.setText("" + volume.getDisks().size() + " Disk(s) (<a>customize</a>)"); + volume.setBricks(dialog.getSelectedBricks(volume.getName())); + linkCustomize.setText("" + volume.getDisks().size() + " Brick(s) (<a>customize</a>)"); validateForm(); } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/DisksSelectionPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/DisksSelectionPage.java index e50e81a7..f86ad8f0 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/DisksSelectionPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/DisksSelectionPage.java @@ -35,6 +35,7 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; +import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.utils.NumberUtil; import com.gluster.storage.management.gui.IImageKeys; @@ -52,7 +53,7 @@ public class DisksSelectionPage extends Composite { SERVER, DISK, SPACE, SPACE_USED } - private static final String[] DISK_TABLE_COLUMNS_NAMES = { "Server", "Disk", "Space (GB)", "Used Space (GB)" }; + private static final String[] DISK_TABLE_COLUMNS_NAMES = { "Server", "Mount Point", "Space (GB)", "Used Space (GB)" }; private GUIHelper guiHelper = GUIHelper.getInstance(); private CustomTableDualListComposite<Disk> dualTableViewer; @@ -89,7 +90,7 @@ public class DisksSelectionPage extends Composite { Disk disk = (Disk) element; return (columnIndex == DISK_TABLE_COLUMN_INDICES.SERVER.ordinal() ? disk.getServerName() - : columnIndex == DISK_TABLE_COLUMN_INDICES.DISK.ordinal() ? disk.getName() + : columnIndex == DISK_TABLE_COLUMN_INDICES.DISK.ordinal() ? disk.getMountPoint() : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE.ordinal() ? NumberUtil .formatNumber(disk.getSpace()) : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE_USED.ordinal() ? NumberUtil @@ -308,14 +309,15 @@ public class DisksSelectionPage extends Composite { return null; } - public List<String> getChosenBricks() { - Object[] disksArr = (Object[]) chosenDisksContentProvider.getElements(dualTableViewer); - if (disksArr != null) { - List<String> disks = new ArrayList<String>(); - for (Object disk : disksArr) { - disks.add( ((Disk)disk).getServerName() + ":" + ((Disk)disk).getName() ); // Format: Server:disk + public List<Brick> getChosenBricks(String volumeName) { + Object[] bricksArr = (Object[]) chosenDisksContentProvider.getElements(dualTableViewer); + + if (bricksArr != null) { + List<Brick> bricks = new ArrayList<Brick>(); + for (Object disk : bricksArr) { + bricks.add( new Brick( ((Disk) disk).getServerName(), ((Disk) disk).getName(), ((Disk) disk).getMountPoint() + "/" + volumeName)); // Assume mount point is not having trailing "/" } - return disks; + return bricks; } return null; } 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/MigrateDiskPage1.java index 24f0fe5b..63223eb4 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/MigrateDiskPage1.java @@ -116,7 +116,7 @@ public class MigrateDiskPage1 extends WizardPage { super(PAGE_NAME); this.volume = volume; this.fromDisk = disk; - setTitle("Migrate Disk [" + volume.getName() + "]"); + setTitle("Migrate Brick [" + volume.getName() + "]"); // setDescription("Migrate data from one disk to another for the chosen Volume. " + // "This will copy all data present in the \"from disk\" of the volume " + // "to \"to disk\", remove \"from disk\" from the volume, and " + @@ -127,10 +127,10 @@ public class MigrateDiskPage1 extends WizardPage { private void setPageDescription(String source, String target) { if (source == null || source == "") { - source = "From Disk"; + source = "From Brick"; } if (target == null || target == "") { - target = "To Disk"; + target = "To Brick"; } setDescription("Migrate volume data from \"" + source + "\" to \"" + target + "\""); } @@ -186,10 +186,10 @@ public class MigrateDiskPage1 extends WizardPage { //labelLayoutData.verticalIndent = 10; Label lblFromDisk = new Label(container, SWT.NONE); - lblFromDisk.setText("From Disk:"); + lblFromDisk.setText("From Brick:"); lblFromDisk.setLayoutData(labelLayoutData); Label lblToDisk = new Label(container, SWT.NONE); - lblToDisk.setText("To Disk:"); + lblToDisk.setText("To Brick:"); lblToDisk.setLayoutData(labelLayoutData); Text txtFilterFrom = guiHelper.createFilterText(container); 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 08a35357..20d7d4aa 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 @@ -32,6 +32,7 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; +import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Disk; public class SelectDisksDialog extends Dialog { @@ -78,7 +79,7 @@ public class SelectDisksDialog extends Dialog { GridData containerLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true); container.setLayoutData(containerLayoutData); - getShell().setText("Create Volume - Select Disks"); + getShell().setText("Create Volume - Select Bricks"); disksPage = new DisksSelectionPage(container, SWT.NONE, allDisks, selectedDisks); @@ -112,7 +113,7 @@ public class SelectDisksDialog extends Dialog { @Override protected void okPressed() { if (this.getSelectedDisks().size() == 0) { - MessageDialog.openError(getShell(), "Select Disk(s)", "Please select atlease one disk"); + MessageDialog.openError(getShell(), "Select Brick(s)", "Please select atlease one brick"); } else { super.okPressed(); } @@ -122,7 +123,7 @@ public class SelectDisksDialog extends Dialog { return disksPage.getChosenDisks(); } - public List<String> getSelectedBricks() { - return disksPage.getChosenBricks(); + public List<Brick> getSelectedBricks(String volumeName) { + return disksPage.getChosenBricks(volumeName); } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/DisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/DisksPage.java index 9ea962de..40b45044 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/DisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/DisksPage.java @@ -36,7 +36,7 @@ public class DisksPage extends AbstractDisksPage { SERVER, DISK, SPACE, SPACE_IN_USE, STATUS }; - private static final String[] DISK_TABLE_COLUMN_NAMES = new String[] { "Server", "Disk", "Space (GB)", + private static final String[] DISK_TABLE_COLUMN_NAMES = new String[] { "Server", "Bricks Directory", "Space (GB)", "Space in Use (GB)", "Status" }; public DisksPage(final Composite parent, int style, IWorkbenchSite site, List<Disk> disks) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumeLogsPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumeLogsPage.java index df9f8533..867a7a62 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumeLogsPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/VolumeLogsPage.java @@ -55,6 +55,7 @@ import com.gluster.storage.management.core.model.LogMessage; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.response.LogMessageListResponse; +import com.gluster.storage.management.core.utils.GlusterCoreUtil; import com.gluster.storage.management.gui.VolumeLogTableLabelProvider; import com.gluster.storage.management.gui.utils.GUIHelper; @@ -65,7 +66,7 @@ public class VolumeLogsPage extends Composite { private Text filterText; private Text lineCountText; private Volume volume; - + public enum LOG_TABLE_COLUMN_INDICES { DATE, TIME, DISK, SEVERITY, MESSAGE }; @@ -83,14 +84,16 @@ public class VolumeLogsPage extends Composite { /** * Create the volume logs page + * * @param parent * @param style - * @param volume Volume for which the logs page is to be created + * @param volume + * Volume for which the logs page is to be created */ public VolumeLogsPage(Composite parent, int style, Volume volume) { super(parent, style); this.volume = volume; - + addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { toolkit.dispose(); @@ -98,35 +101,35 @@ public class VolumeLogsPage extends Composite { }); toolkit.adapt(this); toolkit.paintBordersFor(this); - + configureLayout(); - + Composite composite = toolkit.createComposite(this, SWT.NONE); toolkit.paintBordersFor(composite); - + createLineCountLabel(composite); createLineCountText(composite); - + createDiskLabel(composite); createDisksCombo(composite); - + createSeverityLabel(composite); createSeverityCombo(composite); - + createFromDateLabel(composite); createFromDateField(composite); createFromTimeField(composite); createFromCheckbox(composite); - + createToDateLabel(composite); createToDateField(composite); createToTimeField(composite); createToCheckbox(composite); - + createSearchButton(composite); - + createSeparator(composite); - + createFilterLabel(composite); createFilterText(composite); @@ -135,7 +138,7 @@ public class VolumeLogsPage extends Composite { private void createLogTableViewer() { Composite tableViewerComposite = createTableViewerComposite(); - + tableViewer = new TableViewer(tableViewerComposite, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI); tableViewer.setLabelProvider(new VolumeLogTableLabelProvider()); tableViewer.setContentProvider(new ArrayContentProvider()); @@ -169,23 +172,23 @@ public class VolumeLogsPage extends Composite { Date fromTimestamp = null; Date toTimestamp = null; - - if(fromCheckbox.getSelection()) { + + if (fromCheckbox.getSelection()) { fromTimestamp = extractTimestamp(fromDate, fromTime); } - - if(toCheckbox.getSelection()) { + + if (toCheckbox.getSelection()) { toTimestamp = extractTimestamp(toDate, toTime); } - + if (!validateTimeRange(fromTimestamp, toTimestamp)) { return; } - + LogMessageListResponse response = client.getLogs(volume.getName(), disksCombo.getText(), severityCombo.getText(), fromTimestamp, toTimestamp, Integer.parseInt(lineCountText.getText())); Status status = response.getStatus(); - if(status.isSuccess()) { + if (status.isSuccess()) { List<LogMessage> logMessages = response.getLogMessages(); tableViewer.setInput(logMessages.toArray(new LogMessage[0])); tableViewer.refresh(); @@ -198,30 +201,30 @@ public class VolumeLogsPage extends Composite { } protected boolean validateTimeRange(Date fromTimestamp, Date toTimestamp) { - if(fromTimestamp == null && toTimestamp == null) { + if (fromTimestamp == null && toTimestamp == null) { // no time range selected. nothing to validate. return true; } - + Calendar calendar = Calendar.getInstance(); Date now = calendar.getTime(); - if(fromTimestamp != null && fromTimestamp.after(now)) { + if (fromTimestamp != null && fromTimestamp.after(now)) { MessageDialog.openError(getShell(), "Volume Logs", "From time can't be greater than current time!"); return false; } - - if(toTimestamp != null) { + + if (toTimestamp != null) { if (toTimestamp.after(now)) { MessageDialog.openError(getShell(), "Volume Logs", "To time can't be greater than current time!"); return false; } - - if(fromTimestamp.after(toTimestamp)) { + + if (fromTimestamp.after(toTimestamp)) { MessageDialog.openError(getShell(), "Volume Logs", "From time can't be greater than To time!"); return false; } } - + return true; } @@ -304,11 +307,11 @@ public class VolumeLogsPage extends Composite { private void createSeverityCombo(Composite composite) { severityCombo = new Combo(composite, SWT.READ_ONLY); severityCombo.setBounds(555, 15, 110, 20); - + severityCombo.setItems(GlusterConstants.VOLUME_LOG_LEVELS_ARR.toArray(new String[0])); severityCombo.select(VOLUME_LOG_LEVELS.ERROR.ordinal()); severityCombo.add(CoreConstants.ALL, 0); - + toolkit.adapt(severityCombo); toolkit.paintBordersFor(severityCombo); } @@ -319,9 +322,11 @@ public class VolumeLogsPage extends Composite { } private void createDisksCombo(Composite composite) { + GlusterCoreUtil glusterCoreUtil = new GlusterCoreUtil(); + disksCombo = new Combo(composite, SWT.READ_ONLY); disksCombo.setBounds(365, 15, 100, 20); - disksCombo.setItems(volume.getDisks().toArray(new String[0])); + disksCombo.setItems(glusterCoreUtil.getQualifiedBrickList(volume.getBricks()).toArray(new String[0])); disksCombo.add(CoreConstants.ALL, 0); toolkit.adapt(disksCombo); toolkit.paintBordersFor(disksCombo); @@ -329,7 +334,7 @@ public class VolumeLogsPage extends Composite { } private void createDiskLabel(Composite composite) { - Label lblMessagesAndFilter = toolkit.createLabel(composite, "messages, and filter on disk", SWT.NONE); + Label lblMessagesAndFilter = toolkit.createLabel(composite, "messages, and filter on bricks", SWT.NONE); lblMessagesAndFilter.setBounds(160, 15, 200, 20); } @@ -348,10 +353,10 @@ public class VolumeLogsPage extends Composite { GridData layoutData = new GridData(); layoutData.grabExcessHorizontalSpace = true; layoutData.grabExcessVerticalSpace = true; - //layoutData.verticalIndent = 10; + // layoutData.verticalIndent = 10; setLayoutData(layoutData); } - + private Composite createTableViewerComposite() { Composite tableViewerComposite = new Composite(this, SWT.NO); tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); @@ -360,7 +365,7 @@ public class VolumeLogsPage extends Composite { tableViewerComposite.setLayoutData(layoutData); return tableViewerComposite; } - + private void setupLogsTable(Composite parent, Table table) { table.setHeaderVisible(true); table.setLinesVisible(false); @@ -374,7 +379,7 @@ public class VolumeLogsPage extends Composite { setColumnProperties(table, LOG_TABLE_COLUMN_INDICES.SEVERITY, SWT.CENTER, 50); setColumnProperties(table, LOG_TABLE_COLUMN_INDICES.MESSAGE, SWT.LEFT, 100); } - + /** * Sets properties for alignment and weight of given column of given table * diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java index 9e25a018..680dc391 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java @@ -56,7 +56,7 @@ public class VolumesPage extends Composite { }; private static final String[] VOLUME_TABLE_COLUMN_NAMES = new String[] { "Name", - "Volume Type", "Number of\nDisks", "Transport Type", "Status" }; + "Volume Type", "Number of\nBricks", "Transport Type", "Status" }; public VolumesPage(final Composite parent, IWorkbenchSite site, EntityGroup<Volume> volumes) { super(parent, SWT.NONE); 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/AbstractServersResource.java index 004160a7..13147465 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/AbstractServersResource.java @@ -70,10 +70,10 @@ public class AbstractServersResource { */ private void addDummyDisks(Server server) { double dummyDiskSpace = Math.random() * 500; - server.addDisk(new Disk(server, "sda", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY)); + server.addDisk(new Disk(server, "sda", "/export/md0", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY)); dummyDiskSpace = Math.random() * 500; - server.addDisk(new Disk(server, "sdb", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY)); + server.addDisk(new Disk(server, "sdb", "/export/md1", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY)); dummyDiskSpace = Math.random() * 500; - server.addDisk(new Disk(server, "sdc", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY)); + server.addDisk(new Disk(server, "sdc", "/export/md2", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY)); } } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java index 5db84994..4af22814 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java @@ -21,10 +21,8 @@ package com.gluster.storage.management.server.resources; import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPERATION; -import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_PAUSE; import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_SOURCE; import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_START; -import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_STATUS; import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_STOP; import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_TARGET; import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_VOLUME_NAME; @@ -45,8 +43,6 @@ import static com.gluster.storage.management.core.constants.RESTConstants.SUBRES import static com.gluster.storage.management.core.constants.RESTConstants.SUBRESOURCE_OPTIONS; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; @@ -55,7 +51,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; -import java.util.zip.GZIPOutputStream; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -69,28 +64,27 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.constants.RESTConstants; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; +import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.LogMessage; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE; import com.gluster.storage.management.core.response.GenericResponse; import com.gluster.storage.management.core.response.LogMessageListResponse; import com.gluster.storage.management.core.response.VolumeListResponse; import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse; import com.gluster.storage.management.core.utils.DateUtil; import com.gluster.storage.management.core.utils.FileUtil; +import com.gluster.storage.management.core.utils.GlusterCoreUtil; import com.gluster.storage.management.core.utils.ProcessUtil; import com.gluster.storage.management.server.constants.VolumeOptionsDefaults; import com.gluster.storage.management.server.utils.GlusterUtil; import com.gluster.storage.management.server.utils.ServerUtil; import com.sun.jersey.api.core.InjectParam; -import com.sun.jersey.api.representation.Form; import com.sun.jersey.spi.resource.Singleton; @Singleton @@ -102,11 +96,13 @@ public class VolumesResource { @InjectParam private static ServerUtil serverUtil; - + @InjectParam private static GlusterUtil glusterUtil; - + private static final FileUtil fileUtil = new FileUtil(); + + private static GlusterCoreUtil glusterCoreUtil = new GlusterCoreUtil(); @InjectParam private VolumeOptionsDefaults volumeOptionsDefaults; @@ -127,25 +123,13 @@ public class VolumesResource { @Consumes(MediaType.TEXT_XML) @Produces(MediaType.TEXT_XML) public Status createVolume(Volume volume) { - // Create the directories for the volume - List<String> disks = volume.getDisks(); - Status status = createDirectories(disks, volume.getName()); + List<String> brickDirectories = glusterCoreUtil.getQualifiedBrickList(volume.getBricks()); + Status status = glusterUtil.createVolume(volume, brickDirectories); if (status.isSuccess()) { - List<String> bricks = Arrays.asList(status.getMessage().split(" ")); - status = glusterUtil.createVolume(volume, bricks); - if (status.isSuccess()) { - Status optionsStatus = glusterUtil.createOptions(volume); - if (!optionsStatus.isSuccess()) { - status.setCode(Status.STATUS_CODE_PART_SUCCESS); - status.setMessage("Error while setting volume options: " + optionsStatus); - } - } else { - Status cleanupStatus = cleanupDirectories(disks, volume.getName(), disks.size(), "-d"); // delete - // permanently - if (!cleanupStatus.isSuccess()) { - status.setMessage(status.getMessage() + CoreConstants.NEWLINE + "Cleanup errors: " - + CoreConstants.NEWLINE + cleanupStatus); - } + Status optionsStatus = glusterUtil.createOptions(volume); + if (!optionsStatus.isSuccess()) { + status.setCode(Status.STATUS_CODE_PART_SUCCESS); + status.setMessage("Error while setting volume options: " + optionsStatus); } } return status; @@ -180,12 +164,12 @@ public class VolumesResource { @QueryParam(QUERY_PARAM_DELETE_OPTION) boolean deleteFlag) { Volume volume = glusterUtil.getVolume(volumeName); Status status = glusterUtil.deleteVolume(volumeName); - + String deleteOption = ""; - if(deleteFlag) { + if (deleteFlag) { deleteOption = "-d"; } - + if (status.isSuccess()) { List<String> disks = volume.getDisks(); Status postDeleteStatus = postDelete(volumeName, disks, deleteOption); @@ -204,18 +188,14 @@ public class VolumesResource { public Status removeBricks(@PathParam(QUERY_PARAM_VOLUME_NAME) String volumeName, @QueryParam(QUERY_PARAM_DISKS) String disks, @QueryParam(QUERY_PARAM_DELETE_OPTION) boolean deleteFlag) { List<String> bricks = Arrays.asList(disks.split(",")); // Convert from comma separated string (query parameter) - List<String> volumeBricks = new ArrayList<String>(); - for (String brickInfo : bricks) { - volumeBricks.add(getBrickForDisk(getVolume(volumeName), brickInfo)); - } - Status status = glusterUtil.removeBricks(volumeName, volumeBricks); + Status status = glusterUtil.removeBricks(volumeName, bricks); String deleteOption = ""; - if(deleteFlag) { + if (deleteFlag) { deleteOption = "-d"; } - + if (status.isSuccess()) { Status cleanupStatus = cleanupDirectories(bricks, volumeName, bricks.size(), deleteOption); if (!cleanupStatus.isSuccess()) { @@ -269,14 +249,14 @@ public class VolumesResource { @SuppressWarnings("rawtypes") private Status prepareBrick(String serverName, String diskName, String volumeName) { - Object response = serverUtil.executeOnServer(true, serverName, PREPARE_BRICK_SCRIPT + " " - + diskName + " " + volumeName, GenericResponse.class); - if(response instanceof GenericResponse) { - return ((GenericResponse)response).getStatus(); + Object response = serverUtil.executeOnServer(true, serverName, PREPARE_BRICK_SCRIPT + " " + diskName + " " + + volumeName, GenericResponse.class); + if (response instanceof GenericResponse) { + return ((GenericResponse) response).getStatus(); } else { // in case of script failure on server, a Status object will be returned return (Status) response; - } + } } private Status createDirectories(List<String> disks, String volumeName) { @@ -324,11 +304,11 @@ public class VolumesResource { diskInfo = disks.get(i).split(":"); serverName = diskInfo[0]; diskName = diskInfo[1]; - - Object response = serverUtil.executeOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT - + " " + diskName + " " + volumeName + " " + deleteFlag, GenericResponse.class); - if(response instanceof GenericResponse) { - result = ((GenericResponse)response).getStatus(); + + Object response = serverUtil.executeOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT + " " + + diskName + " " + volumeName + " " + deleteFlag, GenericResponse.class); + if (response instanceof GenericResponse) { + result = ((GenericResponse) response).getStatus(); if (!result.isSuccess()) { // TODO: append error and continue with cleaning up of other directories return result; @@ -336,12 +316,12 @@ public class VolumesResource { } else { // TODO: append error and continue with cleaning up of other directories // In case of script execution failure, a Status object will be returned. - return (Status)response; + return (Status) response; } } return new Status(Status.STATUS_CODE_SUCCESS, "Directories cleaned up successfully!"); } - + private List<LogMessage> getBrickLogs(Volume volume, String brickName, Integer lineCount) throws GlusterRuntimeException { // brick name format is <serverName>:<brickDirectory> @@ -378,13 +358,13 @@ public class VolumesResource { } return logMessages; } - + @GET @Produces(MediaType.APPLICATION_OCTET_STREAM) @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + SUBRESOURCE_LOGS + "/" + SUBRESOURCE_DOWNLOAD) public StreamingOutput getLogs(@PathParam(PATH_PARAM_VOLUME_NAME) final String volumeName) { return new StreamingOutput() { - + @Override public void write(OutputStream output) throws IOException, WebApplicationException { Volume volume = getVolume(volumeName); @@ -404,13 +384,13 @@ public class VolumesResource { // create temporary directory File tempDir = fileUtil.createTempDir(); String tempDirPath = tempDir.getPath(); - - for(String brickName : volume.getBricks()) { + + for (String brickName : glusterCoreUtil.getQualifiedBrickList(volume.getBricks())) { // brick name format is <serverName>:<brickDirectory> String[] brickParts = brickName.split(":"); String serverName = brickParts[0]; String brickDir = brickParts[1]; - + String logDir = glusterUtil.getLogLocation(volume.getName(), brickName); String logFileName = glusterUtil.getLogFileNameForBrickDir(brickDir); String logFilePath = logDir + CoreConstants.FILE_SEPARATOR + logFileName; @@ -418,13 +398,13 @@ public class VolumesResource { String logContents = serverUtil.getFileFromServer(serverName, logFilePath); fileUtil.createTextFile(tempDirPath + CoreConstants.FILE_SEPARATOR + logFileName, logContents); } - + String gzipPath = fileUtil.getTempDirName() + CoreConstants.FILE_SEPARATOR + volume.getName() + "-logs.tar.gz"; new ProcessUtil().executeCommand("tar", "czvf", gzipPath, "-C", tempDir.getParent(), tempDir.getName()); - + // delete the temp directory fileUtil.recursiveDelete(tempDir); - + return gzipPath; } @@ -434,8 +414,7 @@ public class VolumesResource { @QueryParam(QUERY_PARAM_DISK_NAME) String diskName, @QueryParam(QUERY_PARAM_LOG_SEVERITY) String severity, @QueryParam(QUERY_PARAM_FROM_TIMESTAMP) String fromTimestamp, @QueryParam(QUERY_PARAM_TO_TIMESTAMP) String toTimestamp, - @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, - @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) { + @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) { List<LogMessage> logMessages = null; try { @@ -499,7 +478,7 @@ public class VolumesResource { List<LogMessage> logMessages; logMessages = new ArrayList<LogMessage>(); // fetch logs for every brick of the volume - for (String brick : volume.getBricks()) { + for (String brick : glusterCoreUtil.getQualifiedBrickList(volume.getBricks())) { logMessages.addAll(getBrickLogs(volume, brick, lineCount)); } @@ -518,25 +497,7 @@ public class VolumesResource { @Path("{" + QUERY_PARAM_VOLUME_NAME + "}/" + SUBRESOURCE_DISKS) public Status addDisks(@PathParam(QUERY_PARAM_VOLUME_NAME) String volumeName, @FormParam(QUERY_PARAM_DISKS) String disks) { - - List<String> diskList = Arrays.asList(disks.split(",")); // Convert from comma separated sting (query parameter) - // to list - Status status = createDirectories(diskList, volumeName); - if (status.isSuccess()) { - List<String> bricks = Arrays.asList(status.getMessage().split(" ")); - status = glusterUtil.addBricks(volumeName, bricks); - - if (!status.isSuccess()) { - Status cleanupStatus = cleanupDirectories(diskList, volumeName, diskList.size(), "-d"); // Remove the - // directories - // if created - if (!cleanupStatus.isSuccess()) { - // append cleanup error to prepare brick error - status.setMessage(status.getMessage() + CoreConstants.NEWLINE + cleanupStatus.getMessage()); - } - } - } - return status; + return glusterUtil.addBricks(volumeName, Arrays.asList(disks)); } @PUT @@ -549,7 +510,7 @@ public class VolumesResource { private String getBrickForDisk(Volume volume, String diskName) { int index = volume.getDisks().indexOf(diskName); - return volume.getBricks().get(index); + return volume.getBricks().get(index).getBrickDirectory(); } private String getDiskForBrick(Volume volume, String brickName) { 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 7299a135..6db6bffc 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 @@ -28,8 +28,8 @@ import java.util.Map.Entry; import org.springframework.stereotype.Component; import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.constants.RESTConstants; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; +import com.gluster.storage.management.core.model.Brick; 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; @@ -169,7 +169,7 @@ public class GlusterUtil { return new Status(processUtil.executeCommand("gluster", "volume", "reset", volumeName)); } - public Status createVolume(Volume volume, List<String> bricks) { + public Status createVolume(Volume volume, List<String> brickDirectories) { int count = 1; // replica or stripe count String volumeType = null; VOLUME_TYPE volType = volume.getVolumeType(); @@ -184,7 +184,7 @@ public class GlusterUtil { String transportTypeStr = null; TRANSPORT_TYPE transportType = volume.getTransportType(); transportTypeStr = (transportType == TRANSPORT_TYPE.ETHERNET) ? "tcp" : "rdma"; - List<String> command = prepareVolumeCreateCommand(volume, bricks, count, volumeType, transportTypeStr); + List<String> command = prepareVolumeCreateCommand(volume, brickDirectories, count, volumeType, transportTypeStr); ProcessResult result = processUtil.executeCommand(command); if (!result.isSuccess()) { return new Status(result); @@ -193,8 +193,8 @@ public class GlusterUtil { return createOptions(volume); } - private List<String> prepareVolumeCreateCommand(Volume volume, List<String> bricks, int count, String volumeType, - String transportTypeStr) { + private List<String> prepareVolumeCreateCommand(Volume volume, List<String> brickDirectories, int count, + String volumeType, String transportTypeStr) { List<String> command = new ArrayList<String>(); command.add("gluster"); command.add("volume"); @@ -206,7 +206,7 @@ public class GlusterUtil { } command.add("transport"); command.add(transportTypeStr); - command.addAll(bricks); + command.addAll(brickDirectories); return command; } @@ -276,7 +276,6 @@ public class GlusterUtil { return false; } - private void readReplicaOrStripeCount(Volume volume, String line) { if (extractToken(line, "x") != null) { // expected formated of line is "Number of Bricks: 3 x 2 = 6" @@ -286,7 +285,7 @@ public class GlusterUtil { } else if (volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_MIRROR) { volume.setReplicaCount(count); volume.setStripeCount(0); - } + } } return; @@ -316,15 +315,14 @@ public class GlusterUtil { String[] brickParts = line.split(":"); String serverName = brickParts[1].trim(); String brickDir = brickParts[2].trim(); - - volume.addBrick(serverName + ":" + brickDir); + Brick brick = new Brick(serverName, brickDir.split("/")[2].trim(), brickDir); + volume.addBrick(brick); detectAndAddDiskToVolume(volume, serverName, brickDir); return true; } return false; } - private void detectAndAddDiskToVolume(Volume volume, String serverName, String brickDir) { // brick directory should be of the form /export/<diskname>/volume-name try { @@ -343,7 +341,6 @@ public class GlusterUtil { } } - private boolean readBrickGroup(String line) { return extractToken(line, VOLUME_BRICKS_GROUP_PFX) != null; } @@ -435,7 +432,6 @@ public class GlusterUtil { return volumes; } - public Status addBricks(String volumeName, List<String> bricks) { List<String> command = new ArrayList<String>(); command.add("gluster"); @@ -446,7 +442,6 @@ public class GlusterUtil { return new Status(processUtil.executeCommand(command)); } - public String getLogLocation(String volumeName, String brickName) { ProcessResult result = new ProcessUtil().executeCommand("gluster", "volume", "log", "locate", volumeName, brickName); @@ -471,11 +466,12 @@ public class GlusterUtil { logFileName = logFileName.replaceAll(CoreConstants.FILE_SEPARATOR, "-") + ".log"; return logFileName; } - - public Status migrateDisk( String volumeName, String diskFrom, String diskTo, String operation ) { - return new Status(processUtil.executeCommand("gluster", "volume", "replace-brick", volumeName, diskFrom, diskTo, operation)); + + public Status migrateDisk(String volumeName, String diskFrom, String diskTo, String operation) { + return new Status(processUtil.executeCommand("gluster", "volume", "replace-brick", volumeName, diskFrom, + diskTo, operation)); } - + public Status removeBricks(String volumeName, List<String> bricks) { List<String> command = new ArrayList<String>(); command.add("gluster"); |
