From fb758c64d9df8a8536f00e9db744a4187be34d94 Mon Sep 17 00:00:00 2001 From: Selvasundaram Date: Tue, 2 Aug 2011 12:54:37 +0530 Subject: Device mount point handling Parameter changes for directory cleanup script. Bug 3297 - Path seperator is appended as "\" instead of "/" if volume is created from windows client - fix --- .../storage/management/core/model/Brick.java | 22 +++---- .../storage/management/core/model/Cluster.java | 2 +- .../storage/management/core/model/Device.java | 2 +- .../gateway/resources/v1_0/VolumesResource.java | 14 ++-- .../gateway/services/ClusterService.java | 8 +-- .../management/gateway/utils/GlusterUtil.java | 13 ++-- .../gui/ApplicationActionBarAdvisor.java | 1 - .../management/gui/BrickTableLabelProvider.java | 2 +- .../management/gui/GlusterDataModelManager.java | 74 ++++++++++++++-------- .../management/gui/dialogs/AddBrickPage.java | 1 - .../gui/dialogs/BricksSelectionPage.java | 5 +- .../management/gui/dialogs/CreateVolumePage1.java | 4 +- .../management/gui/views/VolumeSummaryView.java | 5 +- 13 files changed, 85 insertions(+), 68 deletions(-) (limited to 'src') diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java index 52978f2a..0b8ad6fd 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java @@ -29,7 +29,7 @@ public class Brick extends Entity { private String[] BRICK_STATUS_STR = {"Online", "Offline"}; private String serverName; - private String deviceName; + // private String deviceName; private String brickDirectory; private BRICK_STATUS status; @@ -54,10 +54,10 @@ public class Brick extends Entity { this.status = status; } - public Brick(String serverName, BRICK_STATUS brickStatus, String deviceName, String brickDirectory) { + public Brick(String serverName, BRICK_STATUS brickStatus, String brickDirectory) { setServerName(serverName); setStatus(brickStatus); - setDeviceName(deviceName); + // setDeviceName(deviceName); setBrickDirectory(brickDirectory); } @@ -77,20 +77,20 @@ public class Brick extends Entity { return brickDirectory; } - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } +// public void setDeviceName(String deviceName) { +// this.deviceName = deviceName; +// } - public String getDeviceName() { - return deviceName; - } +// public String getDeviceName() { +// return deviceName; +// } public String getQualifiedName() { return serverName + ":" + brickDirectory; } public boolean filter(String filterString, boolean caseSensitive) { - return StringUtil.filterString(getServerName() + getBrickDirectory() + getDeviceName() + getStatusStr(), filterString, + return StringUtil.filterString(getServerName() + getBrickDirectory() + getStatusStr(), filterString, caseSensitive); } @@ -116,7 +116,7 @@ public class Brick extends Entity { public void copyFrom(Brick newBrick) { setServerName(newBrick.getServerName()); setBrickDirectory(newBrick.getBrickDirectory()); - setDeviceName(newBrick.getDeviceName()); + // setDeviceName(newBrick.getDeviceName()); setStatus(newBrick.getStatus()); } } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java index 67aeeeda..e11199f6 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java @@ -162,7 +162,7 @@ public class Cluster extends Entity { public GlusterServer getServer(String serverName) { for(GlusterServer server : servers) { - if (server.getName().equalsIgnoreCase(serverName)) { + if (server.getName().equalsIgnoreCase(serverName) || server.getIpAddressesAsString().contains(serverName)) { return server; } } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Device.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Device.java index 3f3c3810..08092e7e 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Device.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Device.java @@ -180,7 +180,7 @@ public class Device extends Entity { } public String getQualifiedBrickName(String volumeName) { - return getServerName() + ":" + getMountPoint() + File.separator + volumeName; + return getServerName() + ":" + getMountPoint() + "/" + volumeName; } @Override diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/VolumesResource.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/VolumesResource.java index c021aeb2..03a61aae 100644 --- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/VolumesResource.java +++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/VolumesResource.java @@ -500,17 +500,18 @@ public class VolumesResource extends AbstractResource { String serverName = brickInfo[0]; String brickDirectory = brickInfo[1]; + // String mountPoint = brickDirectory.substring(0, + // brickDirectory.lastIndexOf("/")); Object response = serverUtil.executeScriptOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT + " " - + brickDirectory + " " + volumeName + " " + (deleteFlag ? "-d" : ""), GenericResponse.class); + + brickDirectory + " " + (deleteFlag ? "-d" : ""), GenericResponse.class); if (response instanceof GenericResponse) { result = ((GenericResponse) response).getStatus(); if (!result.isSuccess()) { - errors += "[" + brickDirectory + "][" + volumeName + "] => " + result - + CoreConstants.NEWLINE; + errors += "[" + brickDirectory + "] => " + result + CoreConstants.NEWLINE; } } else { Status errStatus = (Status) response; - errors += "[" + brickDirectory + "][" + volumeName + "] => " + errStatus + CoreConstants.NEWLINE; + errors += "[" + brickDirectory + "] => " + errStatus + CoreConstants.NEWLINE; } } if(!errors.trim().isEmpty()) { @@ -522,10 +523,11 @@ public class VolumesResource extends AbstractResource { Status result; for (Brick brick : bricks) { String brickDirectory = brick.getBrickDirectory(); + // String mountPoint = brickDirectory.substring(0, brickDirectory.lastIndexOf("/")); result = (Status) serverUtil.executeScriptOnServer(true, brick.getServerName(), - VOLUME_DIRECTORY_CLEANUP_SCRIPT + " " + brickDirectory + " " + volumeName - + (deleteFlag ? " -d" : ""), Status.class); + VOLUME_DIRECTORY_CLEANUP_SCRIPT + " " + brickDirectory + " " + (deleteFlag ? "-d" : ""), + Status.class); if (!result.isSuccess()) { throw new GlusterRuntimeException("Error in post-delete operation of volume [" + volumeName + "]: " + result); diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/ClusterService.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/ClusterService.java index e01c5096..368b34f5 100644 --- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/ClusterService.java +++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/ClusterService.java @@ -31,9 +31,7 @@ import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.exceptions.ConnectionException; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.GlusterServer; -import com.gluster.storage.management.core.model.Server.SERVER_STATUS; import com.gluster.storage.management.core.utils.LRUCache; -import com.gluster.storage.management.core.utils.ProcessResult; import com.gluster.storage.management.gateway.data.ClusterInfo; import com.gluster.storage.management.gateway.data.PersistenceDao; import com.gluster.storage.management.gateway.data.ServerInfo; @@ -76,7 +74,7 @@ public class ClusterService { // uses cache public GlusterServer getOnlineServer(String clusterName, String exceptServerName) { GlusterServer server = onlineServerCache.get(clusterName); - if (server != null && !server.getName().equals(exceptServerName)) { + if (server != null && !server.getName().equalsIgnoreCase(exceptServerName)) { return server; } @@ -103,7 +101,7 @@ public class ClusterService { try { serverUtil.fetchServerDetails(server); // Online status come with server details // server is online. add it to cache and return - if (server.isOnline() && !server.getName().equals(exceptServerName)) { + if (server.isOnline() && !server.getName().equalsIgnoreCase(exceptServerName)) { addOnlineServer(clusterName, server); return server; } @@ -251,7 +249,7 @@ public class ClusterService { ClusterInfo cluster = getCluster(clusterName); List servers = cluster.getServers(); for(ServerInfo server : servers) { - if(server.getName().equals(serverName)) { + if(server.getName().equalsIgnoreCase(serverName)) { servers.remove(server); clusterDao.delete(server); break; diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/GlusterUtil.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/GlusterUtil.java index 55909d54..2f63024d 100644 --- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/GlusterUtil.java +++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/GlusterUtil.java @@ -25,7 +25,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.regex.Pattern; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -113,7 +112,7 @@ public class GlusterUtil { public GlusterServer getGlusterServer(GlusterServer onlineServer, String serverName) { List servers = getGlusterServers(onlineServer); for (GlusterServer server : servers) { - if (server.getName().equals(serverName)) { + if (server.getName().equalsIgnoreCase(serverName)) { return server; } } @@ -412,12 +411,12 @@ public class GlusterUtil { private void addBrickToVolume(Volume volume, String serverName, String brickDir, BRICK_STATUS status) { //If brick directory has standard path, find and assign device name otherwise null - String stdBrickDirPattern = "^/export/.*/.*"; // e.g: /export/sdb/test +// String stdBrickDirPattern = "^/export/.*/.*"; // e.g: /export/sdb/test String deviceName = null; - if (Pattern.matches(stdBrickDirPattern, brickDir) ) { - deviceName = brickDir.split("/")[2].trim(); - } - volume.addBrick(new Brick(serverName, status, deviceName, brickDir)); +// if (Pattern.matches(stdBrickDirPattern, brickDir) ) { +// deviceName = brickDir.split("/")[2].trim(); +// } + volume.addBrick(new Brick(serverName, status, brickDir)); } // Do not throw exception, Gracefully handle as Offline brick. diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationActionBarAdvisor.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationActionBarAdvisor.java index 8b5dba55..56e5247c 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationActionBarAdvisor.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationActionBarAdvisor.java @@ -18,7 +18,6 @@ *******************************************************************************/ package com.gluster.storage.management.gui; -import org.eclipse.jface.action.Action; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.ICoolBarManager; import org.eclipse.jface.action.IMenuManager; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java index 3e5907ef..11226e8a 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java @@ -75,7 +75,7 @@ public class BrickTableLabelProvider extends TableLabelProviderAdapter { } Brick brick = (Brick) element; - Device device = GlusterDataModelManager.getInstance().getDeviceDetails(brick.getDeviceName()); + Device device = GlusterDataModelManager.getInstance().getDeviceForBrickDir(brick); return (columnIndex == BRICK_TABLE_COLUMN_INDICES.SERVER.ordinal() ? brick.getServerName() : columnIndex == BRICK_TABLE_COLUMN_INDICES.BRICK.ordinal() ? brick.getBrickDirectory() : columnIndex == BRICK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal() ? getDeviceFreeSpace(device) diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java index d301ad10..d6430255 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java @@ -49,7 +49,6 @@ import com.gluster.storage.management.core.model.GlusterDataModel; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.Partition; import com.gluster.storage.management.core.model.Server; -import com.gluster.storage.management.core.model.Server.SERVER_STATUS; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.TaskInfo; import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE; @@ -565,15 +564,15 @@ public class GlusterDataModelManager { return volume; } - private Device getDevice(String serverName, String deviceName) { - List allDevices = getReadyDevicesOfAllServers(); - for (Device device : allDevices) { - if (device.getServerName().equals(serverName) && device.getName().equals(deviceName)) { - return device; - } - } - return null; - } +// private Device getDevice(String serverName, String deviceName) { +// List allDevices = getReadyDevicesOfAllServers(); +// for (Device device : allDevices) { +// if (device.getServerName().equals(serverName) && device.getName().equals(deviceName)) { +// return device; +// } +// } +// return null; +// } /* * @param diskName (sda) @@ -591,11 +590,24 @@ public class GlusterDataModelManager { } + public Device getDeviceForBrickDir(Brick brick) { + Device brickDevice = null; + for (Device device : getReadyDevicesOfServer(brick.getServerName(), new ArrayList())) { + if (brick.getBrickDirectory().startsWith( device.getMountPoint() )) { + if (brickDevice == null || device.getMountPoint().length() > brickDevice.getMountPoint().length()) { + brickDevice = device; + } + } + } + return brickDevice; + } + public List getReadyDevicesOfVolume(Volume volume) { Device device = null; List volumeDevices = new ArrayList(); for (Brick brick : volume.getBricks()) { - device = getDevice(brick.getServerName(), brick.getDeviceName()); + // device = getDevice(brick.getServerName(), brick.getDeviceName()); + device = getDeviceForBrickDir(brick); if (device != null && device.isReady()) { volumeDevices.add(device); } @@ -611,24 +623,31 @@ public class GlusterDataModelManager { List devices = new ArrayList(); for (Server server : model.getCluster().getServers()) { - if (server.getStatus() == SERVER_STATUS.OFFLINE) { - continue; - } - for (Disk disk : server.getDisks()) { - if(disk.hasPartitions()) { - for(Partition partition : disk.getPartitions()) { - if(partition.isReady() && !excludeDevices.contains(partition)) { - devices.add(partition); - } + devices.addAll( getReadyDevicesOfServer(server.getName(), excludeDevices) ); + } + return devices; + } + + public List getReadyDevicesOfServer(String serverName, List excludeDevices) { + List devices = new ArrayList(); + GlusterServer server = model.getCluster().getServer(serverName); + if (server == null || !server.isOnline()) { + return devices; + } + for (Disk disk : server.getDisks()) { + if (disk.hasPartitions()) { + for (Partition partition : disk.getPartitions()) { + if (partition.isReady() && !excludeDevices.contains(partition)) { + devices.add(partition); } - } else if (disk.isReady() && !excludeDevices.contains(disk)) { - devices.add(disk); } + } else if (disk.isReady() && !excludeDevices.contains(disk)) { + devices.add(disk); } } return devices; } - + public void addClusterListener(ClusterListener listener) { listeners.add(listener); } @@ -846,7 +865,7 @@ public class GlusterDataModelManager { public Server getGlusterServer(String serverName) { for (Server server : model.getCluster().getServers()) { - if (server.getName().equals(serverName)) { + if (server.getName().equalsIgnoreCase(serverName)) { return server; } } @@ -854,8 +873,11 @@ public class GlusterDataModelManager { } private Boolean isDeviceUsed(Volume volume, Device device) { + Device brickDevice = null; for (Brick brick : volume.getBricks()) { - if (device.getName().equals(brick.getDeviceName()) && device.getServerName().equals(brick.getServerName())) { + brickDevice = getDeviceForBrickDir(brick); + if (brickDevice != null && device.getName().equals(brickDevice.getName()) + && device.getServerName().equalsIgnoreCase(brick.getServerName())) { return true; } } @@ -878,7 +900,7 @@ public class GlusterDataModelManager { Cluster cluster = model.getCluster(); for (Volume volume : cluster.getVolumes()) { for (Brick brick : volume.getBricks()) { - if (serverName.equals(brick.getServerName())) { + if (serverName.equalsIgnoreCase(brick.getServerName())) { volumeNames.add(volume.getName()); break; } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java index 14e36852..e570c068 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java @@ -31,7 +31,6 @@ import org.eclipse.swt.widgets.Composite; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Device; -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; import com.gluster.storage.management.gui.GlusterDataModelManager; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java index e0dae4fd..04678da9 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java @@ -323,9 +323,8 @@ public class BricksSelectionPage extends Composite { if (bricksArr != null) { Set bricks = new HashSet(); for (Object device : bricksArr) { - bricks.add(new Brick(((Device) device).getServerName(), BRICK_STATUS.ONLINE, ((Device) device).getName(), - ((Device) device).getMountPoint() + "/" + volumeName)); // Assumption mount point is not having - // trailing "/" + bricks.add(new Brick(((Device) device).getServerName(), BRICK_STATUS.ONLINE, ((Device) device) + .getMountPoint() + "/" + volumeName)); // Assumption mount point is not having trailing "/" } return bricks; } 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 96da6fa3..57cc1266 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 @@ -338,8 +338,8 @@ public class CreateVolumePage1 extends WizardPage { } for (Device device : selectedDevices) { - Brick brick = new Brick(device.getServerName(), BRICK_STATUS.ONLINE, device.getName(), - device.getMountPoint() + File.separator + volume.getName()); + Brick brick = new Brick(device.getServerName(), BRICK_STATUS.ONLINE, device.getMountPoint() + "/" + + volume.getName()); volume.addBrick(brick); } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java index 20439aca..722d0ff1 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java @@ -44,7 +44,6 @@ import com.gluster.storage.management.core.model.Event; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.Partition; import com.gluster.storage.management.core.model.Server.SERVER_STATUS; -import com.gluster.storage.management.core.model.TaskInfo; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; import com.gluster.storage.management.core.utils.NumberUtil; @@ -466,10 +465,10 @@ public class VolumeSummaryView extends ViewPart { private double getTotalDiskSpace() { double diskSize = 0; for (Brick brick : volume.getBricks()) { - diskSize += getDiskSize(brick.getServerName(), brick.getDeviceName()); + diskSize += getDiskSize(brick.getServerName(), + GlusterDataModelManager.getInstance().getDeviceForBrickDir(brick).getName()); } return diskSize; - } private void createDiskSpaceField(Composite section) { -- cgit