From add2c0417ccb9ecd94e733381c7575209308c2cc Mon Sep 17 00:00:00 2001 From: Selvasundaram Date: Wed, 17 Aug 2011 15:07:51 +0530 Subject: Replicate volume total space calculation bug - fix Volume type issue (distributed replicate/stripe) in volume summary page fixed --- .../console/dialogs/CreateVolumePage1.java | 1 - .../console/dialogs/CreateVolumeWizard.java | 14 +++++++-- .../console/views/VolumeSummaryView.java | 36 ++++++++++++++++++---- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/CreateVolumePage1.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/CreateVolumePage1.java index ba19ef10..49946668 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/CreateVolumePage1.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/CreateVolumePage1.java @@ -362,7 +362,6 @@ public class CreateVolumePage1 extends WizardPage { } addVolumeBricks(); - return volume; } diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/CreateVolumeWizard.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/CreateVolumeWizard.java index bfb29ee1..498723d9 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/CreateVolumeWizard.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/dialogs/CreateVolumeWizard.java @@ -28,6 +28,7 @@ import com.gluster.storage.management.console.utils.GlusterLogger; import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; +import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; public class CreateVolumeWizard extends Wizard { private static final String title = "Gluster Management Console - Create Volume"; @@ -51,8 +52,17 @@ public class CreateVolumeWizard extends Wizard { try { volumesClient.createVolume(newVolume); + + // Set proper volume type before assign to model + VOLUME_TYPE volumetype = newVolume.getVolumeType(); + if (volumetype == VOLUME_TYPE.REPLICATE && newVolume.getBricks().size() > newVolume.getReplicaCount()) { + newVolume.setVolumeType(VOLUME_TYPE.DISTRIBUTED_REPLICATE); + } else if (volumetype == VOLUME_TYPE.STRIPE && newVolume.getBricks().size() > newVolume.getStripeCount()) { + newVolume.setVolumeType(VOLUME_TYPE.DISTRIBUTED_STRIPE); + } + handleSuccess(newVolume, volumesClient); - } catch(Exception e) { + } catch (Exception e) { String errMsg = e.getMessage(); // the error could be in to post-volume-create processing. check if this is the case. if (volumesClient.volumeExists(newVolume.getName())) { @@ -62,7 +72,7 @@ public class CreateVolumeWizard extends Wizard { return false; } } - + return true; } diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java index 9a456626..dfd0c669 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/views/VolumeSummaryView.java @@ -3,6 +3,7 @@ package com.gluster.storage.management.console.views; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; @@ -664,7 +665,7 @@ public class VolumeSummaryView extends ViewPart { || volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_REPLICATE) { replicaCount = (double) volume.getReplicaCount(); } - totalDiskSpace.setText("" + NumberUtil.formatNumber((getTotalDiskSpace() / 1024) / replicaCount)); + totalDiskSpace.setText("" + NumberUtil.formatNumber(getTotalDiskSpace() / 1024)); } private double getDiskSize(String serverName, String deviceName) { @@ -691,16 +692,39 @@ public class VolumeSummaryView extends ViewPart { } private double getTotalDiskSpace() { + List diskSizes = getVolumeDiskSizes(); + VOLUME_TYPE volumeType = volume.getVolumeType(); double diskSize = 0d; + if (volumeType == VOLUME_TYPE.DISTRIBUTE || volumeType == VOLUME_TYPE.STRIPE + || volumeType == VOLUME_TYPE.DISTRIBUTED_STRIPE) { + for (Double size : diskSizes) { + diskSize += size; + } + } else { // Replicate or distributed replicate + int replicaCount = volume.getReplicaCount(); + if (replicaCount == 0) { + replicaCount = Volume.DEFAULT_REPLICA_COUNT; + } + int startIndex = 0; + for (int i = 0; i < (diskSizes.size() / replicaCount); i++) { + startIndex = i * replicaCount; + diskSize += Collections.min(diskSizes.subList(startIndex, startIndex + replicaCount)); + } + } + return diskSize; + } + + private List getVolumeDiskSizes() { + List diskSizes = new ArrayList(); Device device; for (Brick brick : volume.getBricks()) { device = modelManager.getDeviceForBrickDir(brick); - if (device != null) { // In case of off line server, device becomes null - diskSize += getDiskSize(brick.getServerName(), device.getName()); - } + diskSizes.add( (device == null) ? 0d : getDiskSize(brick.getServerName(), device.getName()) ); } - return diskSize; + return diskSizes; } + + private void createDiskSpaceField(Composite section) { Label diskSpaceLabel = toolkit.createLabel(section, "Total Disk Space (GB): ", SWT.NONE); @@ -712,7 +736,7 @@ public class VolumeSummaryView extends ViewPart { replicaCount = (double) Volume.DEFAULT_REPLICA_COUNT; } totalDiskSpace = toolkit.createLabel(section, - "" + NumberUtil.formatNumber((getTotalDiskSpace() / 1024) / replicaCount), SWT.NONE); + "" + NumberUtil.formatNumber(getTotalDiskSpace() / 1024), SWT.NONE); toolkit.createLabel(section, "", SWT.NONE); // dummy } -- cgit