Arik Hadas has uploaded a new change for review. Change subject: infra ......................................................................
infra Change-Id: I9328edf7b8f49aa7975e28f651183b1449030dd6 Signed-off-by: Arik Hadas <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConvertVmFromExternalProviderCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCallBack.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/JobListener.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ConvertVmFromExternalProviderParameters.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsJob.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsStatistics.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java M frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml 10 files changed, 138 insertions(+), 13 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/12/33712/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConvertVmFromExternalProviderCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConvertVmFromExternalProviderCommand.java index ca59b07..a56ff0f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConvertVmFromExternalProviderCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConvertVmFromExternalProviderCommand.java @@ -5,12 +5,14 @@ import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.utils.PermissionSubject; +import org.ovirt.engine.core.common.JobListener; import org.ovirt.engine.core.common.action.ConvertVmFromExternalProviderParameters; import org.ovirt.engine.core.common.vdscommands.ConvertVmFromExternalProviderVDSParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.CommandStatus; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.vdsbroker.ResourceManager; @NonTransactiveCommandAttribute @InternalCommandAttribute @@ -36,8 +38,11 @@ if (vdsReturnValue.getSucceeded()) { Guid jobId = (Guid) vdsReturnValue.getReturnValue(); + getParameters().setVdsJobId(jobId); // setSucceeded to indicate executeCommand success; doPolling will check commandStatus setSucceeded(true); + JobListener listener = new ConvertVmFromExternalProviderCommandCallback(); + ResourceManager.getInstance().GetVdsManager(vdsId).addVdsJobListener(listener, jobId); log.debug("Merge started successfully"); } else { log.error("Failed to start Merge on VDS"); @@ -62,4 +67,11 @@ public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); } + + private class ConvertVmFromExternalProviderCommandCallback implements JobListener { + @Override + public void onJobFinished(Guid jobId) { + // TODO: invoke import from vm configuration + } + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCallBack.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCallBack.java index adf6c6b..8e5c636 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCallBack.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCallBack.java @@ -9,20 +9,11 @@ public CommandCallBack() {} - public void executed(VdcReturnValueBase result) { - return; - } + public void executed(VdcReturnValueBase result) {} - public void doPolling(Guid cmdId, List<Guid> childCmdIds) { - return; - } + public void doPolling(Guid cmdId, List<Guid> childCmdIds) {} - public void onFailed(Guid cmdId, List<Guid> childCmdIds) { - return; - } + public void onFailed(Guid cmdId, List<Guid> childCmdIds) {} - public void onSucceeded(Guid cmdId, List<Guid> childCmdIds) { - return; - } - + public void onSucceeded(Guid cmdId, List<Guid> childCmdIds) {} } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/JobListener.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/JobListener.java new file mode 100644 index 0000000..4e7e9c8 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/JobListener.java @@ -0,0 +1,8 @@ +package org.ovirt.engine.core.common; + +import org.ovirt.engine.core.compat.Guid; + +public interface JobListener { + + public void onJobFinished(Guid jobId); +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ConvertVmFromExternalProviderParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ConvertVmFromExternalProviderParameters.java index 45b1b50..30a5e2d 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ConvertVmFromExternalProviderParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ConvertVmFromExternalProviderParameters.java @@ -1,5 +1,7 @@ package org.ovirt.engine.core.common.action; +import org.ovirt.engine.core.compat.Guid; + public class ConvertVmFromExternalProviderParameters extends VdcActionParametersBase { @@ -7,6 +9,7 @@ private String username; private String password; private String vmName; + private Guid vdsJobId; public ConvertVmFromExternalProviderParameters() { } @@ -42,4 +45,12 @@ public void setVmName(String vmName) { this.vmName = vmName; } + + public Guid getVdsJobId() { + return vdsJobId; + } + + public void setVdsJobId(Guid vdsJobId) { + this.vdsJobId = vdsJobId; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsJob.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsJob.java new file mode 100644 index 0000000..7686c4c --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsJob.java @@ -0,0 +1,31 @@ +package org.ovirt.engine.core.common.businessentities; + +import org.ovirt.engine.core.compat.Guid; + +public class VdsJob implements BusinessEntity<Guid> { + + private Guid id; + + @Override + public Guid getId() { + return id; + } + + @Override + public void setId(Guid id) { + this.id = id; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof VdsJob) { + return id.equals(((VdsJob) obj).id); + } + return false; + } + + @Override + public int hashCode() { + return id.hashCode(); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsStatistics.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsStatistics.java index c140c1f..3c467b3 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsStatistics.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsStatistics.java @@ -39,6 +39,7 @@ private boolean highlyAvailableLocalMaintenance; private List<CpuStatistics> cpuCoreStatistics; + private List<VdsJob> vdsJobs; public VdsStatistics() { this.cpu_idle = BigDecimal.ZERO; @@ -334,4 +335,12 @@ this.cpuCoreStatistics = cpuCoreStatistics; } + public List<VdsJob> getVdsJobs() { + return vdsJobs; + } + + public void setVdsJobs(List<VdsJob> vdsJobs) { + this.vdsJobs = vdsJobs; + } + } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java index f6db808..72ccd2b 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java @@ -3,9 +3,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -14,6 +16,7 @@ import org.apache.commons.lang.exception.ExceptionUtils; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; +import org.ovirt.engine.core.common.JobListener; import org.ovirt.engine.core.common.businessentities.NonOperationalReason; import org.ovirt.engine.core.common.businessentities.SELinuxMode; import org.ovirt.engine.core.common.businessentities.VDS; @@ -22,6 +25,7 @@ import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VdsDynamic; +import org.ovirt.engine.core.common.businessentities.VdsJob; import org.ovirt.engine.core.common.businessentities.VdsNumaNode; import org.ovirt.engine.core.common.businessentities.VdsSpmStatus; import org.ovirt.engine.core.common.businessentities.VdsStatistics; @@ -86,6 +90,42 @@ private IVdsServer vdsProxy; private boolean mBeforeFirstRefresh = true; private VdsUpdateRunTimeInfo vdsUpdater; + private Map<Guid, JobListener> jobListeners = new HashMap<>(); + + public void addVdsJobListener(JobListener listener, Guid ... jobIds) { + for (Guid jobId : jobIds) { + jobListeners.put(jobId, listener); + } + } + + public void notifyVdsJobProgress(Guid jobId, Object obj) { + JobListener listener = jobListeners.get(jobId); + } + + public void notifyVdsJobFinished(Guid jobId) { + JobListener listener = jobListeners.get(jobId); + if (listener != null) { + listener.onJobFinished(jobId); + } + } + + protected void updateVdsJobs() { + if (vds.getStatisticsData().getVdsJobs() == null) { + log.debug("No vdsJob data returned from VDSM"); + return; + } + + for (VdsJob vdsJob : vds.getStatisticsData().getVdsJobs()) { + log.debug("got vds job: " + vdsJob.getId()); + notifyVdsJobProgress(vdsJob.getId(), vdsJob); + } + + Set<Guid> jobIds = new HashSet<>(jobListeners.keySet()); + jobIds.removeAll(vds.getStatisticsData().getVdsJobs()); + for (Guid jobId : jobIds) { + notifyVdsJobFinished(jobId); + } + } private VdsManager(VDS vds) { log.info("Entered VdsManager constructor"); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java index 862f765..97284b9 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java @@ -34,6 +34,7 @@ import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSDomainsData; import org.ovirt.engine.core.common.businessentities.VMStatus; +import org.ovirt.engine.core.common.businessentities.VdsJob; import org.ovirt.engine.core.common.businessentities.VdsNumaNode; import org.ovirt.engine.core.common.businessentities.VdsTransparentHugePagesState; import org.ovirt.engine.core.common.businessentities.VmBalloonInfo; @@ -802,6 +803,25 @@ updateNumaStatisticsData(vds, xmlRpcStruct); + vds.getStatisticsData().setVdsJobs(getVdsJobs(xmlRpcStruct)); + } + + private static List<VdsJob> getVdsJobs(Map<String, Object> xmlRpcStruct) { + if (!xmlRpcStruct.containsKey(VdsProperties.vdsJobs)) { + return null; + } + List<VdsJob> vdsJobs = new ArrayList<>(); + for (Object jobMap : ((Map<String, Object>) xmlRpcStruct.get(VdsProperties.vmJobs)).values()) { + VdsJob job = buildVdsJobData((Map<String, Object>) jobMap); + vdsJobs.add(job); + } + return vdsJobs; + } + + private static VdsJob buildVdsJobData(Map<String, Object> xmlRpcStruct) { + VdsJob job = new VdsJob(); + job.setId(new Guid(AssignStringValue(xmlRpcStruct, VdsProperties.vmJobId))); + return job; } private static double computeInterfaceUsage(VdsNetworkInterface iface) { 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 2eaa0f4..f7cb2a0 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 @@ -402,6 +402,8 @@ public static final String serverType = "serverType"; public static final String target = "target"; + // VDS Jobs + public static final String vdsJobs = "vdsJobs"; // VM Jobs public static final String vmJobs = "vmJobs"; public static final String vmJobId = "id"; 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 65bbc08..b662e79 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 @@ -10,6 +10,7 @@ <!-- Business entities --> <include name="common/businessentities/TemplateProvisioningMethod.java" /> + <include name="common/businessentities/VdsJob.java" /> <include name="common/businessentities/HasStoragePool.java" /> <include name="common/businessentities/BusinessEntity.java" /> <include name="common/businessentities/BusinessEntityWithStatus.java" /> -- To view, visit http://gerrit.ovirt.org/33712 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I9328edf7b8f49aa7975e28f651183b1449030dd6 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Arik Hadas <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
