Sahina Bose has uploaded a new change for review. Change subject: engine: VDS commands for volume geo-rep status and detail ......................................................................
engine: VDS commands for volume geo-rep status and detail VDS commands to retrieve status of geo-rep sessions associated with a volume and geo-rep status detail for a session Change-Id: Id313742c9f3c036a0017fe37bd818af1bed0e081 Bug-Url: https://bugzilla.redhat.com/1138116 Signed-off-by: Sahina Bose <[email protected]> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/gluster/GlusterVolumeGeoRepSessionVDSParameters.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterDBUtils.java M backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeGeoRepStatusDetailVDSCommand.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeGeoRepStatusVDSCommand.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeGeoRepStatusDetailForXmlRpc.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeGeoRepStatusForXmlRpc.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java 15 files changed, 432 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/77/39377/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java index 72c5ef9..a2d67ba 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java @@ -399,6 +399,8 @@ GlfsStatvfsException(4571), GlfsInitException(4572), GlfsFiniException(4573), + GlusterVolumeGeoRepStatusFailed(4599), + GlusterVolumeGeoRepStatusDetailFailed(4600), UnicodeArgumentException(4900), 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 5bb1b87..c33079c 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 @@ -158,6 +158,8 @@ GetDiskAlignment("org.ovirt.engine.core.vdsbroker.vdsbroker"), GlusterTasksList("org.ovirt.engine.core.vdsbroker.gluster"), GetGlusterVolumeRemoveBricksStatus("org.ovirt.engine.core.vdsbroker.gluster"), + GetGlusterVolumeGeoRepStatus("org.ovirt.engine.core.vdsbroker.gluster"), + GetGlusterVolumeGeoRepStatusDetail("org.ovirt.engine.core.vdsbroker.gluster"), SetNumberOfCpus("org.ovirt.engine.core.vdsbroker"), UpdateVmPolicy("org.ovirt.engine.core.vdsbroker"), List("org.ovirt.engine.core.vdsbroker.vdsbroker"), // get a list of VMs with status only diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/gluster/GlusterVolumeGeoRepSessionVDSParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/gluster/GlusterVolumeGeoRepSessionVDSParameters.java new file mode 100644 index 0000000..d099b29 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/gluster/GlusterVolumeGeoRepSessionVDSParameters.java @@ -0,0 +1,39 @@ +package org.ovirt.engine.core.common.vdscommands.gluster; + +import org.ovirt.engine.core.compat.Guid; + +public class GlusterVolumeGeoRepSessionVDSParameters extends GlusterVolumeVDSParameters { + + private String slaveHost; + private String slaveVolume; + + public GlusterVolumeGeoRepSessionVDSParameters() { + + } + + public GlusterVolumeGeoRepSessionVDSParameters(Guid serverId, String volumeName) { + super(serverId, volumeName); + } + + public GlusterVolumeGeoRepSessionVDSParameters(Guid serverId, String volumeName, String slaveHost, String slaveVolume) { + super(serverId, volumeName); + this.slaveHost = slaveHost; + this.slaveVolume = slaveVolume; + } + + public String getSlaveHost() { + return slaveHost; + } + + public void setSlaveHost(String slaveHost) { + this.slaveHost = slaveHost; + } + + public String getSlaveVolume() { + return slaveVolume; + } + + public void setSlaveVolume(String slaveVolume) { + this.slaveVolume = slaveVolume; + } +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterDBUtils.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterDBUtils.java index 855a30f..82fa4a9 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterDBUtils.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterDBUtils.java @@ -79,7 +79,8 @@ } /** - * Returns a server from the given cluster, having given UUID + * Returns a server from the given cluster, having given + * gluster server UUID * * @return GlusterServer object for the said server if found, else null */ @@ -165,4 +166,16 @@ } return hostName; } + + public GlusterBrickEntity getGlusterBrickByServerUuidAndBrickDir(Guid serverId, String brickDir) + { + return getGlusterBrickDao().getBrickByServerIdAndDirectory(serverId, brickDir); + } + + public GlusterVolumeEntity getVolumeByNameAndHostId(String volumeName, Guid hostId) { + VdsStatic vds = getVdsStaticDao().get(hostId); + Guid vdsGroupId = vds.getVdsGroupId(); + return getGlusterVolumeDao().getByName(vdsGroupId, volumeName); + } + } diff --git a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties index f3b06a9..0582156 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties @@ -368,6 +368,8 @@ GlusterServiceActionNotSupported=Gluster service action not supported GlusterVolumeStatusAllFailedException=Failed to get gluster tasks list GlusterVolumeRebalanceStatusFailedException=Failed to get gluster volume rebalance status +GlusterVolumeGeoRepStatusFailedException=Failed to get status information of geo-replication session(s) on gluster volume +GlusterVolumeGeoRepStatusDetailFailedException=Failed to get detailed status information of geo-replication session(s) on gluster volume GlusterLibgfapiException=Command failed due to gluster libgfapi exception GlfsStatvfsException=Failed to get gluster volume size info GlfsInitException=Command failed while mounting gluster volume diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java index 2b2d573..7796a8c 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java @@ -66,6 +66,8 @@ case GlusterVolumeRemoveBricksStopFailed: case GlusterVolumeRemoveBrickStatusFailed: case GlusterVolumeRemoveBricksCommitFailed: + case GlusterVolumeGeoRepStatusFailed: + case GlusterVolumeGeoRepStatusDetailFailed: case GlusterLibgfapiException: case GlfsStatvfsException: case GlfsInitException: diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeGeoRepStatusDetailVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeGeoRepStatusDetailVDSCommand.java new file mode 100644 index 0000000..a770d6a --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeGeoRepStatusDetailVDSCommand.java @@ -0,0 +1,28 @@ +package org.ovirt.engine.core.vdsbroker.gluster; + +import org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeGeoRepSessionVDSParameters; +import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; + +public class GetGlusterVolumeGeoRepStatusDetailVDSCommand<P extends GlusterVolumeGeoRepSessionVDSParameters> extends AbstractGlusterBrokerCommand<P> { + GlusterVolumeGeoRepStatusDetailForXmlRpc result; + + public GetGlusterVolumeGeoRepStatusDetailVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected StatusForXmlRpc getReturnStatus() { + return result.mStatus; + } + + @Override + protected void executeVdsBrokerCommand() { + GlusterVolumeGeoRepSessionVDSParameters parameter = getParameters(); + result = getBroker().glusterVolumeGeoRepStatusDetail(parameter.getVolumeName(), parameter.getSlaveHost(), parameter.getSlaveVolume()); + proceedProxyReturnValue(); + if (getVDSReturnValue().getSucceeded()) { + setReturnValue(result.getGeoRepSessions()); + } + } + +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeGeoRepStatusVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeGeoRepStatusVDSCommand.java new file mode 100644 index 0000000..0dca615 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeGeoRepStatusVDSCommand.java @@ -0,0 +1,34 @@ +package org.ovirt.engine.core.vdsbroker.gluster; + +import org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeGeoRepSessionVDSParameters; +import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; + +public class GetGlusterVolumeGeoRepStatusVDSCommand<P extends GlusterVolumeGeoRepSessionVDSParameters> extends AbstractGlusterBrokerCommand<P> { + GlusterVolumeGeoRepStatusForXmlRpc result; + + public GetGlusterVolumeGeoRepStatusVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected StatusForXmlRpc getReturnStatus() { + return result.mStatus; + } + + @Override + protected void executeVdsBrokerCommand() { + GlusterVolumeGeoRepSessionVDSParameters parameter = getParameters(); + if (parameter.getVolumeName() == null) { + result = getBroker().glusterVolumeGeoRepStatus(); + } else if (parameter.getSlaveHost() == null || parameter.getSlaveVolume() == null) { + result = getBroker().glusterVolumeGeoRepStatus(parameter.getVolumeName()); + } else { + result = getBroker().glusterVolumeGeoRepStatus(parameter.getVolumeName(), parameter.getSlaveHost(), parameter.getSlaveVolume()); + } + proceedProxyReturnValue(); + if (getVDSReturnValue().getSucceeded()) { + setReturnValue(result.getGeoRepSessions()); + } + } + +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeGeoRepStatusDetailForXmlRpc.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeGeoRepStatusDetailForXmlRpc.java new file mode 100644 index 0000000..b8bfa98 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeGeoRepStatusDetailForXmlRpc.java @@ -0,0 +1,74 @@ +package org.ovirt.engine.core.vdsbroker.gluster; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSessionDetails; + +public class GlusterVolumeGeoRepStatusDetailForXmlRpc extends GlusterVolumeGeoRepStatusForXmlRpc { + + private static final String FILES_SYNCED = "filesSyncd"; + private static final String FILES_PENDING = "filesPending"; + private static final String BYTES_PENDING = "bytesPending"; + private static final String DELETES_PENDING = "deletesPending"; + private static final String FILES_SKIPPED = "filesSkipped"; + + private final ArrayList<GlusterGeoRepSessionDetails> geoRepDetails = new ArrayList<GlusterGeoRepSessionDetails>(); + private final List<GlusterGeoRepSession> geoRepSessions = new ArrayList<GlusterGeoRepSession>(); + + private GlusterGeoRepSessionDetails populatePairDetails(Map<String, Object> innerMap, GlusterGeoRepSession session) { + GlusterGeoRepSessionDetails details = getSessionDetails(innerMap, session); + Long filesSynced = + innerMap.containsKey(FILES_SYNCED) ? Long.parseLong(innerMap.get(FILES_SYNCED).toString()) : null; + Long filesPending = + innerMap.containsKey(FILES_PENDING) ? Long.parseLong(innerMap.get(FILES_PENDING).toString()) : null; + Long bytesPending = + innerMap.containsKey(BYTES_PENDING) ? Long.parseLong(innerMap.get(BYTES_PENDING).toString()) : null; + Long deletesPending = + innerMap.containsKey(DELETES_PENDING) ? Long.parseLong(innerMap.get(DELETES_PENDING).toString()) : null; + Long filesSkipped = + innerMap.containsKey(FILES_SKIPPED) ? Long.parseLong(innerMap.get(FILES_SKIPPED).toString()) : null; + + details.setFilesPending(filesPending); + details.setFilesSkipped(filesSkipped); + details.setFilesSynced(filesSynced); + details.setBytesPending(bytesPending); + details.setDeletesPending(deletesPending); + return details; + } + + @SuppressWarnings("unchecked") + private void populateSessionDetails(Map<String, Object> innerMap) { + if (innerMap.containsKey(VOLUME_NAME)) { + String masterVolumeName = (String) innerMap.get(VOLUME_NAME); + GlusterGeoRepSession session = getSession(masterVolumeName, innerMap); + + if (innerMap.containsKey(GEO_REP_PAIRS)) { + for (Object sessionPair : (Object[]) innerMap.get(GEO_REP_PAIRS)) { + geoRepDetails.add(populatePairDetails((Map<String, Object>) sessionPair, session)); + } + } + session.setSessionDetails(geoRepDetails); + geoRepSessions.add(session); + } + } + + public GlusterVolumeGeoRepStatusDetailForXmlRpc(Map<String, Object> innerMap) { + super(innerMap); + if (innerMap.containsKey(GEO_REP)) { + populateSessionDetails((Map<String, Object>) innerMap.get(GEO_REP)); + } + } + + public List<GlusterGeoRepSessionDetails> getGeoRepDetails() { + return geoRepDetails; + } + + @Override + public List<GlusterGeoRepSession> getGeoRepSessions() { + return geoRepSessions; + } + +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeGeoRepStatusForXmlRpc.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeGeoRepStatusForXmlRpc.java new file mode 100644 index 0000000..30d0e5f --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeGeoRepStatusForXmlRpc.java @@ -0,0 +1,131 @@ +package org.ovirt.engine.core.vdsbroker.gluster; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.core.common.businessentities.gluster.GeoRepCrawlStatus; +import org.ovirt.engine.core.common.businessentities.gluster.GeoRepSessionStatus; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSessionDetails; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterServer; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.gluster.GlusterDBUtils; +import org.ovirt.engine.core.utils.log.Log; +import org.ovirt.engine.core.utils.log.LogFactory; +import org.ovirt.engine.core.vdsbroker.irsbroker.StatusReturnForXmlRpc; + +public class GlusterVolumeGeoRepStatusForXmlRpc extends StatusReturnForXmlRpc { + protected static final String GEO_REP = "geo-rep"; + protected static final String VOLUME_NAME = "volumeName"; + protected static final String GEO_REP_PAIRS = "pairs"; + private static final String SESSIONS = "sessions"; + private static final String SESSION_SLAVE = "sessionSlave"; + private static final String MASTER_NODE_UUID = "masterNodeUuid"; + private static final String MASTER_BRICK = "masterBrick"; + private static final String SLAVE = "slave"; + private static final String STATUS = "status"; + private static final String CHECK_POINT_STATUS = "checkpointStatus"; + private static final String CRAWL_STATUS = "crawlStatus"; + + private final List<GlusterGeoRepSession> geoRepSessions = new ArrayList<GlusterGeoRepSession>(); + + private static final Log log = LogFactory.getLog(GlusterVolumesListReturnForXmlRpc.class); + + protected GlusterGeoRepSessionDetails getSessionDetails(Map<String, Object> innerMap, GlusterGeoRepSession session) { + GlusterGeoRepSessionDetails details = new GlusterGeoRepSessionDetails(); + details.setSessionId(session.getId()); + Guid masterNodeGlusterId; + if (innerMap.containsKey(MASTER_NODE_UUID)) { + masterNodeGlusterId = new Guid(innerMap.get(MASTER_NODE_UUID).toString()); + } else { + log.error("Master node uuid is not available"); + return null; + } + String masterBrickDir = (innerMap.containsKey(MASTER_BRICK)) ? innerMap.get(MASTER_BRICK).toString() : null; + GlusterServer glusterServer = getDbUtils().getServerByUuid(masterNodeGlusterId); + if (glusterServer != null) { + GlusterBrickEntity brick = + getDbUtils().getGlusterBrickByServerUuidAndBrickDir(glusterServer.getId(), masterBrickDir); + if (brick != null) { + details.setMasterBrickId(brick.getId()); + } + } + if (details.getMasterBrickId() == null) { + log.errorFormat("Brick information could not be retrieved for gluster host id %1 and brick dir %2", + masterNodeGlusterId, + masterBrickDir); + } + + String slave = innerMap.containsKey(SLAVE) ? innerMap.get(SLAVE).toString() : null; + String[] slaveSplit = (slave != null) ? slave.split("([://]+)") : null; + if (slaveSplit != null && slaveSplit.length >= 2) { + details.setSlaveHostName(slaveSplit[slaveSplit.length - 2]); + } + details.setStatus(GeoRepSessionStatus.from((String) innerMap.get(STATUS))); + details.setCrawlStatus(GeoRepCrawlStatus.from((String) innerMap.get(CRAWL_STATUS))); + details.setCheckPointStatus((String) innerMap.get(CHECK_POINT_STATUS)); + return details; + } + + protected GlusterGeoRepSession getSession(String masterVolumeName, Map<String, Object> innerMap) { + GlusterGeoRepSession geoRepSession = new GlusterGeoRepSession(); + // sessionslave in the form - + // <session_slave>11ae7a03-e793-4270-8fc4-b42def8b3051:ssh://192.168.122.14::slave2</session_slave> + String sessionKey = (String) innerMap.get(SESSION_SLAVE); + String sessSplit[] = sessionKey.split("([://]+)"); + String sessionId = sessSplit[0]; + String slaveNode = sessSplit[sessSplit.length - 2]; + String slaveVolume = sessSplit[sessSplit.length - 1]; + geoRepSession.setId(Guid.createGuidFromString(sessionId)); + geoRepSession.setSlaveHostName(slaveNode); + geoRepSession.setSlaveVolumeName(slaveVolume); + geoRepSession.setSessionKey(sessionKey); + geoRepSession.setMasterVolumeName(masterVolumeName); + return geoRepSession; + } + + private GlusterDBUtils getDbUtils() { + return GlusterDBUtils.getInstance(); + } + + @SuppressWarnings("unchecked") + private void populateSessions(Object[] geoRepVolSessions) { + for (Object geoRepVolSession : geoRepVolSessions) { + Map<String, Object> innerMap = (Map<String, Object>) geoRepVolSession; + if (innerMap.containsKey(VOLUME_NAME)) { + String masterVolName = (String) innerMap.get(VOLUME_NAME); + if (innerMap.containsKey(SESSIONS)) { + for (Object session : (Object[]) innerMap.get(SESSIONS)) { + geoRepSessions.add(populateSession(masterVolName, (Map<String, Object>) session)); + } + } + } + } + } + + private GlusterGeoRepSession populateSession(String volumeName, Map<String, Object> innerMap) { + GlusterGeoRepSession geoRepSession = getSession(volumeName, innerMap); + ArrayList<GlusterGeoRepSessionDetails> geoRepSessionDetails = new ArrayList<GlusterGeoRepSessionDetails>(); + if (innerMap.containsKey(GEO_REP_PAIRS)) { + for (Object sessionPair : (Object[]) innerMap.get(GEO_REP_PAIRS)) { + geoRepSessionDetails.add(getSessionDetails((Map<String, Object>) sessionPair, geoRepSession)); + } + } + geoRepSession.setSessionDetails(geoRepSessionDetails); + return geoRepSession; + } + + public GlusterVolumeGeoRepStatusForXmlRpc(Map<String, Object> innerMap) { + super(innerMap); + if (innerMap.containsKey(GEO_REP)) { + populateSessions((Object[]) innerMap.get(GEO_REP)); + } + } + + public List<GlusterGeoRepSession> getGeoRepSessions() { + return geoRepSessions; + } + +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java index 732cf7a..8842329 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java @@ -18,6 +18,8 @@ import org.ovirt.engine.core.vdsbroker.gluster.GlusterServicesReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterTaskInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterTasksListReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeGeoRepStatusForXmlRpc; +import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeGeoRepStatusDetailForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeOptionsInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeProfileInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeStatusReturnForXmlRpc; @@ -1438,6 +1440,40 @@ } @Override + public GlusterVolumeGeoRepStatusForXmlRpc glusterVolumeGeoRepStatus() { + JsonRpcRequest request = new RequestBuilder("GlusterVolume.geoRepStatus").build(); + Map<String, Object> response = new FutureMap(this.client, request).withIgnoreResponseKey(); + return new GlusterVolumeGeoRepStatusForXmlRpc(response); + } + + @Override + public GlusterVolumeGeoRepStatusForXmlRpc glusterVolumeGeoRepStatus(String volumeName) { + JsonRpcRequest request = new RequestBuilder("GlusterVolume.geoRepStatus") + .withParameter("volName", volumeName) + .build(); + Map<String, Object> response = new FutureMap(this.client, request).withIgnoreResponseKey(); + return new GlusterVolumeGeoRepStatusForXmlRpc(response); + } + + @Override + public GlusterVolumeGeoRepStatusForXmlRpc glusterVolumeGeoRepStatus(String volumeName, String slaveHost, String slaveVolumeName) { + JsonRpcRequest request = new RequestBuilder("GlusterVolume.geoRepStatus").withParameter("volName", volumeName) + .withParameter("remoteHost", slaveHost) + .withParameter("remoteVolName", slaveVolumeName).build(); + Map<String, Object> response = new FutureMap(this.client, request).withIgnoreResponseKey(); + return new GlusterVolumeGeoRepStatusForXmlRpc(response); + } + + @Override + public GlusterVolumeGeoRepStatusDetailForXmlRpc glusterVolumeGeoRepStatusDetail(String volumeName, String slaveHost, String slaveVolumeName) { + JsonRpcRequest request = new RequestBuilder("GlusterVolume.geoRepStatusDetail").withParameter("volName", volumeName) + .withParameter("remoteHost", slaveHost) + .withParameter("remoteVolName", slaveVolumeName).build(); + Map<String, Object> response = new FutureMap(this.client, request).withIgnoreResponseKey(); + return new GlusterVolumeGeoRepStatusDetailForXmlRpc(response); + } + + @Override public GlusterVolumeTaskReturnForXmlRpc glusterVolumeRemoveBrickStatus(String volumeName, String[] bricksList) { JsonRpcRequest request = new RequestBuilder("GlusterVolume.removeBrickStatus").withParameter("volumeName", volumeName) diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index 89f3404..ad81acd 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -13,6 +13,8 @@ import org.ovirt.engine.core.vdsbroker.gluster.GlusterServicesReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterTaskInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterTasksListReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeGeoRepStatusForXmlRpc; +import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeGeoRepStatusDetailForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeOptionsInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeProfileInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeStatusReturnForXmlRpc; @@ -306,6 +308,14 @@ GlusterVolumeTaskReturnForXmlRpc glusterVolumeRebalanceStatus(String volumeName); + GlusterVolumeGeoRepStatusForXmlRpc glusterVolumeGeoRepStatus(); + + GlusterVolumeGeoRepStatusForXmlRpc glusterVolumeGeoRepStatus(String volumeName); + + GlusterVolumeGeoRepStatusForXmlRpc glusterVolumeGeoRepStatus(String volumeName, String slaveHost, String slaveVolumeName); + + GlusterVolumeGeoRepStatusDetailForXmlRpc glusterVolumeGeoRepStatusDetail(String volumeName, String slaveHost, String slaveVolumeName); + GlusterVolumeTaskReturnForXmlRpc glusterVolumeRemoveBrickStatus(String volumeName, String[] bricksList); StatusOnlyReturnForXmlRpc setNumberOfCpus(String vmId, String numberOfCpus); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index cc778ae..0ab88d9 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -289,6 +289,14 @@ public Map<String, Object> glusterVolumeRebalanceStatus(String volumeName); + public Map<String, Object> glusterVolumeGeoRepStatus(); + + public Map<String, Object> glusterVolumeGeoRepStatus(String volumeName); + + public Map<String, Object> glusterVolumeGeoRepStatus(String volumeName, String slaveHost, String slaveVolumeName); + + public Map<String, Object> glusterVolumeGeoRepStatusDetail(String volumeName, String slaveHost, String slaveVolumeName); + public Map<String, Object> glusterVolumeRemoveBrickStatus(String volumeName, String[] bricksList); public Map<String, Object> setNumberOfCpus(String vmId, String numberOfCpus); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index 5f43faf..322d4c1 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -14,6 +14,8 @@ import org.ovirt.engine.core.vdsbroker.gluster.GlusterServicesReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterTaskInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterTasksListReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeGeoRepStatusForXmlRpc; +import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeGeoRepStatusDetailForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeOptionsInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeProfileInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeStatusReturnForXmlRpc; @@ -1371,6 +1373,48 @@ } @Override + public GlusterVolumeGeoRepStatusForXmlRpc glusterVolumeGeoRepStatus() { + try { + Map<String, Object> response = vdsServer.glusterVolumeGeoRepStatus(); + return new GlusterVolumeGeoRepStatusForXmlRpc(response); + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } + + @Override + public GlusterVolumeGeoRepStatusForXmlRpc glusterVolumeGeoRepStatus(String volumeName) { + try { + Map<String, Object> response; + response = vdsServer.glusterVolumeGeoRepStatus(volumeName); + return new GlusterVolumeGeoRepStatusForXmlRpc(response); + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } + + @Override + public GlusterVolumeGeoRepStatusForXmlRpc glusterVolumeGeoRepStatus(String volumeName, String slaveHost, String slaveVolumeName) { + try { + Map<String, Object> response; + response = vdsServer.glusterVolumeGeoRepStatus(volumeName, slaveHost, slaveVolumeName); + return new GlusterVolumeGeoRepStatusForXmlRpc(response); + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } + + @Override + public GlusterVolumeGeoRepStatusDetailForXmlRpc glusterVolumeGeoRepStatusDetail(String volumeName, String slaveHost, String slaveVolumeName) { + try { + Map<String, Object> response = vdsServer.glusterVolumeGeoRepStatusDetail(volumeName, slaveHost, slaveVolumeName); + return new GlusterVolumeGeoRepStatusDetailForXmlRpc(response); + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } + + @Override public GlusterVolumeTaskReturnForXmlRpc glusterVolumeRemoveBrickStatus(String volumeName, String[] bricksList) { try { Map<String, Object> xmlRpcReturnValue = vdsServer.glusterVolumeRemoveBrickStatus(volumeName, bricksList); diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java index b99a183..184d0b4 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java @@ -800,6 +800,12 @@ @DefaultStringValue("Failed to get gluster volume rebalance status") String GlusterVolumeRebalanceStatusFailedException(); + @DefaultStringValue("Failed to get status information of geo-replication session(s) on gluster volume") + String GlusterVolumeGeoRepStatusFailed(); + + @DefaultStringValue("Failed to get detailed status information of geo-replication session(s) on gluster volume") + String GlusterVolumeGeoRepStatusDetailFailed(); + @DefaultStringValue("Failed to get status of gluster volume remove bricks") String GlusterVolumeRemoveBrickStatusFailed(); -- To view, visit https://gerrit.ovirt.org/39377 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id313742c9f3c036a0017fe37bd818af1bed0e081 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5-gluster Gerrit-Owner: Sahina Bose <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
