Adam Litke has uploaded a new change for review. Change subject: [WIP] core: initial support for the getVmJobs API ......................................................................
[WIP] core: initial support for the getVmJobs API Change-Id: Iaf43c0860599436d4a2c2a512a06ee12cbed69ac Signed-off-by: Adam Litke <[email protected]> --- A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobInfo.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobInfo.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobState.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetVmJobsVDSCommandParameters.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetVmJobsVDSCommand.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/VdsProperties.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 A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmJobsReturnForXmlRpc.java M frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml 15 files changed, 329 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/24876/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobInfo.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobInfo.java new file mode 100644 index 0000000..482b41d --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobInfo.java @@ -0,0 +1,61 @@ +package org.ovirt.engine.core.common.businessentities; + +import org.ovirt.engine.core.compat.Guid; + +public class VmBlockJobInfo extends VmJobInfo { + + private static final long serialVersionUID = -7009231492231684166L; + + private VmBlockJobType blockJobType; + private Long bandwidth; + private Long cursorCur; + private Long cursorEnd; + private Guid imageUUID; + + public VmBlockJobInfo() { + super(); + blockJobType = VmBlockJobType.UNKNOWN; + bandwidth = cursorCur = cursorEnd = 0L; + imageUUID = Guid.Empty; + } + + public VmBlockJobType getBlockJobType() { + return blockJobType; + } + + public void setBlockJobType(VmBlockJobType blockJobType) { + this.blockJobType = blockJobType; + } + + public Long getBandwidth() { + return bandwidth; + } + + public void setBandwidth(Long bandwidth) { + this.bandwidth = bandwidth; + } + + public Long getCursorCur() { + return cursorCur; + } + + public void setCursorCur(Long cursorCur) { + this.cursorCur = cursorCur; + } + + public Long getCursorEnd() { + return cursorEnd; + } + + public void setCursorEnd(Long cursorEnd) { + this.cursorEnd = cursorEnd; + } + + public Guid getImageUUID() { + return imageUUID; + } + + public void setImageUUID(Guid imageUUID) { + this.imageUUID = imageUUID; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobType.java new file mode 100644 index 0000000..528913a --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobType.java @@ -0,0 +1,21 @@ +package org.ovirt.engine.core.common.businessentities; + +public enum VmBlockJobType { + UNKNOWN, + COPY, + REBASE, + COMMIT; + + public static VmBlockJobType getByName(String name) { + if (name == null || name.length() == 0) { + return null; + } else { + for (VmBlockJobType vmBlockJobType : VmBlockJobType.values()) { + if (vmBlockJobType.name().equalsIgnoreCase(name)) { + return vmBlockJobType; + } + } + } + return null; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobInfo.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobInfo.java new file mode 100644 index 0000000..bd03930 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobInfo.java @@ -0,0 +1,21 @@ +package org.ovirt.engine.core.common.businessentities; + +import java.io.Serializable; + +public class VmJobInfo implements Serializable { + + private static final long serialVersionUID = -1748312497527481706L; + private VmJobState jobState; + + protected VmJobInfo() { + jobState = VmJobState.UNKNOWN; + } + + public VmJobState getJobState() { + return jobState; + } + + public void setJobState(VmJobState jobState) { + this.jobState = jobState; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobState.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobState.java new file mode 100644 index 0000000..af4197a --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobState.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.common.businessentities; + +public enum VmJobState { + UNKNOWN, + NORMAL; + + public static VmJobState getByName(String name) { + if (name == null || name.length() == 0) { + return null; + } else { + for (VmJobState vmJobState : VmJobState.values()) { + if (vmJobState.name().equalsIgnoreCase(name)) { + return vmJobState; + } + } + } + return null; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobType.java new file mode 100644 index 0000000..4e10ed6 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobType.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.common.businessentities; + +public enum VmJobType { + UNKNOWN, + BLOCK; + + public static VmJobType getByName(String name) { + if (name == null || name.length() == 0) { + return null; + } else { + for (VmJobType vmJobType : VmJobType.values()) { + if (vmJobType.name().equalsIgnoreCase(name)) { + return vmJobType; + } + } + } + return null; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java index 7dd6484..080042a 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java @@ -197,4 +197,6 @@ public void setVmBalloonInfo(VmBalloonInfo vmBalloonInfo) { this.vmBalloonInfo = vmBalloonInfo; } + + } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetVmJobsVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetVmJobsVDSCommandParameters.java new file mode 100644 index 0000000..20a1035 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetVmJobsVDSCommandParameters.java @@ -0,0 +1,23 @@ +package org.ovirt.engine.core.common.vdscommands; + +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.compat.Guid; + +public class GetVmJobsVDSCommandParameters extends VdsAndVmIDVDSParametersBase { + private VDS vds; + + public GetVmJobsVDSCommandParameters(VDS vds, Guid vmId) { + super(vds.getId(), vmId); + this.vds = vds; + } + + public GetVmJobsVDSCommandParameters() { + } + + /** + * @return the vds + */ + public VDS getVds() { + return vds; + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java index a970511..070a2d3 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java @@ -35,12 +35,14 @@ import org.ovirt.engine.core.common.businessentities.VdsDynamic; import org.ovirt.engine.core.common.businessentities.VdsStatistics; import org.ovirt.engine.core.common.businessentities.VmBalloonInfo; +import org.ovirt.engine.core.common.businessentities.VmBlockJobInfo; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType; import org.ovirt.engine.core.common.businessentities.VmDeviceId; import org.ovirt.engine.core.common.businessentities.VmDynamic; import org.ovirt.engine.core.common.businessentities.VmExitStatus; import org.ovirt.engine.core.common.businessentities.VmGuestAgentInterface; +import org.ovirt.engine.core.common.businessentities.VmJobInfo; import org.ovirt.engine.core.common.businessentities.VmPauseStatus; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmStatistics; @@ -58,6 +60,7 @@ import org.ovirt.engine.core.common.utils.VmDeviceType; import org.ovirt.engine.core.common.vdscommands.DestroyVmVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.FullListVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.GetVmJobsVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.GetVmStatsVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.SetVdsStatusVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; @@ -80,6 +83,7 @@ import org.ovirt.engine.core.vdsbroker.vdsbroker.FullListVdsCommand; import org.ovirt.engine.core.vdsbroker.vdsbroker.GetAllVmStatsVDSCommand; import org.ovirt.engine.core.vdsbroker.vdsbroker.GetStatsVDSCommand; +import org.ovirt.engine.core.vdsbroker.vdsbroker.GetVmJobsVDSCommand; import org.ovirt.engine.core.vdsbroker.vdsbroker.GetVmStatsVDSCommand; import org.ovirt.engine.core.vdsbroker.vdsbroker.ListVDSCommand; import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSErrorException; @@ -929,6 +933,31 @@ } } + private void refreshVmJobs() { + GetVmJobsVDSCommand<GetVmJobsVDSCommandParameters> command; + ArrayList<VmJobInfo> infoList; + + for (VmInternalData vmInternalData : _runningVms.values()) { + Guid vmId = vmInternalData.getVmDynamic().getId(); + if (_vmDict.get(vmId) == null) { + continue; // if vm is unknown - continue + } + + command = new GetVmJobsVDSCommand<GetVmJobsVDSCommandParameters>( + new GetVmJobsVDSCommandParameters(_vds, vmId)); + infoList = (ArrayList<VmJobInfo>) command.executeWithReturnValue(); + if (command.getVDSReturnValue().getSucceeded()) { + for (VmJobInfo job: infoList) { + if (!(job instanceof VmBlockJobInfo)) { + continue; + } + VmBlockJobInfo blockJob = (VmBlockJobInfo) job; + log.infoFormat("VmJob: vmId:{0} imageId:{1}", vmId, blockJob.getImageUUID()); + } + } + } + } + private void refreshVmStats() { if (Config.<Boolean> getValue(ConfigValues.DebugTimerLogging)) { log.debug("vds::refreshVmList entered"); @@ -973,6 +1002,8 @@ prepareGuestAgentNetworkDevicesForUpdate(); + refreshVmJobs(); + } else if (command.getVDSReturnValue().getExceptionObject() != null) { if (command.getVDSReturnValue().getExceptionObject() instanceof VDSErrorException) { log.errorFormat("Failed vds listing, vds = {0} : {1}, error = {2}", _vds.getId(), diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetVmJobsVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetVmJobsVDSCommand.java new file mode 100644 index 0000000..27a89b4 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetVmJobsVDSCommand.java @@ -0,0 +1,65 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +import java.util.ArrayList; +import java.util.Map; + +import org.ovirt.engine.core.common.businessentities.VmBlockJobInfo; +import org.ovirt.engine.core.common.businessentities.VmBlockJobType; +import org.ovirt.engine.core.common.businessentities.VmJobInfo; +import org.ovirt.engine.core.common.businessentities.VmJobState; +import org.ovirt.engine.core.common.businessentities.VmJobType; +import org.ovirt.engine.core.common.vdscommands.GetVmJobsVDSCommandParameters; +import org.ovirt.engine.core.compat.Guid; + +public class GetVmJobsVDSCommand<P extends GetVmJobsVDSCommandParameters> extends VdsBrokerCommand<P> { + protected VmJobsReturnForXmlRpc _result; + + public GetVmJobsVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected void executeVdsBrokerCommand() { + _result = getBroker().getVmJobs(getParameters().getVmId().toString()); + proceedProxyReturnValue(); + setReturnValue(parseVmJobList(_result.jobs)); + } + + @Override + protected StatusForXmlRpc getReturnStatus() { + return _result.mStatus; + } + + @SuppressWarnings("unchecked") + protected ArrayList<VmJobInfo> parseVmJobList(Map<String, Object>[] jobs) { + ArrayList<VmJobInfo> result = new ArrayList<VmJobInfo>(); + for (Map<String, Object> jobMap: jobs) { + Object infoObj = jobMap.get(VdsProperties.vmJobInfo); + Map<String, Object> infoMap = (Map<String, Object>) infoObj; + + // The only jobType we support is BLOCK + String jobType = (String) infoMap.get(VdsProperties.vmJobType); + if (VmJobType.getByName(jobType) != VmJobType.BLOCK) { + continue; + } + + VmBlockJobInfo job = new VmBlockJobInfo(); + job.setJobState(VmJobState.getByName((String) jobMap.get(VdsProperties.vmJobState))); + job.setBlockJobType(VmBlockJobType.getByName((String) infoMap.get(VdsProperties.vmBlockJobType))); + Long bandwidth = Long.parseLong(infoMap.get(VdsProperties.vmJobBandwidth).toString()); + Long cursorCur = Long.parseLong(infoMap.get(VdsProperties.vmJobCursorCur).toString()); + Long cursorEnd = Long.parseLong(infoMap.get(VdsProperties.vmJobCursorEnd).toString()); + job.setBandwidth(bandwidth); + job.setCursorCur(cursorCur); + job.setCursorEnd(cursorEnd); + job.setImageUUID(new Guid((String) infoMap.get(VdsProperties.vmJobImageUUID))); + result.add(job); + } + return result; + } + + @Override + protected Object getReturnValueFromBroker() { + return _result; + } +} 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 173c9e6..fc7334a 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 @@ -300,4 +300,6 @@ GlusterVolumeTaskReturnForXmlRpc glusterVolumeRemoveBrickStatus(String volumeName, String[] bricksList); StatusOnlyReturnForXmlRpc setNumberOfCpus(String vmId, String numberOfCpus); + + VmJobsReturnForXmlRpc getVmJobs(String vmId); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java index 2c7cd65..70ebaa9 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java @@ -333,4 +333,16 @@ // properties for ServerConnectionListReturnForXmlRpc public static final String serverType = "serverType"; public static final String target = "target"; + + // VM Jobs + public static final String vmJobs = "jobs"; + public static final String vmJobState = "state"; + public static final String vmJobInfo = "info"; + public static final String vmJobType = "jobType"; + public static final String vmBlockJobType = "opType"; + public static final String vmJobBandwidth = "bandwidth"; + public static final String vmJobCursorCur = "cur"; + public static final String vmJobCursorEnd = "end"; + public static final String vmJobImageUUID = "imgUUID"; + } 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 816de0f..cdb671a 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 @@ -283,4 +283,6 @@ public Map<String, Object> glusterVolumeRemoveBrickStatus(String volumeName, String[] bricksList); public Map<String, Object> setNumberOfCpus(String vmId, String numberOfCpus); + + public Map<String, Object> getVmJobs(String vmId); } 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 ae3727b..2dc3cb3 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 @@ -1395,4 +1395,15 @@ StoragePoolInfoReturnForXmlRpc wrapper = new StoragePoolInfoReturnForXmlRpc(xmlRpcReturnValue); return wrapper; } + + @Override + public VmJobsReturnForXmlRpc getVmJobs(String vmId) { + try { + Map<String, Object> xmlRpcReturnValue = vdsServer.getVmJobs(vmId); + VmJobsReturnForXmlRpc wrapper = new VmJobsReturnForXmlRpc(xmlRpcReturnValue); + return wrapper; + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmJobsReturnForXmlRpc.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmJobsReturnForXmlRpc.java new file mode 100644 index 0000000..4f7676f --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmJobsReturnForXmlRpc.java @@ -0,0 +1,35 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +import java.util.HashMap; +import java.util.Map; + +import org.ovirt.engine.core.vdsbroker.irsbroker.StatusReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcObjectDescriptor; + +@SuppressWarnings("unchecked") +public class VmJobsReturnForXmlRpc extends StatusReturnForXmlRpc { + private static final String JOBS = "jobs"; + public Map<String, Object>[] jobs; + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("\n"); + builder.append(super.toString()); + builder.append("\n"); + XmlRpcObjectDescriptor.toStringBuilder(jobs, builder); + return builder.toString(); + } + + public VmJobsReturnForXmlRpc(Map<String, Object> innerMap) { + super(innerMap); + Object[] temp = (Object[]) innerMap.get(JOBS); + if (temp != null) { + jobs = new HashMap[temp.length]; + for (int i = 0; i < temp.length; i++) { + jobs[i] = (Map<String, Object>) temp[i]; + } + } + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml index 05e6623..ac940f8 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml @@ -56,6 +56,11 @@ <include name="common/businessentities/VmBalloonInfo.java" /> <include name="common/businessentities/ArchitectureType.java" /> <include name="common/businessentities/IscsiBond.java" /> + <include name="common/businessentities/VmJobInfo.java" /> + <include name="common/businessentities/VmJobState.java" /> + <include name="common/businessentities/VmBlockJobInfo.java" /> + <include name="common/businessentities/VmJobType.java" /> + <include name="common/businessentities/VmBlockJobType.java" /> <!-- Network business entities --> <include name="common/businessentities/network/VdsNetworkInterface.java" /> -- To view, visit http://gerrit.ovirt.org/24876 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iaf43c0860599436d4a2c2a512a06ee12cbed69ac Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Adam Litke <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
