Dhandapani Gopal has uploaded a new change for review. Change subject: [WIP] engine: Get Volume Status Query ......................................................................
[WIP] engine: Get Volume Status Query - New entity classes for Volume Status - New Gluster Volume Status parameter class - New XmlRpc class for volume status - New bll and vds query TODO: Will send another patch set with Junit test Change-Id: If6b590eaebeb1d06b7278300d5e12b2dab9eb093 Signed-off-by: Dhandapani <dgo...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeStatusQuery.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/BrickDetails.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/BrickProperties.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterClientInfo.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterMallInfo.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterMempool.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeStatusEntity.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeStatusOption.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/MemoryStatus.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/GlusterVolumeStatusParameters.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/GlusterVolumeStatusVDSParameters.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeStatusVDSCommand.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GlusterVolumeStatusReturnForXmlRpc.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 17 files changed, 1,142 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/07/7807/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeStatusQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeStatusQuery.java new file mode 100644 index 0000000..70ccc72 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetGlusterVolumeStatusQuery.java @@ -0,0 +1,39 @@ +package org.ovirt.engine.core.bll.gluster; + +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.interfaces.VDSBrokerFrontend; +import org.ovirt.engine.core.common.queries.gluster.GlusterVolumeStatusParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeStatusVDSParameters; + +/** + * Query to get given volume status + */ +public class GetGlusterVolumeStatusQuery<P extends GlusterVolumeStatusParameters> extends QueriesCommandBase<P> { + + public GetGlusterVolumeStatusQuery(P params) { + super(params); + } + + @Override + protected void executeQueryCommand() { + VDSReturnValue returnValue = getBackendInstance().RunVdsCommand(VDSCommandType.GetGlusterVolumeStatus, + new GlusterVolumeStatusVDSParameters(getClusterUtils() + .getUpServer(getParameters().getClusterId()).getId(), getParameters().getClusterId(), + getParameters().getVolumeName(), getParameters().getBrickName(), getParameters().isDetails())); + + getQueryReturnValue().setReturnValue(returnValue.getReturnValue()); + } + + public ClusterUtils getClusterUtils() { + return ClusterUtils.getInstance(); + } + + public VDSBrokerFrontend getBackendInstance() { + return Backend.getInstance() + .getResourceManager(); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/BrickDetails.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/BrickDetails.java new file mode 100644 index 0000000..f629a8e --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/BrickDetails.java @@ -0,0 +1,39 @@ +package org.ovirt.engine.core.common.businessentities.gluster; + +import java.util.List; + +/** + * GlusterFS provides lot of volume status information about the volume brick. + * This will consolidate all the status inforamtion + * + * @see BrickProperties + * @see GlusterClientInfo + * @see MemoryStatus + + */ +public class BrickDetails extends BrickProperties { + + private static final long serialVersionUID = -1134758927239004412L; + + public BrickDetails() { + } + + List<GlusterClientInfo> clientInfo; + MemoryStatus memoryStatus; + + public List<GlusterClientInfo> getClientInfo() { + return clientInfo; + } + + public void setClientInfo(List<GlusterClientInfo> clientInfo) { + this.clientInfo = clientInfo; + } + + public MemoryStatus getMemoryStatus() { + return memoryStatus; + } + + public void setMemoryStatus(MemoryStatus memoryStatus) { + this.memoryStatus = memoryStatus; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/BrickProperties.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/BrickProperties.java new file mode 100644 index 0000000..be5e5cc --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/BrickProperties.java @@ -0,0 +1,118 @@ +package org.ovirt.engine.core.common.businessentities.gluster; + +import javax.validation.constraints.NotNull; + +import org.ovirt.engine.core.common.validation.group.gluster.RemoveBrick; +import org.ovirt.engine.core.compat.Guid; + + +/** + * The gluster volume status detail. + * + */ +public class BrickProperties { + + @NotNull(message = "VALIDATION.GLUSTER.BRICK.ID.NOT_NULL", groups = { RemoveBrick.class }) + private Guid brickId; + + private Integer port; + + private Integer pid; + + private GlusterStatus status; + + private Double totalSize; + + private Double freeSize; + + private String device; + + private Integer blockSize; + + private String mntOptions; + + private String fsName; + + public BrickProperties() { + } + + public Guid getBrickId() { + return brickId; + } + + public void setBrickId(Guid brickId) { + this.brickId = brickId; + } + + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public Integer getPid() { + return pid; + } + + public void setPid(Integer pid) { + this.pid = pid; + } + + public GlusterStatus getStatus() { + return status; + } + + public void setStatus(GlusterStatus shdStatus) { + this.status = shdStatus; + } + + public Double getTotalSize() { + return totalSize; + } + + public void setTotalSize(Double totalSize) { + this.totalSize = totalSize; + } + + public Double getFreeSize() { + return freeSize; + } + + public void setFreeSize(Double freeSize) { + this.freeSize = freeSize; + } + + public String getDevice() { + return device; + } + + public void setDevice(String device) { + this.device = device; + } + + public Integer getBlockSize() { + return blockSize; + } + + public void setBlockSize(Integer blockSize) { + this.blockSize = blockSize; + } + + public String getMntOptions() { + return mntOptions; + } + + public void setMntOptions(String mntOptions) { + this.mntOptions = mntOptions; + } + + public String getFsName() { + return fsName; + } + + public void setFsName(String fsName) { + this.fsName = fsName; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterClientInfo.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterClientInfo.java new file mode 100644 index 0000000..8a9584a --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterClientInfo.java @@ -0,0 +1,54 @@ +package org.ovirt.engine.core.common.businessentities.gluster; + + +/** + * The gluster volume status clients info. + + */ +public class GlusterClientInfo{ + + private static final long serialVersionUID = 4426819375609665363L; + + private String hostname; + + private Integer clientPort; + + private Integer bytesRead; + + private Integer bytesWrite; + + public GlusterClientInfo() { + } + + public String getHostname() { + return hostname; + } + + public void setHostname(String hostname) { + this.hostname = hostname; + } + + public Integer getClientPort() { + return clientPort; + } + + public void setClientPort(Integer clientPort) { + this.clientPort = clientPort; + } + + public Integer getBytesRead() { + return bytesRead; + } + + public void setBytesRead(Integer bytesRead) { + this.bytesRead = bytesRead; + } + + public Integer getBytesWrite() { + return bytesWrite; + } + + public void setBytesWrite(Integer bytesWrite) { + this.bytesWrite = bytesWrite; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterMallInfo.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterMallInfo.java new file mode 100644 index 0000000..489db04 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterMallInfo.java @@ -0,0 +1,113 @@ +package org.ovirt.engine.core.common.businessentities.gluster; + + +/** + * The gluster volume memory status Mall Info. + * + */ +public class GlusterMallInfo{ + + private Integer arena; + + private Integer ordblks; + + private Integer smblks; + + private Integer hblks; + + private Integer hblkhd; + + private Integer usmblks; + + private Integer fsmblks; + + private Integer uordblks; + + private Integer fordblks; + + private Integer keepcost; + + + public GlusterMallInfo() { + } + + public Integer getArena() { + return arena; + } + + public void setArena(Integer arena) { + this.arena = arena; + } + + public Integer getOrdblks() { + return ordblks; + } + + public void setOrdblks(Integer ordblks) { + this.ordblks = ordblks; + } + + public Integer getSmblks() { + return smblks; + } + + public void setSmblks(Integer smblks) { + this.smblks = smblks; + } + + public Integer getHblks() { + return hblks; + } + + public void setHblks(Integer hblks) { + this.hblks = hblks; + } + + public Integer getHblkhd() { + return hblkhd; + } + + public void setHblkhd(Integer hblkhd) { + this.hblkhd = hblkhd; + } + + public Integer getUsmblks() { + return usmblks; + } + + public void setUsmblks(Integer usmblks) { + this.usmblks = usmblks; + } + + public Integer getFsmblks() { + return fsmblks; + } + + public void setFsmblks(Integer fsmblks) { + this.fsmblks = fsmblks; + } + + public Integer getUordblks() { + return uordblks; + } + + public void setUordblks(Integer uordblks) { + this.uordblks = uordblks; + } + + public Integer getFordblks() { + return fordblks; + } + + public void setFordblks(Integer fordblks) { + this.fordblks = fordblks; + } + + public Integer getKeepcost() { + return keepcost; + } + + public void setKeepcost(Integer keepcost) { + this.keepcost = keepcost; + } + } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterMempool.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterMempool.java new file mode 100644 index 0000000..694bd24 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterMempool.java @@ -0,0 +1,94 @@ +package org.ovirt.engine.core.common.businessentities.gluster; + + +/** + * The gluster volume memory status Mem pool. + * + */ +public class GlusterMempool{ + + private static final long serialVersionUID = 4426819375609665363L; + + private String name; + + private Integer hotCount; + + private Integer coldCount; + + private Integer padddedSize; + + private Integer allocCount; + + private Integer maxAlloc; + + private Integer poolMisses; + + private Integer maxStdAlloc; + + public GlusterMempool() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getHotCount() { + return hotCount; + } + + public void setHotCount(Integer hotCount) { + this.hotCount = hotCount; + } + + public Integer getColdCount() { + return coldCount; + } + + public void setColdCount(Integer coldCount) { + this.coldCount = coldCount; + } + + public Integer getPadddedSize() { + return padddedSize; + } + + public void setPadddedSize(Integer padddedSize) { + this.padddedSize = padddedSize; + } + + public Integer getAllocCount() { + return allocCount; + } + + public void setAllocCount(Integer allocCount) { + this.allocCount = allocCount; + } + + public Integer getMaxAlloc() { + return maxAlloc; + } + + public void setMaxAlloc(Integer maxAlloc) { + this.maxAlloc = maxAlloc; + } + + public Integer getPoolMisses() { + return poolMisses; + } + + public void setPoolMisses(Integer poolMisses) { + this.poolMisses = poolMisses; + } + + public Integer getMaxStdAlloc() { + return maxStdAlloc; + } + + public void setMaxStdAlloc(Integer maxStdAlloc) { + this.maxStdAlloc = maxStdAlloc; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeStatusEntity.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeStatusEntity.java new file mode 100644 index 0000000..0be6015 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeStatusEntity.java @@ -0,0 +1,195 @@ +package org.ovirt.engine.core.common.businessentities.gluster; + +import java.util.List; + +import javax.validation.constraints.NotNull; + +import org.ovirt.engine.core.common.businessentities.BusinessEntity; +import org.ovirt.engine.core.common.validation.group.RemoveEntity; +import org.ovirt.engine.core.compat.Guid; + +/** + * The gluster volume status info. GlusterFS provides lot of status information about the volume brick. + * This will consolidate all the status inforamtion + * + * @see BrickProperties + * @see GlusterClientInfo + * @see MemoryStatus + + */ +public class GlusterVolumeStatusEntity implements BusinessEntity<Guid> { + + private static final long serialVersionUID = -1134758927239004412L; + + public GlusterVolumeStatusEntity() { + } + + @NotNull(message = "VALIDATION.GLUSTER.VOLUME.ID.NOT_NULL", groups = { RemoveEntity.class }) + private Guid volumeId; + + List<BrickDetails> brickDetails; + List<VolumeStatusNfs> volumeStatusNfs; + List<VolumeStatusShd> volumeStatusShd; + + public Guid getId() { + return volumeId; + } + + public void setId(Guid volumeId) { + this.volumeId = volumeId; + } + + public List<BrickDetails> getBrickDetails() { + return brickDetails; + } + + public void setBrickDetails(List<BrickDetails> brickDetails) { + this.brickDetails = brickDetails; + } + + public List<VolumeStatusNfs> getVolumeStatusNfs() { + return volumeStatusNfs; + } + + public void setVolumeStatusNfs(List<VolumeStatusNfs> volumeStatusNfs) { + this.volumeStatusNfs = volumeStatusNfs; + } + + public List<VolumeStatusShd> getVolumeStatusShd() { + return volumeStatusShd; + } + + public void setVolumeStatusShd(List<VolumeStatusShd> volumeStatusShd) { + this.volumeStatusShd = volumeStatusShd; + } + + public class VolumeStatusNfs { + public VolumeStatusNfs() { + + } + + private String hostName; + private int port; + private int pid; + private GlusterStatus status; + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public int getPid() { + return pid; + } + + public void setPid(int pid) { + this.pid = pid; + } + + public GlusterStatus getStatus() { + return status; + } + + public void setStatus(GlusterStatus status) { + this.status = status; + } + } + + public class VolumeStatusShd { + public VolumeStatusShd() { + } + + private String hostName; + + private Integer pid; + + private GlusterStatus status; + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public Integer getPid() { + return pid; + } + + public void setPid(Integer pid) { + this.pid = pid; + } + + public GlusterStatus getStatus() { + return status; + } + + public void setStatus(GlusterStatus status) { + this.status = status; + } + } + + public void copyDetailsFrom(GlusterVolumeStatusEntity entity) { + // Copy all the fields which received for "DETAIL" + for (BrickDetails entityBrick : entity.getBrickDetails()) { + for (BrickDetails brick : getBrickDetails()) { + if (entityBrick.getBrickId().equals(brick.getBrickId())) { + brick = copyBrickDetails(brick, entityBrick); + } + } + } + } + + private BrickDetails copyBrickDetails(BrickDetails brick, BrickDetails entityBrick) { + brick.setTotalSize( entityBrick.getTotalSize()); + brick.setFreeSize(entityBrick.getFreeSize()); + brick.setDevice(entityBrick.getDevice()); + brick.setBlockSize(entityBrick.getBlockSize()); + brick.setMntOptions(entityBrick.getMntOptions()); + brick.setFsName(entityBrick.getFsName()); + return brick; + } + + public void copyClientsFrom(GlusterVolumeStatusEntity entity) { + // Copy all the fields which received for "Clients" + for (BrickDetails entityBrick : entity.getBrickDetails()) { + for (BrickDetails brick : getBrickDetails()) { + if (entityBrick.getBrickId().equals(brick.getBrickId())) { + brick = copyClientDetails(brick, entityBrick); + } + } + } + } + + private BrickDetails copyClientDetails(BrickDetails brick, BrickDetails entityBrick) { + brick.setClientInfo(entityBrick.getClientInfo()); + return brick; + } + + public void copyMemoryFrom(GlusterVolumeStatusEntity entity) { + for (BrickDetails entityBrick : entity.getBrickDetails()) { + for (BrickDetails brick : getBrickDetails()) { + if (entityBrick.getBrickId().equals(brick.getBrickId())) { + brick = copyMemoryDetails(brick, entityBrick); + } + } + } + } + + private BrickDetails copyMemoryDetails(BrickDetails brick, BrickDetails entityBrick) { + brick.setMemoryStatus(entityBrick.getMemoryStatus()); + return brick; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeStatusOption.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeStatusOption.java new file mode 100644 index 0000000..b4f0377 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeStatusOption.java @@ -0,0 +1,12 @@ +package org.ovirt.engine.core.common.businessentities.gluster; + + +/** + * Enum of Gluster volume Statuses + * + */ +public enum GlusterVolumeStatusOption { + DETAIL, + CLIENTS, + MEM; +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/MemoryStatus.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/MemoryStatus.java new file mode 100644 index 0000000..bc799af --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/MemoryStatus.java @@ -0,0 +1,36 @@ +package org.ovirt.engine.core.common.businessentities.gluster; + +import java.util.List; + + +/** + * The gluster volume Memory status info. + * + */ +public class MemoryStatus{ + + public MemoryStatus() { + } + + private GlusterMallInfo glusterMallInfo; + + private List<GlusterMempool> glusterMemPool; + + public GlusterMallInfo getGlusterMallInfo() { + return glusterMallInfo; + } + + public void setGlusterMallInfo(GlusterMallInfo glusterMallInfo) { + this.glusterMallInfo = glusterMallInfo; + } + + public List<GlusterMempool> getGlusterMemPool() { + return glusterMemPool; + } + + public void setGlusterMemPool(List<GlusterMempool> glusterMemPool) { + this.glusterMemPool = glusterMemPool; + } + + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/GlusterVolumeStatusParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/GlusterVolumeStatusParameters.java new file mode 100644 index 0000000..8f763b1 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/GlusterVolumeStatusParameters.java @@ -0,0 +1,45 @@ +package org.ovirt.engine.core.common.queries.gluster; + +import org.ovirt.engine.core.compat.Guid; + +/** + * Parameter class with volume name, brick name and details as parameters. <br> + * This will be used by gluster volume status query. <br> + */ +public class GlusterVolumeStatusParameters extends GlusterParameters { + private static final long serialVersionUID = -1224829720081853632L; + private String volumeName; + private String brickName; + private boolean details; + + public GlusterVolumeStatusParameters(Guid clusterId, String volumeName, String brickName, boolean details) { + super(clusterId); + setVolumeName(volumeName); + setBrickName(brickName); + setDetails(details); + } + + public String getVolumeName() { + return volumeName; + } + + public void setVolumeName(String volumeName) { + this.volumeName = volumeName; + } + + public String getBrickName() { + return brickName; + } + + public void setBrickName(String brickName) { + this.brickName = brickName; + } + + public boolean isDetails() { + return details; + } + + public void setDetails(boolean details) { + this.details = details; + } +} 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 7d0d18a6..aacddd9 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 @@ -137,6 +137,7 @@ GlusterHostRemove("org.ovirt.engine.core.vdsbroker.gluster"), GlusterHostAdd("org.ovirt.engine.core.vdsbroker.gluster"), GlusterServersList("org.ovirt.engine.core.vdsbroker.gluster"), + GetGlusterVolumeStatus("org.ovirt.engine.core.vdsbroker.gluster"), ; String packageName; diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/gluster/GlusterVolumeStatusVDSParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/gluster/GlusterVolumeStatusVDSParameters.java new file mode 100644 index 0000000..4063cb3 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/gluster/GlusterVolumeStatusVDSParameters.java @@ -0,0 +1,37 @@ +package org.ovirt.engine.core.common.vdscommands.gluster; + +import org.ovirt.engine.core.compat.Guid; + +/** + * VDS parameter class with clusterId, volume name, brick name, details as parameter. <br> + * This will be used directly by Get Volume Status Query <br> + */ +public class GlusterVolumeStatusVDSParameters extends GlusterVolumeVDSParameters { + private final Guid clusterId; + private final String brickName; + private final boolean details; + + public GlusterVolumeStatusVDSParameters(Guid upServerId, + Guid clusterId, + String volumeName, + String brickName, + boolean details) { + super(upServerId, volumeName); + this.clusterId = clusterId; + this.brickName = brickName; + this.details = details; + } + + public Guid getClusterId() { + return clusterId; + } + + public boolean isDetails() { + return details; + } + + public String getBrickName() { + return brickName; + } + +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeStatusVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeStatusVDSCommand.java new file mode 100644 index 0000000..e38a92f --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GetGlusterVolumeStatusVDSCommand.java @@ -0,0 +1,68 @@ +package org.ovirt.engine.core.vdsbroker.gluster; + +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeStatusEntity; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeStatusOption; +import org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeStatusVDSParameters; +import org.ovirt.engine.core.vdsbroker.irsbroker.GlusterVolumeStatusReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; + +public class GetGlusterVolumeStatusVDSCommand<P extends GlusterVolumeStatusVDSParameters> extends AbstractGlusterBrokerCommand<P> { + private GlusterVolumeStatusReturnForXmlRpc result; + + public GetGlusterVolumeStatusVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected StatusForXmlRpc getReturnStatus() { + return result.mStatus; + } + + private boolean getSucceeded() { + return (result.mStatus.mCode == 0); + } + + @Override + protected void ExecuteVdsBrokerCommand() { + GlusterVolumeStatusEntity volumeStatusEntity = new GlusterVolumeStatusEntity(); + if (!getParameters().isDetails()) { + result = executeVolumeStatusInfo(volumeStatusEntity, ""); + volumeStatusEntity = result.getVolumeStatus(); + } else { + result = executeVolumeStatusInfo(volumeStatusEntity, ""); + if (getSucceeded()) { + volumeStatusEntity = result.getVolumeStatus(); + result = + executeVolumeStatusInfo(volumeStatusEntity, GlusterVolumeStatusOption.DETAIL.name() + .toLowerCase()); + if (getSucceeded()) { + volumeStatusEntity.copyDetailsFrom(result.getVolumeStatus()); + + result = + executeVolumeStatusInfo(volumeStatusEntity, GlusterVolumeStatusOption.CLIENTS.name() + .toLowerCase()); + if (getSucceeded()) { + volumeStatusEntity.copyClientsFrom(result.getVolumeStatus()); + + result = + executeVolumeStatusInfo(volumeStatusEntity, GlusterVolumeStatusOption.MEM.name() + .toLowerCase()); + if (getSucceeded()) { + volumeStatusEntity.copyMemoryFrom(result.getVolumeStatus()); + } + } + } + } + } + + ProceedProxyReturnValue(); + setReturnValue(volumeStatusEntity); + } + + private GlusterVolumeStatusReturnForXmlRpc executeVolumeStatusInfo(GlusterVolumeStatusEntity entity, + String volumeStatusOption) { + return getBroker().glusterVolumeStatus(getParameters().getClusterId(), + getParameters().getVolumeName(), getParameters().getBrickName(), + volumeStatusOption); + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GlusterVolumeStatusReturnForXmlRpc.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GlusterVolumeStatusReturnForXmlRpc.java new file mode 100644 index 0000000..da6c450 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GlusterVolumeStatusReturnForXmlRpc.java @@ -0,0 +1,272 @@ +package org.ovirt.engine.core.vdsbroker.irsbroker; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.core.common.businessentities.gluster.BrickDetails; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterClientInfo; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterMallInfo; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterMempool; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeStatusEntity; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeStatusEntity.VolumeStatusNfs; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeStatusEntity.VolumeStatusShd; +import org.ovirt.engine.core.common.businessentities.gluster.MemoryStatus; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao; +import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; + +@SuppressWarnings("unchecked") +public class GlusterVolumeStatusReturnForXmlRpc extends StatusReturnForXmlRpc { + private static final String STATUS = "status"; + private static final String VOLUME_STATUS = "volumeStatus"; + private static final String VOLUME_NAME = "name"; + private static final String PORT = "port"; + private static final String PID = "pid"; + private static final String ONLINE = "ONLINE"; + private static final String BRICKS = "bricks"; + private static final String BRICK = "brick"; + private static final String NFS = "nfs"; + private static final String SHD = "shd"; + private static final String HOSTNAME = "hostname"; + + private static final String DETAIL_SIZE_TOTAL = "sizeTotal"; + private static final String DETAIL_SIZE_FREE = "sizeFree"; + private static final String DETAIL_DEVICE = "device"; + private static final String DETAIL_BLOCK_SIZE = "blockSize"; + private static final String DETAIL_MNT_OPTIONS = "mntOptions"; + private static final String DETAIL_FS_NAME = "fsName"; + + private static final String CLIENTS_STATUS = "clientsStatus"; + private static final String CLIENTS_HOST_NAME = "hostname"; + private static final String CLIENTS_BYTES_READ = "bytesRead"; + private static final String CLIENTS_BYTES_WRITE = "bytesWrite"; + + private static final String MEMORY_STATUS = "memStatus"; + private static final String MEMORY_MALL_INFO = "mallinfo"; + private static final String MEMORY_ARENA = "arena"; + private static final String MEMORY_ORDBLKS = "ordblks"; + private static final String MEMORY_SMBLKS = "smblks"; + private static final String MEMORY_HBLKS = "hblks"; + private static final String MEMORY_HBLKHD = "hblkhd"; + private static final String MEMORY_USMBLKS = "usmblks"; + private static final String MEMORY_FSMBLKS = "fsmblks"; + private static final String MEMORY_UORDBLKS = "uordblks"; + private static final String MEMORY_FORDBLKS = "fordblks"; + private static final String MEMORY_KEEPCOST = "keepcost"; + + private static final String MEMORY_MEM_POOL = "mempool"; + private static final String MEMORY_NAME = "name"; + private static final String MEMORY_HOTCOUNT = "hotCount"; + private static final String MEMORY_COLDCOUNT = "coldCount"; + private static final String MEMORY_PADDDEDSIZEOF = "padddedSizeOf"; + private static final String MEMORY_ALLOCCOUNT = "allocCount"; + private static final String MEMORY_MAXALLOC = "maxAlloc"; + private static final String MEMORY_POOLMISSES = "poolMisses"; + private static final String MEMORY_MAXSTDALLOC = "maxStdAlloc"; + + // We are ignoring missing fields after the status, because on failure it is + // not sent. + // [XmlRpcMissingMapping(MappingAction.Ignore), XmlRpcMember("volumeStatus")] + + // [XmlRpcMember("status")] + public StatusForXmlRpc mStatus; + + GlusterVolumeStatusEntity volumeStatusEntity; + List<BrickDetails> brickDetails; + private GlusterVolumeEntity volume; + List<VolumeStatusNfs> volumeStatusNfs; + List<VolumeStatusShd> volumeStatusShd; + + public GlusterVolumeStatusReturnForXmlRpc(Guid clusterId, Map<String, Object> innerMap) { + super(innerMap); + mStatus = new StatusForXmlRpc((Map<String, Object>) innerMap.get(STATUS)); + Map<String, Object> statusInfo = (Map<String, Object>) innerMap.get(VOLUME_STATUS); + + if (statusInfo != null) { + String volumeName = (String) statusInfo.get(VOLUME_NAME); + volume = getGlusterVolumeDao().getByName(clusterId, volumeName); + + prepareVolumeStatusInfoEntity((Map<String, Object>) statusInfo.get(BRICKS)); + + if (statusInfo.get(NFS) != null && ((String) statusInfo.get(NFS)).length() > 0) { + prepareVolumeNfsStatus((Map<String, Object>) statusInfo.get(NFS)); + volumeStatusEntity.setVolumeStatusNfs(volumeStatusNfs); + } + if ( statusInfo.get(SHD) != null && ((String) statusInfo.get(SHD)).length() > 0) { + prepareVolumeShdStatus((Map<String, Object>) statusInfo.get(SHD)); + volumeStatusEntity.setVolumeStatusShd(volumeStatusShd); + } + volumeStatusEntity.setId(volume.getId()); + volumeStatusEntity.setBrickDetails(brickDetails); + } + } + + public GlusterVolumeStatusEntity getVolumeStatus() { + return volumeStatusEntity; + } + + private void prepareVolumeNfsStatus(Map<String, Object> nfsInfo) { + for (int i = 0; i < nfsInfo.size(); i++) { + VolumeStatusNfs nfsStatus = volumeStatusEntity.new VolumeStatusNfs(); + nfsStatus.setHostName((String) nfsInfo.get(HOSTNAME)); + nfsStatus.setPort(Integer.valueOf((String) nfsInfo.get(PORT))); + nfsStatus.setPid(Integer.valueOf((String) nfsInfo.get(PID))); + + String brickStatus = (String) nfsInfo.get(STATUS); + if (brickStatus.toUpperCase().equals(ONLINE)) { + nfsStatus.setStatus(GlusterStatus.UP); + } else { + nfsStatus.setStatus(GlusterStatus.DOWN); + } + volumeStatusNfs.add(nfsStatus); + } + } + + private void prepareVolumeShdStatus(Map<String, Object> shdInfo) { + for (int i = 0; i < shdInfo.size(); i++) { + VolumeStatusShd shdStatus = volumeStatusEntity.new VolumeStatusShd(); + shdStatus.setHostName((String) shdInfo.get(HOSTNAME)); + shdStatus.setPid(Integer.valueOf((String) shdInfo.get(PID))); + String brickStatus = (String) shdInfo.get(STATUS); + if (brickStatus.toUpperCase().equals(ONLINE)) { + shdStatus.setStatus(GlusterStatus.UP); + } else { + shdStatus.setStatus(GlusterStatus.DOWN); + } + volumeStatusShd.add(shdStatus); + } + } + + private void prepareVolumeStatusInfoEntity(Map<String, Object> bricksList) { + for (int i = 0; i < bricksList.size(); i++) { + BrickDetails volumeBrickDetails = new BrickDetails(); + volumeBrickDetails.setBrickId(getBrickId(volume.getBricks(), (String) bricksList.get(BRICK))); + volumeBrickDetails.setPort(Integer.valueOf((String) bricksList.get(PORT))); + volumeBrickDetails.setPid(Integer.valueOf((String) bricksList.get(PID))); + + String brickStatus = (String) bricksList.get(STATUS); + if (brickStatus.toUpperCase().equals(ONLINE)) { + volumeBrickDetails.setStatus(GlusterStatus.UP); + } else { + volumeBrickDetails.setStatus(GlusterStatus.DOWN); + } + + // Fetch the volume status detail + if (bricksList.get(DETAIL_SIZE_TOTAL) != null && ((String) bricksList.get(DETAIL_SIZE_TOTAL)).length() > 0) { + volumeBrickDetails.setTotalSize(Double.valueOf((String) bricksList.get(DETAIL_SIZE_TOTAL))); + } + if (bricksList.get(DETAIL_SIZE_FREE) != null && ((String) bricksList.get(DETAIL_SIZE_FREE)).length() > 0) { + volumeBrickDetails.setFreeSize(Double.valueOf((String) bricksList.get(DETAIL_SIZE_FREE))); + } + + if (bricksList.get(DETAIL_DEVICE) != null && ((String) bricksList.get(DETAIL_DEVICE)).length() > 0) { + volumeBrickDetails.setDevice((String) bricksList.get(DETAIL_DEVICE)); + } + + if (bricksList.get(DETAIL_BLOCK_SIZE) != null && ((String) bricksList.get(DETAIL_BLOCK_SIZE)).length() > 0) { + volumeBrickDetails.setBlockSize(Integer.valueOf((String) bricksList.get(DETAIL_BLOCK_SIZE))); + } + + if (bricksList.get(DETAIL_MNT_OPTIONS) != null + && ((String) bricksList.get(DETAIL_MNT_OPTIONS)).length() > 0) { + volumeBrickDetails.setMntOptions((String) bricksList.get(DETAIL_MNT_OPTIONS)); + } + + if (bricksList.get(DETAIL_FS_NAME) != null && ((String) bricksList.get(DETAIL_FS_NAME)).length() > 0) { + volumeBrickDetails.setFsName((String) bricksList.get(DETAIL_FS_NAME)); + } + + // Fetch Clients Details + if (bricksList.get(CLIENTS_STATUS) != null && ((String) bricksList.get(CLIENTS_STATUS)).length() > 0) { + volumeBrickDetails.setClientInfo(prepareClientInfo((Map<String, Object>) bricksList.get(CLIENTS_STATUS))); + } + + // Fetch Memory Details + if (bricksList.get(MEMORY_STATUS) != null && ((String) bricksList.get(MEMORY_STATUS)).length() > 0) { + volumeBrickDetails.setMemoryStatus(prepareMemoryStatus((Map<String, Object>) bricksList.get(MEMORY_STATUS))); + } + + brickDetails.add(volumeBrickDetails); + } + } + + private MemoryStatus prepareMemoryStatus(Map<String, Object> memStatus) { + MemoryStatus memoryStatus = new MemoryStatus(); + memoryStatus.setGlusterMallInfo(prepareMallInfo((Map<String, Object>) memStatus.get(MEMORY_MALL_INFO))); + memoryStatus.setGlusterMemPool(prepareMemPool((Map<String, Object>) memStatus.get(MEMORY_MEM_POOL))); + return memoryStatus; + } + + private List<GlusterMempool> prepareMemPool(Map<String, Object> memPool) { + List<GlusterMempool> memPoolList = new ArrayList<GlusterMempool>(); + for (int i = 0; i < memPool.size(); i++) { + GlusterMempool glusterMemoryPool = new GlusterMempool(); + glusterMemoryPool.setName((String) memPool.get(MEMORY_NAME)); + glusterMemoryPool.setHotCount(Integer.valueOf((String) memPool.get(MEMORY_HOTCOUNT))); + glusterMemoryPool.setColdCount(Integer.valueOf((String) memPool.get(MEMORY_COLDCOUNT))); + glusterMemoryPool.setPadddedSize(Integer.valueOf((String) memPool.get(MEMORY_PADDDEDSIZEOF))); + glusterMemoryPool.setAllocCount(Integer.valueOf((String) memPool.get(MEMORY_ALLOCCOUNT))); + glusterMemoryPool.setMaxAlloc(Integer.valueOf((String) memPool.get(MEMORY_MAXALLOC))); + glusterMemoryPool.setPoolMisses(Integer.valueOf((String) memPool.get(MEMORY_POOLMISSES))); + glusterMemoryPool.setMaxStdAlloc(Integer.valueOf((String) memPool.get(MEMORY_MAXSTDALLOC))); + memPoolList.add(glusterMemoryPool); + } + return memPoolList; + } + + private GlusterMallInfo prepareMallInfo(Map<String, Object> mallInfo) { + GlusterMallInfo glusterMallInfo = new GlusterMallInfo(); + glusterMallInfo.setArena(Integer.valueOf((String) mallInfo.get(MEMORY_ARENA))); + glusterMallInfo.setOrdblks(Integer.valueOf((String) mallInfo.get(MEMORY_ORDBLKS))); + glusterMallInfo.setSmblks(Integer.valueOf((String) mallInfo.get(MEMORY_SMBLKS))); + glusterMallInfo.setHblks(Integer.valueOf((String) mallInfo.get(MEMORY_HBLKS))); + glusterMallInfo.setHblkhd(Integer.valueOf((String) mallInfo.get(MEMORY_HBLKHD))); + glusterMallInfo.setUsmblks(Integer.valueOf((String) mallInfo.get(MEMORY_USMBLKS))); + glusterMallInfo.setFsmblks(Integer.valueOf((String) mallInfo.get(MEMORY_FSMBLKS))); + glusterMallInfo.setUordblks(Integer.valueOf((String) mallInfo.get(MEMORY_UORDBLKS))); + glusterMallInfo.setFordblks(Integer.valueOf((String) mallInfo.get(MEMORY_FORDBLKS))); + glusterMallInfo.setKeepcost(Integer.valueOf((String) mallInfo.get(MEMORY_KEEPCOST))); + return glusterMallInfo; + } + + private List<GlusterClientInfo> prepareClientInfo(Map<String, Object> clientsStatus) { + List<GlusterClientInfo> clientInfoList = new ArrayList<GlusterClientInfo>(); + for (int i = 0; i < clientsStatus.size(); i++) { + GlusterClientInfo clientInfo = new GlusterClientInfo(); + String hostName = (String) clientsStatus.get(CLIENTS_HOST_NAME); + String[] hostNameArr = hostName.split(":", -1); + + clientInfo.setHostname(hostNameArr[0]); + clientInfo.setClientPort(Integer.valueOf(hostNameArr[1])); + clientInfo.setBytesRead(Integer.valueOf((String) clientsStatus.get(CLIENTS_BYTES_READ))); + clientInfo.setBytesWrite(Integer.valueOf((String) clientsStatus.get(CLIENTS_BYTES_WRITE))); + clientInfoList.add(clientInfo); + } + return clientInfoList; + } + + private Guid getBrickId(List<GlusterBrickEntity> bricksList, String qualifiedBrickName) { + String[] brickParts = qualifiedBrickName.split(":", -1); + + if (brickParts.length != 2) { + throw new RuntimeException("Invalid brick representation [" + qualifiedBrickName + "]"); + } + for (GlusterBrickEntity brick : bricksList) { + // Compare the brickname with the existing volume brick + if (brick.getQualifiedName().equals(qualifiedBrickName)) { + return brick.getId(); + } + } + return null; + } + + protected GlusterVolumeDao getGlusterVolumeDao() { + return DbFacade.getInstance().getGlusterVolumeDao(); + } + +} 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 f04e32e..fe76154 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 @@ -4,8 +4,10 @@ import java.util.concurrent.Future; import java.util.concurrent.FutureTask; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.vdsbroker.irsbroker.GlusterServersListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.GlusterVolumeOptionsInfoReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.irsbroker.GlusterVolumeStatusReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.IsoListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcStruct; @@ -236,4 +238,5 @@ GlusterServersListReturnForXmlRpc glusterServersList(); + GlusterVolumeStatusReturnForXmlRpc glusterVolumeStatus(Guid clusterId, String volumeName, String brickName, String volumeStatusOption); } 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 246da01..076b122 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 @@ -231,4 +231,6 @@ @FutureCall(delegeteTo = "ping") public FutureTask<Map<String, Object>> futurePing(); + public Map<String, Object> glusterVolumeStatus(String volumeName, String brickName, String volumeStatusOption); + } 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 a711e24..5c227ad 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 @@ -6,8 +6,10 @@ import java.util.concurrent.FutureTask; import org.apache.commons.httpclient.HttpClient; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.vdsbroker.irsbroker.GlusterServersListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.GlusterVolumeOptionsInfoReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.irsbroker.GlusterVolumeStatusReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.IsoListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcRunTimeException; @@ -1149,4 +1151,16 @@ } } + @Override + public GlusterVolumeStatusReturnForXmlRpc glusterVolumeStatus(Guid clusterId, + String volumeName, String brickName, String volumeStatusOption) { + try { + Map<String, Object> xmlRpcReturnValue = vdsServer.glusterVolumeStatus(volumeName, brickName, volumeStatusOption); + GlusterVolumeStatusReturnForXmlRpc wrapper = + new GlusterVolumeStatusReturnForXmlRpc(clusterId, xmlRpcReturnValue); + return wrapper; + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } } -- To view, visit http://gerrit.ovirt.org/7807 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If6b590eaebeb1d06b7278300d5e12b2dab9eb093 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Dhandapani Gopal <dgo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches