Ramesh N has uploaded a new change for review. Change subject: gluster: update volume capacity info in sync job ......................................................................
gluster: update volume capacity info in sync job Update the volume capacity information as part of GlusterSyncJob. It also updates the brick details like total space and free space as part of refreshing Heavy Weight Data. Change-Id: Ifd187eb59ab83c426db7e9ba48a04ae7e0bef0b9 Signed-off-by: Ramesh Nachimuthu <rnach...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java 2 files changed, 77 insertions(+), 17 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/46/24446/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java index fc14cc5..234ea3e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java @@ -20,6 +20,7 @@ import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.gluster.BrickDetails; +import org.ovirt.engine.core.common.businessentities.gluster.BrickProperties; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterServer; import org.ovirt.engine.core.common.businessentities.gluster.GlusterServerInfo; @@ -789,7 +790,7 @@ if (volume.isOnline()) { acquireLock(cluster.getId()); try { - refreshBrickStatuses(upServer, volume); + refreshVolumeDetails(upServer, volume); } catch (Exception e) { log.errorFormat("Error while refreshing brick statuses for volume {0} of cluster {1}", volume.getName(), @@ -802,19 +803,50 @@ } } - private void refreshBrickStatuses(VDS upServer, GlusterVolumeEntity volume) { + public void refreshVolumeDetails(VDS upServer, GlusterVolumeEntity volume) { List<GlusterBrickEntity> bricksToUpdate = new ArrayList<GlusterBrickEntity>(); - Map<Guid, GlusterStatus> brickStatusMap = - getBrickStatusMap(getVolumeAdvancedDetails(upServer, volume.getClusterId(), volume.getName())); - for (GlusterBrickEntity brick : volume.getBricks()) { - GlusterStatus fetchedStatus = brickStatusMap.get(brick.getId()); - // if fetchedStatus is null, it means this is a new brick added from gluster cli and doesn't exist in engine - // DB yet. Don't do anything, wait for it to be added by the 'lightweight' refresh job - if (fetchedStatus != null && fetchedStatus != brick.getStatus()) { - logBrickStatusChange(volume, brick, fetchedStatus); - brick.setStatus(fetchedStatus); - bricksToUpdate.add(brick); + List<GlusterBrickEntity> brickPropertiesToUpdate = new ArrayList<GlusterBrickEntity>(); + List<GlusterBrickEntity> brickPropertiesToAdd = new ArrayList<GlusterBrickEntity>(); + + GlusterVolumeAdvancedDetails volumeAdvancedDetails = getVolumeAdvancedDetails(upServer, volume.getClusterId(), volume.getName()); + + if (volumeAdvancedDetails.getCapacityInfo() != null) { + if (volume.getAdvancedDetails().getCapacityInfo() == null) { + getVolumeDao().addVolumeCapacityInfo(volumeAdvancedDetails.getCapacityInfo()); + } else { + getVolumeDao().updateVolumeCapacityInfo(volumeAdvancedDetails.getCapacityInfo()); } + } + + Map<Guid, BrickProperties> brickPropertiesMap = + getBrickPropertiesMap(volumeAdvancedDetails); + for (GlusterBrickEntity brick : volume.getBricks()) { + BrickProperties brickProperties = brickPropertiesMap.get(brick.getId()); + if (brickProperties != null) { + if (brickProperties.getStatus() != brick.getStatus()) { + logBrickStatusChange(volume, brick, brickProperties.getStatus()); + brick.setStatus(brickProperties.getStatus()); + bricksToUpdate.add(brick); + } + if (brick.getBrickProperties() == null) { + BrickDetails brickDetails = new BrickDetails(); + brickDetails.setBrickProperties(brickProperties); + brick.setBrickDetails(brickDetails); + brickPropertiesToAdd.add(brick); + } else if (brickProperties.getTotalSize() != brick.getBrickProperties().getTotalSize() + || brickProperties.getFreeSize() != brick.getBrickProperties().getFreeSize()) { + brick.getBrickDetails().setBrickProperties(brickProperties); + brickPropertiesToUpdate.add(brick); + } + } + } + + if (!brickPropertiesToAdd.isEmpty()) { + getBrickDao().addBrickProperties(brickPropertiesToAdd); + } + + if (!brickPropertiesToUpdate.isEmpty()) { + getBrickDao().updateBrickProperties(brickPropertiesToUpdate); } if (!bricksToUpdate.isEmpty()) { @@ -836,11 +868,12 @@ }); } - private Map<Guid, GlusterStatus> getBrickStatusMap(GlusterVolumeAdvancedDetails volumeDetails) { - Map<Guid, GlusterStatus> brickStatusMap = new HashMap<Guid, GlusterStatus>(); + private Map<Guid, BrickProperties> getBrickPropertiesMap(GlusterVolumeAdvancedDetails volumeDetails) { + Map<Guid, BrickProperties> brickStatusMap = new HashMap<Guid, BrickProperties>(); for (BrickDetails brickDetails : volumeDetails.getBrickDetails()) { - brickStatusMap.put(brickDetails.getBrickProperties().getBrickId(), brickDetails.getBrickProperties() - .getStatus()); + if (brickDetails.getBrickProperties().getBrickId() != null) { + brickStatusMap.put(brickDetails.getBrickProperties().getBrickId(), brickDetails.getBrickProperties()); + } } return brickStatusMap; } @@ -851,7 +884,7 @@ clusterId, volumeName, null, - false)); + false, true)); return result.getSucceeded() ? (GlusterVolumeAdvancedDetails) result.getReturnValue() : null; } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java index 4baad45..663da38 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java @@ -42,6 +42,7 @@ import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeAdvancedDetails; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSizeInfo; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType; import org.ovirt.engine.core.common.businessentities.gluster.PeerStatus; import org.ovirt.engine.core.common.businessentities.gluster.TransportType; @@ -188,10 +189,20 @@ private GlusterVolumeEntity createDistVol(String volName, Guid volId) { GlusterVolumeEntity vol = createVolume(volName, volId); + vol.getAdvancedDetails().setCapacityInfo(getCapacityInfo(volId)); vol.addBrick(createBrick(volId, existingServer1, DIST_BRICK_D1)); vol.addBrick(createBrick(volId, existingServer1, DIST_BRICK_D2)); existingVolumes.add(vol); return vol; + } + + private GlusterVolumeSizeInfo getCapacityInfo(Guid volId) { + GlusterVolumeSizeInfo capacityInfo = new GlusterVolumeSizeInfo(); + capacityInfo.setVolumeId(volId); + capacityInfo.setTotalSize(90000L); + capacityInfo.setUsedSize(90000L); + capacityInfo.setFreeSize(10000L); + return capacityInfo; } private GlusterVolumeEntity createReplVol() { @@ -489,6 +500,12 @@ private GlusterVolumeAdvancedDetails getVolumeAdvancedDetails(GlusterVolumeEntity volume) { GlusterVolumeAdvancedDetails volDetails = new GlusterVolumeAdvancedDetails(); + GlusterVolumeSizeInfo capacityInfo = new GlusterVolumeSizeInfo(); + capacityInfo.setVolumeId(volume.getId()); + capacityInfo.setTotalSize(600000L); + capacityInfo.setFreeSize(200000L); + capacityInfo.setUsedSize(400000L); + volDetails.setCapacityInfo(capacityInfo); List<BrickDetails> brickDetailsList = new ArrayList<BrickDetails>(); for (GlusterBrickEntity brick : volume.getBricks()) { @@ -628,6 +645,9 @@ CLUSTER_ID, existingDistVol.getName()); + // Update capacity info + inOrder.verify(volumeDao, mode) + .updateVolumeCapacityInfo(getVolumeAdvancedDetails(existingDistVol).getCapacityInfo()); // release lock on the cluster inOrder.verify(glusterManager, mode).releaseLock(CLUSTER_ID); @@ -639,6 +659,13 @@ CLUSTER_ID, existingReplVol.getName()); + // Add Capacity Info + inOrder.verify(volumeDao, mode) + .addVolumeCapacityInfo(getVolumeAdvancedDetails(existingReplVol).getCapacityInfo()); + + // Add Capacity Info + inOrder.verify(brickDao, mode).addBrickProperties(any(List.class)); + // update brick status inOrder.verify(brickDao, mode).updateBrickStatuses(argThat(hasBricksWithChangedStatus())); -- To view, visit http://gerrit.ovirt.org/24446 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifd187eb59ab83c426db7e9ba48a04ae7e0bef0b9 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Ramesh N <rnach...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches