Shubhendu Tripathi has uploaded a new change for review.

Change subject: gluster: Query for remove brick async task status
......................................................................

gluster: Query for remove brick async task status

Query for remove brick async task status

Change-Id: If4ec67f058bc9198bb6e1dfc96d0677294d93e9e
Signed-off-by: Shubhendu Tripathi <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeRemoveBricksStatusQuery.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeRemoveBricksStatusQueryTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
3 files changed, 287 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/14/19114/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeRemoveBricksStatusQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeRemoveBricksStatusQuery.java
new file mode 100644
index 0000000..23273b5
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeRemoveBricksStatusQuery.java
@@ -0,0 +1,60 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import java.util.List;
+
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusEntity;
+import org.ovirt.engine.core.common.job.Step;
+import 
org.ovirt.engine.core.common.queries.gluster.GlusterVolumeQueriesParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import 
org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeRemoveBricksVDSParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+
+public class GetGlusterVolumeRemoveBricksStatusQuery<P extends 
GlusterVolumeQueriesParameters> extends GlusterQueriesCommandBase<P> {
+
+    private Guid clusterId;
+    private GlusterVolumeEntity volume;
+
+    public GetGlusterVolumeRemoveBricksStatusQuery(P params) {
+        super(params);
+    }
+
+    @Override
+    public void executeQueryCommand() {
+        clusterId = getParameters().getClusterId();
+        Guid volumeId = getParameters().getVolumeId();
+        if (volumeId != null) {
+            volume = getGlusterVolumeDao().getById(volumeId);
+            if (volume == null) {
+                throw new RuntimeException(String.format("Invalid volume id 
%s", volumeId));
+            }
+        }
+
+        getQueryReturnValue().setReturnValue(fetchAdvancedDetails());
+    }
+
+    private GlusterVolumeTaskStatusEntity fetchAdvancedDetails() {
+        VDSReturnValue returnValue =
+                
runVdsCommand(VDSCommandType.GetGlusterVolumeRemoveBricksStatus,
+                        new 
GlusterVolumeRemoveBricksVDSParameters(getUpServerId(clusterId),
+                                volume.getName(),
+                                volume.getBricks(),
+                                volume.getReplicaCount()));
+
+        // Set the volume re-balance start time
+        GlusterVolumeTaskStatusEntity entity = (GlusterVolumeTaskStatusEntity) 
returnValue.getReturnValue();
+        List<Step> stepsList = 
getDbFacade().getStepDao().getStepsByExternalId(volume.getAsyncTask().getStepId());
+        if (stepsList != null && !stepsList.isEmpty()) {
+            entity.setStartTime(stepsList.get(0).getStartTime());
+        }
+
+        return entity;
+    }
+
+    @Override
+    public DbFacade getDbFacade() {
+        return DbFacade.getInstance();
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeRemoveBricksStatusQueryTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeRemoveBricksStatusQueryTest.java
new file mode 100644
index 0000000..d4126bd
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeRemoveBricksStatusQueryTest.java
@@ -0,0 +1,226 @@
+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.Date;
+import java.util.List;
+
+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.asynctasks.gluster.GlusterAsyncTask;
+import org.ovirt.engine.core.common.asynctasks.gluster.GlusterTaskType;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VDSStatus;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusDetail;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusEntity;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusForHost;
+import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType;
+import org.ovirt.engine.core.common.job.JobExecutionStatus;
+import org.ovirt.engine.core.common.job.Step;
+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.StepDao;
+import org.ovirt.engine.core.dao.VdsDAO;
+import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
+
+public class GetGlusterVolumeRemoveBricksStatusQueryTest extends
+        AbstractQueryTest<GlusterVolumeQueriesParameters, 
GetGlusterVolumeRemoveBricksStatusQuery<GlusterVolumeQueriesParameters>> {
+
+    private static final Guid CLUSTER_ID = new 
Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
+    private static final String SERVER_1 = "server1";
+    private static final String SERVER_2 = "server2";
+    private static final Guid VOLUME_ID = Guid.newGuid();
+    private static final Guid SERVER_ID = Guid.newGuid();
+    private static final Guid STEP_ID = Guid.newGuid();
+    private GlusterVolumeTaskStatusEntity expectedVolumeStatusDetails;
+    private VdsDAO vdsDao;
+    private GlusterVolumeDao volumeDao;
+    private StepDao stepDao;
+    private ClusterUtils clusterUtils;
+    private DbFacade dbFacade;
+
+    @Before
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        setupExpectedVolume();
+        setupMock();
+    }
+
+    private void setupExpectedVolume() {
+        expectedVolumeStatusDetails = new GlusterVolumeTaskStatusEntity();
+        
expectedVolumeStatusDetails.setHostwiseStatusDetails(getHostwiseStatusDetails());
+        expectedVolumeStatusDetails.setStatusSummary(getStatusSummary());
+        expectedVolumeStatusDetails.setStartTime(new Date());
+        expectedVolumeStatusDetails.setStatusTime(new Date());
+    }
+
+    private List<GlusterVolumeTaskStatusForHost> getHostwiseStatusDetails() {
+        List<GlusterVolumeTaskStatusForHost> statusList = new 
ArrayList<GlusterVolumeTaskStatusForHost>();
+
+        GlusterVolumeTaskStatusForHost status1 = new 
GlusterVolumeTaskStatusForHost();
+        status1.setHostName(SERVER_1);
+        status1.setFilesScanned(100);
+        status1.setFilesMoved(100);
+        status1.setFilesFailed(0);
+        status1.setFilesScanned(100);
+        status1.setFilesSkipped(0);
+        status1.setRunTime(20);
+        status1.setStatus(JobExecutionStatus.FINISHED);
+        status1.setTotalSizeMoved(1024);
+        statusList.add(status1);
+
+        GlusterVolumeTaskStatusForHost status2 = new 
GlusterVolumeTaskStatusForHost();
+        status2.setHostName(SERVER_2);
+        status2.setFilesScanned(100);
+        status2.setFilesMoved(100);
+        status2.setFilesFailed(0);
+        status2.setFilesScanned(100);
+        status2.setFilesSkipped(0);
+        status2.setRunTime(20);
+        status2.setStatus(JobExecutionStatus.FINISHED);
+        status2.setTotalSizeMoved(1024);
+        statusList.add(status2);
+
+        return statusList;
+    }
+
+    private GlusterVolumeTaskStatusDetail getStatusSummary() {
+        GlusterVolumeTaskStatusDetail summary = new 
GlusterVolumeTaskStatusDetail();
+        summary.setFilesMoved(200);
+        summary.setFilesFailed(0);
+        summary.setFilesScanned(200);
+        summary.setFilesSkipped(0);
+        summary.setRunTime(40);
+        summary.setStatus(JobExecutionStatus.FINISHED);
+        summary.setTotalSizeMoved(2048);
+
+        return summary;
+    }
+
+    private List<GlusterBrickEntity> getBricks() {
+        GlusterBrickEntity brick1 = new GlusterBrickEntity();
+        brick1.setId(Guid.newGuid());
+        brick1.setServerId(SERVER_ID);
+        brick1.setVolumeId(VOLUME_ID);
+
+        GlusterBrickEntity brick2 = new GlusterBrickEntity();
+        brick2.setId(Guid.newGuid());
+        brick2.setServerId(SERVER_ID);
+        brick2.setVolumeId(VOLUME_ID);
+
+        List<GlusterBrickEntity> bricksList = new 
ArrayList<GlusterBrickEntity>();
+        bricksList.add(brick1);
+        bricksList.add(brick2);
+
+        return bricksList;
+    }
+
+    private GlusterVolumeEntity getVolume() {
+        GlusterVolumeEntity volume = new GlusterVolumeEntity();
+        volume.setName("Vol1");
+        volume.setId(VOLUME_ID);
+        volume.setReplicaCount(2);
+        volume.setBricks(getBricks());
+        volume.setVolumeType(GlusterVolumeType.DISTRIBUTE);
+        volume.setAsyncTask(getAsyncTask());
+        return volume;
+    }
+
+    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;
+    }
+
+    private List<Step> getStepsList() {
+        List<Step> stepsList = new ArrayList<Step>();
+        Step stp = new Step();
+        stp.setId(STEP_ID);
+        stp.setStartTime(new Date());
+        stepsList.add(stp);
+
+        return stepsList;
+    }
+
+    private GlusterAsyncTask getAsyncTask() {
+        GlusterAsyncTask asyncTask = new GlusterAsyncTask();
+        asyncTask.setStepId(STEP_ID);
+        asyncTask.setType(GlusterTaskType.REBALANCE_VOLUME);
+        asyncTask.setStatus(JobExecutionStatus.FINISHED);
+        asyncTask.setMessage("test_msg");
+        asyncTask.setTaskId(Guid.newGuid());
+
+        return asyncTask;
+    }
+
+    private void setupMock() {
+        clusterUtils = mock(ClusterUtils.class);
+        vdsDao = mock(VdsDAO.class);
+        volumeDao = mock(GlusterVolumeDao.class);
+        stepDao = mock(StepDao.class);
+        dbFacade = mock(DbFacade.class);
+
+        doReturn(dbFacade).when(getQuery()).getDbFacade();
+        doReturn(vdsDao).when(getQuery()).getVdsDao();
+        doReturn(volumeDao).when(getQuery()).getGlusterVolumeDao();
+        doReturn(stepDao).when(dbFacade).getStepDao();
+        doReturn(CLUSTER_ID).when(getQueryParameters()).getClusterId();
+        doReturn(VOLUME_ID).when(getQueryParameters()).getVolumeId();
+        when(volumeDao.getById(VOLUME_ID)).thenReturn(getVolume());
+        
when(stepDao.getStepsByExternalId(any(Guid.class))).thenReturn(getStepsList());
+
+        VDSReturnValue returnValue = new VDSReturnValue();
+        returnValue.setSucceeded(true);
+        returnValue.setReturnValue(expectedVolumeStatusDetails);
+
+        
doReturn(returnValue).when(getQuery()).runVdsCommand(eq(VDSCommandType.GetGlusterVolumeRemoveBricksStatus),
+                any(VDSParametersBase.class));
+    }
+
+    @Test
+    public void testQueryForStatusDetails() {
+        doReturn(VOLUME_ID).when(getQueryParameters()).getVolumeId();
+        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();
+        GlusterVolumeTaskStatusEntity volumeStatusDetails =
+                (GlusterVolumeTaskStatusEntity) 
getQuery().getQueryReturnValue().getReturnValue();
+
+        assertNotNull(volumeStatusDetails);
+        assertEquals(expectedVolumeStatusDetails, volumeStatusDetails);
+
+        verify(volumeDao, times(1)).getById(VOLUME_ID);
+    }
+
+
+    @Test (expected = RuntimeException.class)
+    public void testQueryForInvalidVolumeId() {
+        doReturn(Guid.Empty).when(getQueryParameters()).getVolumeId();
+        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/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index cd67bbe..538aeb3 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -264,6 +264,7 @@
     GetGlusterServerServicesByClusterId,
     GetGlusterServerServicesByServerId,
     GetGlusterClusterServiceByClusterId,
+    GetGlusterVolumeRemoveBricksStatus,
 
     GetDefaultConfigurationVersion(VdcQueryAuthType.User),
     OsRepository(VdcQueryAuthType.User),


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If4ec67f058bc9198bb6e1dfc96d0677294d93e9e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Shubhendu Tripathi <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to