Selvasundaram has uploaded a new change for review. Change subject: engine: Query to fetch the newly added Gluster servers ......................................................................
engine: Query to fetch the newly added Gluster servers Change-Id: I0e010683c221abeabbb2e427a86bcf155b89b68f Signed-off-by: Selvasundaram <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetAddedGlusterServersQuery.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetAddedGlusterServersQueryTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java 4 files changed, 245 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/56/7456/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetAddedGlusterServersQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetAddedGlusterServersQuery.java new file mode 100644 index 0000000..8b75c2b --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetAddedGlusterServersQuery.java @@ -0,0 +1,93 @@ +package org.ovirt.engine.core.bll.gluster; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.exception.ExceptionUtils; +import org.ovirt.engine.core.bll.Backend; +import org.ovirt.engine.core.bll.QueriesCommandBase; +import org.ovirt.engine.core.bll.utils.ClusterUtils; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterServerInfo; +import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend; +import org.ovirt.engine.core.common.queries.gluster.GlusterParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase; +import org.ovirt.engine.core.utils.hostinstall.VdsInstallerSSH; + +/** + * Query to get Added Gluster Servers + */ +public class GetAddedGlusterServersQuery<P extends GlusterParameters> extends QueriesCommandBase<P> { + + public GetAddedGlusterServersQuery(P params) { + super(params); + } + + @Override + @SuppressWarnings("unchecked") + protected void executeQueryCommand() { + VDSReturnValue returnValue = getBackendInstance().RunVdsCommand(VDSCommandType.GlusterServersList, + new VdsIdVDSCommandParametersBase(getClusterUtils() + .getUpServer(getParameters().getClusterId()) + .getId())); + + Map<String, String> glusterServers = + getAddedGlusterServers((List<GlusterServerInfo>) returnValue.getReturnValue()); + getQueryReturnValue().setReturnValue(glusterServers); + } + + private Map<String, String> getAddedGlusterServers(List<GlusterServerInfo> glusterServers) { + Map<String, String> serversAndFingerprint = new HashMap<String, String>(); + List<VDS> serversList = getClusterUtils().getVdsDao().getAllForVdsGroup(getParameters().getClusterId()); + + for (GlusterServerInfo server : glusterServers) { + if (!serverExists(serversList, server)) { + serversAndFingerprint.put(server.getHostnameOrIp(), getServerFingerprint(server.getHostnameOrIp())); + } + } + return serversAndFingerprint; + } + + private boolean serverExists(List<VDS> serversList, GlusterServerInfo glusterServer) { + for (VDS server : serversList) { + String serverHostnameOrIp = + server.gethost_name().isEmpty() ? server.getManagmentIp() : server.gethost_name(); + if (serverHostnameOrIp.equalsIgnoreCase(glusterServer.getHostnameOrIp())) { + return true; + } + } + return false; + } + + private String getServerFingerprint(String hostnameOrIp) { + VdsInstallerSSH sshWrapper = getVdsInstallerSSHInstance(); + String fingerPrint = ""; + try { + fingerPrint = sshWrapper.getServerKeyFingerprint(hostnameOrIp); + } catch (Throwable e) { + log.errorFormat("Could not fetch fingerprint of host {0} with message: {1}", + hostnameOrIp, + ExceptionUtils.getMessage(e)); + } finally { + sshWrapper.shutdown(); + } + return fingerPrint; + } + + public VdsInstallerSSH getVdsInstallerSSHInstance() { + return new VdsInstallerSSH(); + } + + public ClusterUtils getClusterUtils() { + return ClusterUtils.getInstance(); + } + + public VDSBrokerFrontend getBackendInstance() { + return Backend.getInstance() + .getResourceManager(); + } + +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetAddedGlusterServersQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetAddedGlusterServersQueryTest.java new file mode 100644 index 0000000..730eb51 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetAddedGlusterServersQueryTest.java @@ -0,0 +1,149 @@ +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.when; + +import java.util.ArrayList; +import java.util.HashMap; +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.GlusterServerInfo; +import org.ovirt.engine.core.common.businessentities.gluster.PeerStatus; +import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend; +import org.ovirt.engine.core.common.queries.gluster.GlusterParameters; +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.dao.VdsDAO; +import org.ovirt.engine.core.utils.hostinstall.VdsInstallerSSH; + +public class GetAddedGlusterServersQueryTest extends AbstractQueryTest<GlusterParameters, GetAddedGlusterServersQuery<GlusterParameters>> { + + List<VDS> serversList; + List<GlusterServerInfo> expectedServers; + GlusterParameters params; + private Guid CLUSTER_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1"); + private Guid server_id1 = new Guid("85c42b0d-c2b7-424a-ae72-5174c25da40b"); + private Guid server_id2 = new Guid("6a697a38-cc82-4399-a6fb-0ec79c0ff1d5"); + private String fingerPrint = "b5:ad:16:19:06:9f:b3:41:69:eb:1c:42:1d:12:b5:31"; + VDSBrokerFrontend vdsBrokerFrontend; + VdsInstallerSSH vdsInstallerMock; + VdsDAO vdsDaoMock; + + ClusterUtils clusterUtils; + + private VDS getVds(VDSStatus status) { + VDS vds = new VDS(); + vds.setId(new Guid()); + vds.setvds_name("gfs1"); + vds.setvds_group_id(CLUSTER_ID); + vds.setstatus(status); + return vds; + } + + private void setupParams() { + params = new GlusterParameters(CLUSTER_ID); + } + + private void setupServersList() { + serversList = new ArrayList<VDS>(); + VDS server = new VDS(); + server.setvds_group_id(CLUSTER_ID); + server.setvds_group_name("default"); + server.setId(server_id1); + server.setvds_name("test_server1"); + server.sethost_name("test_server1"); + serversList.add(server); + + server = new VDS(); + server.setvds_group_id(CLUSTER_ID); + server.setvds_group_name("default"); + server.setId(server_id2); + server.setvds_name("test_server2"); + server.sethost_name("test_server2"); + serversList.add(server); + } + + private void setupExpectedGlusterServersInfo() { + expectedServers = new ArrayList<GlusterServerInfo>(); + GlusterServerInfo server = new GlusterServerInfo(); + server.setUuid(server_id1); + server.setHostnameOrIp("test_server1"); + server.setStatus(PeerStatus.CONNECTED); + expectedServers.add(server); + server = new GlusterServerInfo(); + server.setUuid(server_id2); + server.setHostnameOrIp("server2"); + server.setStatus(PeerStatus.DISCONNECTED); + expectedServers.add(server); + } + + private void setupMock() throws Exception { + vdsBrokerFrontend = mock(VDSBrokerFrontend.class); + clusterUtils = mock(ClusterUtils.class); + vdsDaoMock = mock(VdsDAO.class); + vdsInstallerMock = mock(VdsInstallerSSH.class); + + doReturn(vdsBrokerFrontend).when(getQuery()).getBackendInstance(); + doReturn(clusterUtils).when(getQuery()).getClusterUtils(); + doReturn(getVds(VDSStatus.Up)).when(clusterUtils).getUpServer(CLUSTER_ID); + + VDSReturnValue returnValue = getVDSReturnValue(); + when(vdsBrokerFrontend.RunVdsCommand(eq(VDSCommandType.GlusterServersList), + any(VDSParametersBase.class))).thenReturn(returnValue); + doReturn(params.getClusterId()).when(getQueryParameters()).getClusterId(); + + doReturn(vdsDaoMock).when(clusterUtils).getVdsDao(); + doReturn(serversList).when(vdsDaoMock).getAllForVdsGroup(CLUSTER_ID); + + doReturn(vdsInstallerMock).when(getQuery()).getVdsInstallerSSHInstance(); + doReturn(fingerPrint).when(vdsInstallerMock).getServerKeyFingerprint("server2"); + } + + private VDSReturnValue getVDSReturnValue() { + VDSReturnValue returnValue = new VDSReturnValue(); + returnValue.setSucceeded(true); + returnValue.setReturnValue(expectedServers); + return returnValue; + } + + private Map<String, String> getAddedServers() { + Map<String, String> servers = new HashMap<String, String>(); + servers.put("server2", fingerPrint); + return servers; + } + + @Before + @Override + public void setUp() throws Exception { + super.setUp(); + setupParams(); + setupServersList(); + setupExpectedGlusterServersInfo(); + setupMock(); + } + + @SuppressWarnings("unchecked") + @Test + public void testExecuteQueryCommnad() { + getQuery().executeQueryCommand(); + Map<String, String> servers = + (Map<String, String>) getQuery().getQueryReturnValue().getReturnValue(); + + assertNotNull(servers); + assertEquals(getAddedServers(), servers); + } +} 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 767e7bf..8ee7f2a 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 @@ -275,6 +275,7 @@ GetGlusterVolumeOptionsInfo, GetGlusterVolumeBricks, GetGlusterBrickById, + GetAddedGlusterServers, // Default type instead of having to null check Unknown(VdcQueryAuthType.User); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index a770eff..7d0d18a6 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -135,7 +135,8 @@ AddBricksToGlusterVolume("org.ovirt.engine.core.vdsbroker.gluster"), ReplaceGlusterVolumeBrick("org.ovirt.engine.core.vdsbroker.gluster"), GlusterHostRemove("org.ovirt.engine.core.vdsbroker.gluster"), - GlusterHostAdd("org.ovirt.engine.core.vdsbroker.gluster"); + GlusterHostAdd("org.ovirt.engine.core.vdsbroker.gluster"), + GlusterServersList("org.ovirt.engine.core.vdsbroker.gluster"), ; String packageName; -- To view, visit http://gerrit.ovirt.org/7456 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0e010683c221abeabbb2e427a86bcf155b89b68f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Selvasundaram <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
