anmolbabu has uploaded a new change for review.

Change subject: engine : Bll to pause geo-rep session
......................................................................

engine : Bll to pause geo-rep session

Bll to pause geo-rep session.

Change-Id: I38a0ecc89fa55b607a34468075825a5604d7a59a
Signed-off-by: Anmol Babu <anb...@redhat.com>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeGeoRepPauseCommand.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeGeoRepPauseCommandTest.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/GlusterVolumeGeoRepPauseParameters.java
3 files changed, 218 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/32667/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeGeoRepPauseCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeGeoRepPauseCommand.java
new file mode 100644
index 0000000..256d59e
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeGeoRepPauseCommand.java
@@ -0,0 +1,68 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import org.ovirt.engine.core.common.AuditLogType;
+import 
org.ovirt.engine.core.common.action.gluster.GlusterVolumeGeoRepPauseParameters;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import 
org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeGeoRepPauseVDSParameters;
+
+public class GlusterVolumeGeoRepPauseCommand extends 
GlusterVolumeCommandBase<GlusterVolumeGeoRepPauseParameters> {
+
+    GlusterVolumeGeoRepPauseParameters parameters;
+
+    public GlusterVolumeGeoRepPauseCommand(GlusterVolumeGeoRepPauseParameters 
params) {
+        super(params);
+    }
+
+    @Override
+    protected void setActionMessageParameters() {
+        
addCanDoActionMessage(VdcBllMessages.VAR_ACTION_GLUSTER_VOLUME_GEO_REP_PAUSE);
+        addCanDoActionMessage(VdcBllMessages.VAR__TYPE__GLUSTER_VOLUME);
+    }
+
+    @Override
+    protected boolean canDoAction() {
+        parameters = getParameters();
+        if (super.canDoAction()) {
+            GlusterVolumeEntity masterVolume = getGlusterVolume();
+            if (masterVolume.getStatus() == GlusterStatus.UP) {
+                VDS slaveVds = 
getVdsDAO().getByName(parameters.getRemoteHost());
+                if(slaveVds != null) {
+                    GlusterVolumeEntity slaveVolumeEntity = 
getGlusterVolumeDao().getByName(slaveVds.getVdsGroupId(), 
parameters.getRemoteVolumeName());
+                    return (slaveVolumeEntity == null ? false : 
slaveVolumeEntity.getStatus() == GlusterStatus.UP)
+                            && 
(masterVolume.getAdvancedDetails().getCapacityInfo().getFreeSize() < 
slaveVolumeEntity.getAdvancedDetails().getCapacityInfo().getFreeSize());
+                } else {
+                    // Host may not be monitored by ovirt.
+                    return true;
+                }
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    protected void executeCommand() {
+        VDSReturnValue returnValue = 
runVdsCommand(VDSCommandType.GlusterVolumeGeoRepPause, new 
GlusterVolumeGeoRepPauseVDSParameters(upServer.getId(), getGlusterVolumeName(), 
parameters.getRemoteHost(), parameters.getRemoteVolumeName(), 
parameters.isForce()));
+        setSucceeded(returnValue.getSucceeded());
+        if(!getSucceeded()) {
+            
handleVdsError(AuditLogType.GLUSTER_VOLUME_GEO_REP_PAUSE_FAILED_EXCEPTION, 
returnValue.getVdsError().getMessage());
+            return;
+        }
+    }
+
+    @Override
+    public AuditLogType getAuditLogTypeValue() {
+        if(getSucceeded()) {
+            return AuditLogType.GLUSTER_VOLUME_GEO_REP_PAUSE;
+        } else {
+            return AuditLogType.GLUSTER_VOLUME_GEO_REP_PAUSE_FAILED_EXCEPTION;
+        }
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeGeoRepPauseCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeGeoRepPauseCommandTest.java
new file mode 100644
index 0000000..77cac77
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeGeoRepPauseCommandTest.java
@@ -0,0 +1,103 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import 
org.ovirt.engine.core.common.action.gluster.GlusterVolumeGeoRepPauseParameters;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VDSStatus;
+import org.ovirt.engine.core.common.businessentities.gluster.AccessProtocol;
+import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
+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.GlusterVolumeSizeInfo;
+import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType;
+import org.ovirt.engine.core.common.businessentities.gluster.TransportType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.VdsDAO;
+import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
+
+@RunWith(MockitoJUnitRunner.class)
+public class GlusterVolumeGeoRepPauseCommandTest {
+    @Mock
+    GlusterVolumeDao volumeDao;
+
+    @Mock
+    VdsDAO vdsDao;
+
+    private static final Guid MASTER_VOLUME_ID = new 
Guid("c2cb2f73-fab3-4a42-93f0-d5e4c069a43e");
+    private static final Guid SLAVE_VOLUME_ID = new 
Guid("e2cb2f73-fab3-4a42-93f0-d5e4c069a43e");
+    private static final Guid SLAVE_CLUSTER_ID = new 
Guid("d2cb2f73-fab3-4a42-93f0-d5e4c069a43e");
+    private static final Guid MASTER_CLUSTER_ID = new 
Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
+    private static final String SLAVE_VOLUME = "slave-v1";
+    private static final String MASTER_VOLUME = "v1";
+
+    private GlusterVolumeGeoRepPauseCommand cmd;
+
+    private void prepareMocks(GlusterVolumeGeoRepPauseCommand command) {
+        doReturn(volumeDao).when(command).getGlusterVolumeDao();
+        doReturn(vdsDao).when(command).getVdsDAO();
+    }
+
+    private VDS getVds(VDSStatus status, Guid clusterId) {
+        VDS vds = new VDS();
+        vds.setId(Guid.newGuid());
+        vds.setVdsName("server1");
+        vds.setVdsGroupId(clusterId);
+        vds.setStatus(status);
+        return vds;
+    }
+
+    private GlusterVolumeEntity getGlusterVolume(Guid volumeId, GlusterStatus 
status,  GlusterVolumeSizeInfo size, Guid clusterId, String volumeName) {
+        GlusterVolumeEntity volumeEntity = new GlusterVolumeEntity();
+        GlusterVolumeAdvancedDetails details =new 
GlusterVolumeAdvancedDetails();
+        details.setCapacityInfo(size);
+        volumeEntity.setAdvancedDetails(details);
+        volumeEntity.setId(volumeId);
+        volumeEntity.setName(volumeName);
+        volumeEntity.addAccessProtocol(AccessProtocol.GLUSTER);
+        volumeEntity.addTransportType(TransportType.TCP);
+        volumeEntity.setVolumeType(GlusterVolumeType.DISTRIBUTE);
+        volumeEntity.setStatus(status);
+        volumeEntity.setClusterId(clusterId);
+        return volumeEntity;
+    }
+
+    @Test
+    public void canDoActionSucceeds() {
+        cmd = spy(new GlusterVolumeGeoRepPauseCommand(new 
GlusterVolumeGeoRepPauseParameters(MASTER_VOLUME_ID , "server1", SLAVE_VOLUME, 
true)));
+        prepareMocks(cmd);
+        doReturn(getGlusterVolume(SLAVE_VOLUME_ID, GlusterStatus.UP, new 
GlusterVolumeSizeInfo(2000000L, 1350000L, 650000L), SLAVE_CLUSTER_ID, 
SLAVE_VOLUME)).when(volumeDao).getByName(SLAVE_CLUSTER_ID, SLAVE_VOLUME);
+        doReturn(getGlusterVolume(MASTER_VOLUME_ID, GlusterStatus.UP, new 
GlusterVolumeSizeInfo(1000000L, 550000L, 450000L), MASTER_CLUSTER_ID, 
MASTER_VOLUME)).when(volumeDao).getById(MASTER_VOLUME_ID);
+        doReturn(getGlusterVolume(SLAVE_VOLUME_ID, GlusterStatus.UP, new 
GlusterVolumeSizeInfo(2000000L, 1350000L, 650000L), SLAVE_CLUSTER_ID, 
SLAVE_VOLUME)).when(volumeDao).getById(SLAVE_VOLUME_ID);
+        doReturn(getVds(VDSStatus.Up, 
MASTER_CLUSTER_ID)).when(cmd).getUpServer();
+        doReturn(getVds(VDSStatus.Up, 
SLAVE_CLUSTER_ID)).when(vdsDao).getByName("server1");
+        assertTrue(cmd.canDoAction());
+    }
+
+    @Test
+    public void canDoActionFailsOnLessSlaveSize() {
+        cmd = spy(new GlusterVolumeGeoRepPauseCommand(new 
GlusterVolumeGeoRepPauseParameters(MASTER_VOLUME_ID , "server1", SLAVE_VOLUME, 
true)));
+        prepareMocks(cmd);
+        doReturn(getGlusterVolume(SLAVE_VOLUME_ID, GlusterStatus.UP, new 
GlusterVolumeSizeInfo(2000000L, 450000L, 1550000L), SLAVE_CLUSTER_ID, 
SLAVE_VOLUME)).when(volumeDao).getByName(SLAVE_CLUSTER_ID, SLAVE_VOLUME);
+        doReturn(getGlusterVolume(MASTER_VOLUME_ID, GlusterStatus.UP, new 
GlusterVolumeSizeInfo(1000000L, 550000L, 450000L), MASTER_CLUSTER_ID, 
MASTER_VOLUME)).when(volumeDao).getById(MASTER_VOLUME_ID);
+        doReturn(getGlusterVolume(SLAVE_VOLUME_ID, GlusterStatus.UP, new 
GlusterVolumeSizeInfo(2000000L, 450000L, 1550000L), SLAVE_CLUSTER_ID, 
SLAVE_VOLUME)).when(volumeDao).getById(SLAVE_VOLUME_ID);
+        doReturn(getVds(VDSStatus.Up, 
SLAVE_CLUSTER_ID)).when(cmd).getUpServer();
+        doReturn(getVds(VDSStatus.Up, 
SLAVE_CLUSTER_ID)).when(vdsDao).getByName("server1");
+        boolean canDoAction = cmd.canDoAction();
+        assertFalse(canDoAction);
+    }
+
+    @Test
+    public void canDoActionFailsOnNull() {
+        cmd = spy(new GlusterVolumeGeoRepPauseCommand(new 
GlusterVolumeGeoRepPauseParameters()));
+        prepareMocks(cmd);
+        assertFalse(cmd.canDoAction());
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/GlusterVolumeGeoRepPauseParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/GlusterVolumeGeoRepPauseParameters.java
new file mode 100644
index 0000000..ebf8454
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/GlusterVolumeGeoRepPauseParameters.java
@@ -0,0 +1,47 @@
+package org.ovirt.engine.core.common.action.gluster;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class GlusterVolumeGeoRepPauseParameters extends 
GlusterVolumeParameters{
+
+    private static final long serialVersionUID = 1L;
+
+    String remoteHost;
+    String remoteVolumeName;
+    boolean force;
+
+    public GlusterVolumeGeoRepPauseParameters() {
+        super();
+    }
+
+    public GlusterVolumeGeoRepPauseParameters(Guid volumeId, String 
remoteHost, String remoteVolumeName, boolean force) {
+        super(volumeId);
+        this.remoteHost = remoteHost;
+        this.remoteVolumeName = remoteVolumeName;
+        this.force = force;
+    }
+
+    public String getRemoteHost() {
+        return remoteHost;
+    }
+
+    public void setRemoteHost(String remoteHost) {
+        this.remoteHost = remoteHost;
+    }
+
+    public String getRemoteVolumeName() {
+        return remoteVolumeName;
+    }
+
+    public void setRemoteVolumeName(String remoteVolumeName) {
+        this.remoteVolumeName = remoteVolumeName;
+    }
+
+    public boolean isForce() {
+        return force;
+    }
+
+    public void setForce(boolean force) {
+        this.force = force;
+    }
+}


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

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

Reply via email to