Shubhendu Tripathi has uploaded a new change for review.

Change subject: gluster: Query to get the gluster volume capacity details
......................................................................

gluster: Query to get the gluster volume capacity details

Introduced a query to get the gluster volume capacity details like
total, used and free capacity.

Change-Id: Ib9503dfb8d6b08bc516fe80406720a62fae7b6a0
Signed-off-by: Shubhendu Tripathi <shtri...@redhat.com>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQuery.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQueryTest.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/GlusterVolumeCapacityQueryParameters.java
3 files changed, 248 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/17/20317/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQuery.java
new file mode 100644
index 0000000..76195d8
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQuery.java
@@ -0,0 +1,78 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSizeInfo;
+import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import 
org.ovirt.engine.core.common.queries.gluster.GlusterVolumeCapacityQueryParameters;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import 
org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeVDSParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
+
+public class GetGlusterVolumeSizeInfoQuery<P extends 
GlusterVolumeCapacityQueryParameters> extends GlusterQueriesCommandBase<P> {
+    private Guid clusterId;
+    private List<String> volumeNames = new ArrayList<>();
+
+    public GetGlusterVolumeSizeInfoQuery(P params) {
+        super(params);
+    }
+
+    @Override
+    public void executeQueryCommand() {
+        clusterId = getParameters().getClusterId();
+        List<Guid> volumeIds = getParameters().getVolumeIds();
+
+        for (Guid volumeId : volumeIds) {
+            if (volumeId != null) {
+                GlusterVolumeEntity volume = 
getGlusterVolumeDao().getById(volumeId);
+                if (volume == null) {
+                    throw new 
RuntimeException(VdcBllMessages.ACTION_TYPE_FAILED_GLUSTER_VOLUME_INVALID.toString());
+                }
+                volumeNames.add(volume.getName());
+            }
+        }
+
+        getQueryReturnValue().setReturnValue(fetchVolumeCapacityDetails());
+    }
+
+    private Map<String, GlusterVolumeSizeInfo> fetchVolumeCapacityDetails() {
+        final Map<String, GlusterVolumeSizeInfo> sizeInfoMap = new HashMap<>();
+        List<Callable<Pair<String, VDSReturnValue>>> queriesList = new 
ArrayList<Callable<Pair<String, VDSReturnValue>>>();
+
+        // Form the queries list
+        for (final String volumeName : volumeNames) {
+            queriesList.add(new Callable<Pair<String, VDSReturnValue>>() {
+                @Override
+                public Pair<String, VDSReturnValue> call() {
+                    VDSReturnValue returnValue =
+                            
runVdsCommand(VDSCommandType.GetGlusterVolumeSizeInfo,
+                                    new 
GlusterVolumeVDSParameters(getUpServerId(clusterId), volumeName));
+                    Pair<String, VDSReturnValue> pairRetVal = new Pair<String, 
VDSReturnValue>(volumeName, returnValue);
+                    sizeInfoMap.put(volumeName, 
(GlusterVolumeSizeInfo)returnValue.getReturnValue());
+                    return pairRetVal;
+                }
+            });
+        }
+
+        // Execute the queries
+        if (!queriesList.isEmpty()) {
+            ThreadPoolUtil.invokeAll(queriesList);
+        }
+
+        return sizeInfoMap;
+    }
+
+    @Override
+    public DbFacade getDbFacade() {
+        return DbFacade.getInstance();
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQueryTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQueryTest.java
new file mode 100644
index 0000000..698de94
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeSizeInfoQueryTest.java
@@ -0,0 +1,139 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.ovirt.engine.core.bll.AbstractQueryTest;
+import org.ovirt.engine.core.bll.utils.ClusterUtils;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VDSStatus;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSizeInfo;
+import 
org.ovirt.engine.core.common.queries.gluster.GlusterVolumeCapacityQueryParameters;
+import 
org.ovirt.engine.core.common.queries.gluster.GlusterVolumeQueriesParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSParametersBase;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.VdsDAO;
+import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
+
+public class GetGlusterVolumeSizeInfoQueryTest extends 
AbstractQueryTest<GlusterVolumeCapacityQueryParameters, 
GetGlusterVolumeSizeInfoQuery<GlusterVolumeCapacityQueryParameters>> {
+
+    private static final Guid CLUSTER_ID = new 
Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
+    private static final Guid VOLUME_ID_1 = Guid.newGuid();
+    private static final Guid VOLUME_ID_2 = Guid.newGuid();
+    private static final Guid SERVER_ID = Guid.newGuid();
+    private ClusterUtils clusterUtils;
+    private GlusterVolumeSizeInfo expectedVolumeSizeInfo1;
+    private GlusterVolumeSizeInfo expectedVolumeSizeInfo2;
+    private GlusterVolumeDao volumeDao;
+    private VdsDAO vdsDao;
+    private DbFacade dbFacade;
+
+    @Before
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        setupExpectedVolumeSizeInfos();
+        setupMock();
+    }
+
+    private void setupExpectedVolumeSizeInfos() {
+        expectedVolumeSizeInfo1 = new GlusterVolumeSizeInfo();
+        expectedVolumeSizeInfo1.setTotalSize(200 * 1024 * 1024 * 1024);  // 
200 GB
+        expectedVolumeSizeInfo1.setUsedSize(150 * 1024 * 1024 * 1024);   // 
150 GB
+        expectedVolumeSizeInfo1.setFreeSize(50 * 1024 * 1024 * 1024);    // 50 
GB
+
+        expectedVolumeSizeInfo2 = new GlusterVolumeSizeInfo();
+        expectedVolumeSizeInfo2.setTotalSize(100 * 1024 * 1024 * 1024);  // 
100 GB
+        expectedVolumeSizeInfo2.setUsedSize(50 * 1024 * 1024 * 1024);    // 50 
GB
+        expectedVolumeSizeInfo2.setFreeSize(10 * 1024 * 1024 * 1024);    // 10 
GB
+    }
+
+    private List<Guid> getVolumeIds() {
+        List<Guid> volumeIds = new ArrayList<>();
+        volumeIds.add(VOLUME_ID_1);
+        volumeIds.add(VOLUME_ID_2);
+        return volumeIds;
+    }
+
+    private GlusterVolumeEntity getVolume(Guid volId) {
+        GlusterVolumeEntity volume = new GlusterVolumeEntity();
+        volume.setId(volId);
+        return volume;
+    }
+
+    private void setupMock() {
+        clusterUtils = mock(ClusterUtils.class);
+        vdsDao = mock(VdsDAO.class);
+        volumeDao = mock(GlusterVolumeDao.class);
+        dbFacade = mock(DbFacade.class);
+
+        doReturn(dbFacade).when(getQuery()).getDbFacade();
+        doReturn(vdsDao).when(getQuery()).getVdsDao();
+        doReturn(volumeDao).when(getQuery()).getGlusterVolumeDao();
+        doReturn(CLUSTER_ID).when(getQueryParameters()).getClusterId();
+        doReturn(getVolumeIds()).when(getQueryParameters()).getVolumeIds();
+        
when(volumeDao.getById(VOLUME_ID_1)).thenReturn(getVolume(VOLUME_ID_1));
+        
when(volumeDao.getById(VOLUME_ID_2)).thenReturn(getVolume(VOLUME_ID_2));
+
+        VDSReturnValue returnValue = new VDSReturnValue();
+        returnValue.setSucceeded(true);
+        List<GlusterVolumeSizeInfo> expectedVolumeSizeInfos = new 
ArrayList<>();
+        expectedVolumeSizeInfos.add(expectedVolumeSizeInfo1);
+        expectedVolumeSizeInfos.add(expectedVolumeSizeInfo2);
+        returnValue.setReturnValue(expectedVolumeSizeInfos);
+        
doReturn(returnValue).when(getQuery()).runVdsCommand(eq(VDSCommandType.GetGlusterVolumeSizeInfo),
 any(VDSParametersBase.class));
+    }
+
+    private VDS getVds(VDSStatus status) {
+        VDS vds = new VDS();
+        vds.setId(Guid.newGuid());
+        vds.setVdsName("gfs1");
+        vds.setVdsGroupId(CLUSTER_ID);
+        vds.setStatus(status);
+
+        return vds;
+    }
+
+    @Test
+    public void testQueryForVolumeSizeInfo() {
+        doReturn(getVolumeIds()).when(getQueryParameters()).getVolumeIds();
+        doReturn(clusterUtils).when(getQuery()).getClusterUtils();
+        when(vdsDao.get(SERVER_ID)).thenReturn(getVds(VDSStatus.Up));
+        
when(clusterUtils.getUpServer(CLUSTER_ID)).thenReturn(getVds(VDSStatus.Up));
+
+        getQuery().executeQueryCommand();
+        Map<String, GlusterVolumeSizeInfo> volumeSizeInfos = (Map<String, 
GlusterVolumeSizeInfo>)getQuery().getQueryReturnValue().getReturnValue();
+
+        assertNotNull(volumeSizeInfos);
+        assertEquals(expectedVolumeSizeInfo1, 
volumeSizeInfos.get(VOLUME_ID_1));
+        assertEquals(expectedVolumeSizeInfo2, 
volumeSizeInfos.get(VOLUME_ID_2));
+
+        verify(volumeDao, times(1)).getById(VOLUME_ID_1);
+        verify(volumeDao, times(1)).getById(VOLUME_ID_2);
+    }
+
+    @Test (expected = RuntimeException.class)
+    public void testQueryForInvalidVolumeId() {
+        doReturn(new 
ArrayList<>().add(null)).when(getQueryParameters()).getVolumeIds();
+        doReturn(null).when(volumeDao).getById(Guid.Empty);
+
+        getQuery().executeQueryCommand();
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/GlusterVolumeCapacityQueryParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/GlusterVolumeCapacityQueryParameters.java
new file mode 100644
index 0000000..e9dfce7
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/GlusterVolumeCapacityQueryParameters.java
@@ -0,0 +1,31 @@
+package org.ovirt.engine.core.common.queries.gluster;
+
+import java.util.List;
+
+import org.ovirt.engine.core.compat.Guid;
+
+/**
+ * Parameter class with volume id as parameter which extends from 
GlusterParameters. <br>
+ * This will be used by gluster volume profile info command.
+ */
+public class GlusterVolumeCapacityQueryParameters extends GlusterParameters {
+
+    private static final long serialVersionUID = 199106704417008718L;
+    private List<Guid> volumeIds;
+
+    public GlusterVolumeCapacityQueryParameters() {
+    }
+
+    public GlusterVolumeCapacityQueryParameters(Guid clusterId, List<Guid> 
volumeIdsList) {
+        super(clusterId);
+        setVolumeIds(volumeIdsList);
+    }
+
+    public List<Guid> getVolumeIds() {
+        return volumeIds;
+    }
+
+    public void setVolumeIds(List<Guid> volumeIdsList) {
+        this.volumeIds = volumeIdsList;
+    }
+}


-- 
To view, visit http://gerrit.ovirt.org/20317
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib9503dfb8d6b08bc516fe80406720a62fae7b6a0
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Shubhendu Tripathi <shtri...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to