diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-05-20 15:12:17 +0530 | 
|---|---|---|
| committer | Dhandapani <dhandapani@gluster.com> | 2011-05-20 15:12:17 +0530 | 
| commit | 4968a929c59d5ddac86acc057c40e6d82cbdd865 (patch) | |
| tree | 022c4655ce164464b31895e101685bd372518856 /src | |
| parent | b321add074a8b8413f9285bac7458a1d4ceea60c (diff) | |
| parent | dfc27f51da469160e50e20d8ff59e714b5942546 (diff) | |
Merge branch 'disk-to-brick'
Diffstat (limited to 'src')
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 e639f615..f98509f4 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 4b0de509..7a8c07e0 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 fec00b7d..b0645990 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 13b8ef28..91f809b8 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 @@ -30,8 +30,8 @@ import org.springframework.beans.factory.annotation.Autowired;  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; @@ -188,7 +188,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(); @@ -203,7 +203,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); @@ -212,8 +212,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"); @@ -225,7 +225,7 @@ public class GlusterUtil {  		}  		command.add("transport");  		command.add(transportTypeStr); -		command.addAll(bricks); +		command.addAll(brickDirectories);  		return command;  	} @@ -295,7 +295,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" @@ -305,7 +304,7 @@ public class GlusterUtil {  			} else if (volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_MIRROR) {  				volume.setReplicaCount(count);  				volume.setStripeCount(0); -			}  +			}  		}  		return; @@ -335,15 +334,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 { @@ -362,7 +360,6 @@ public class GlusterUtil {  		}  	} -  	private boolean readBrickGroup(String line) {  		return extractToken(line, VOLUME_BRICKS_GROUP_PFX) != null;  	} @@ -454,7 +451,6 @@ public class GlusterUtil {  		return volumes;  	} -  	public Status addBricks(String volumeName, List<String> bricks) {  		List<String> command = new ArrayList<String>();  		command.add("gluster"); @@ -465,7 +461,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); @@ -490,11 +485,12 @@ public class GlusterUtil {  		logFileName = logFileName.replaceAll(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");  | 
