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

Reply via email to