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