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

Reply via email to