Frank Kobzik has uploaded a new change for review.

Change subject: core: vdsm -> engine communication   for spicevnc
......................................................................

core: vdsm -> engine communication   for spicevnc

(follow-up)

updating state of graphics devices according to data from vdsm.

- todos (mainly the DestroyVmVDSCommand todo)

Change-Id: Ibb38b68ba5a49238d4f9d9cce8475f6af9180077
Signed-off-by: Frantisek Kobzik <[email protected]>
Bug-Url: https://bugzilla.redhat.com/1033547
---
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.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
3 files changed, 112 insertions(+), 39 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/72/28572/1

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 5a7f128..f3101b7 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
@@ -24,6 +24,8 @@
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DiskImageDynamic;
 import org.ovirt.engine.core.common.businessentities.Entities;
+import org.ovirt.engine.core.common.businessentities.GraphicsInfo;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.businessentities.IVdsEventListener;
 import org.ovirt.engine.core.common.businessentities.LUNs;
 import org.ovirt.engine.core.common.businessentities.LunDisk;
@@ -559,11 +561,13 @@
 
             // process all vms that powering up.
             for (VmDynamic runningVm : _poweringUpVms) {
-                ResourceManager
-                        .getInstance()
-                        .getEventListener()
-                        .processOnVmPoweringUp(_vds.getId(), 
runningVm.getId(), runningVm.getDisplayIp(),
-                                runningVm.getDisplay());
+                GraphicsInfo spiceInfo = 
runningVm.getGraphicsInfos().get(GraphicsType.SPICE);
+                if (spiceInfo.isSet()) {
+                    ResourceManager
+                            .getInstance()
+                            .getEventListener()
+                            .processOnVmPoweringUp(_vds.getId(), 
runningVm.getId(), spiceInfo.getIp(), spiceInfo.getPort());
+                }
             }
 
             // process all vms that went down
@@ -1153,7 +1157,7 @@
             if (deviceId == null || vmDevice == null) {
                 deviceId = addNewVmDevice(vmId, device);
             } else {
-                vmDevice.setAddress(((Map<String, String>) 
device.get(VdsProperties.Address)).toString());
+                
vmDevice.setAddress(device.get(VdsProperties.Address).toString());
                 vmDevice.setAlias(StringUtils.defaultString((String) 
device.get(VdsProperties.Alias)));
                 addVmDeviceToList(vmDevice);
             }
@@ -1639,7 +1643,8 @@
                             && runningVm.getStatus() == VMStatus.PoweringUp) {
                         // Vm moved to powering Up or up status - launch spice
                         // if no current client ip already connected.
-                        if (runningVm.getDisplay() != null) {
+                        GraphicsInfo spiceInfo = 
runningVm.getGraphicsInfos().get(GraphicsType.SPICE);
+                        if (spiceInfo != null && spiceInfo.getPort() != null) {
                             _poweringUpVms.add(runningVm);
                         } else {
                             log.error("UpdateRepository - runningVm.display is 
null, cannot start spice for it");
@@ -1940,6 +1945,7 @@
                 props.remove(VmDynamic.STATUS_FIELD_NAME);
             }
             // if anything else changed
+
             if (!props.isEmpty()) {
                 vmToUpdate.argvalue.updateRunTimeDynamicData(vmNewDynamicData, 
_vds.getId(), _vds.getName());
                 returnValue = true;
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 3a2950e..36759e9 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
@@ -24,6 +24,8 @@
 import org.ovirt.engine.core.common.businessentities.DiskImageDynamic;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.Entities;
+import org.ovirt.engine.core.common.businessentities.GraphicsInfo;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.businessentities.KdumpStatus;
 import org.ovirt.engine.core.common.businessentities.LUNs;
 import org.ovirt.engine.core.common.businessentities.NumaNodeStatistics;
@@ -161,39 +163,10 @@
         if (xmlRpcStruct.containsKey(VdsProperties.status)) {
             vm.setStatus(convertToVmStatus((String) 
xmlRpcStruct.get(VdsProperties.status)));
         }
-        if (xmlRpcStruct.containsKey(VdsProperties.display_port)) {
-            try {
-                
vm.setDisplay(Integer.parseInt(xmlRpcStruct.get(VdsProperties.display_port).toString()));
-            } catch (NumberFormatException e) {
-                log.errorFormat("vm display_port value illegal : {0}", 
xmlRpcStruct.get(VdsProperties.display_port));
-            }
-        } else if (xmlRpcStruct.containsKey(VdsProperties.display)) {
-            try {
-                vm.setDisplay(VNC_START_PORT + 
Integer.parseInt(xmlRpcStruct.get(VdsProperties.display).toString()));
-            } catch (NumberFormatException e) {
-                log.errorFormat("vm display value illegal : {0}", 
xmlRpcStruct.get(VdsProperties.display));
-            }
-        }
-        if (xmlRpcStruct.containsKey(VdsProperties.display_secure_port)) {
-            try {
-                
vm.setDisplaySecurePort(Integer.parseInt(xmlRpcStruct.get(VdsProperties.display_secure_port)
-                        .toString()));
-            } catch (NumberFormatException e) {
-                log.errorFormat("vm display_secure_port value illegal : {0}",
-                        xmlRpcStruct.get(VdsProperties.display_secure_port));
-            }
-        }
-        if (xmlRpcStruct.containsKey((VdsProperties.displayType))) {
-            String displayType = 
xmlRpcStruct.get(VdsProperties.displayType).toString();
-            try {
-                vm.setDisplayType(DisplayType.valueOf(displayType));
 
-            } catch (Exception e2) {
-                log.errorFormat("vm display type value illegal : {0}", 
displayType);
-            }
-        }
-        if (xmlRpcStruct.containsKey((VdsProperties.displayIp))) {
-            vm.setDisplayIp((String) 
xmlRpcStruct.get(VdsProperties.displayIp));
+        boolean hasGraphicsInfo = updateGraphicsInfo(vm, xmlRpcStruct);
+        if (!hasGraphicsInfo) {
+            updateGraphicsInfoFromConf(vm, xmlRpcStruct);
         }
 
         if (xmlRpcStruct.containsKey((VdsProperties.utc_diff))) {
@@ -313,6 +286,93 @@
         }
     }
 
+    /**
+     * Updates graphics runtime information according displayInfo VDSM 
structure if it exists.
+     *
+     * @param vm - VmDynamic to update
+     * @param xmlRpcStruct - data from VDSM
+     * @return true if displayInfo exists, false otherwise
+     */
+    private static boolean updateGraphicsInfo(VmDynamic vm, Map<String, 
Object> xmlRpcStruct) {
+        Object displayInfo = xmlRpcStruct.get(VdsProperties.displayInfo);
+
+        if (displayInfo == null) {
+            return false;
+        }
+
+        for (Object info : (Object[]) displayInfo) {
+            Map<String, String> infoMap = (Map<String, String>) info;
+            GraphicsType graphicsType = 
GraphicsType.fromString(infoMap.get(VdsProperties.type));
+
+            vm.getGraphicsInfos().get(graphicsType)
+                    .setIp(infoMap.get(VdsProperties.ipAddress))
+                    
.setPort(parseIntegerOrNull(infoMap.get(VdsProperties.port)))
+                    
.setTlsPort(parseIntegerOrNull(infoMap.get(VdsProperties.tlsPort)));
+        }
+        return true;
+    }
+
+    /**
+     * Updates graphics runtime information according to vm.conf vdsm 
structure. It's used with legacy VDSMs that have
+     * no notion about graphics device.
+     * @param vm - VmDynamic to update
+     * @param xmlRpcStruct - data from VDSM
+     */
+    private static void updateGraphicsInfoFromConf(VmDynamic vm, Map<String, 
Object> xmlRpcStruct) {
+        if (!xmlRpcStruct.containsKey(VdsProperties.displayType)) { // we 
don't know which display type to update
+            return;
+        }
+
+        String displayTypeStr = 
xmlRpcStruct.get(VdsProperties.displayType).toString();
+        DisplayType displayType = DisplayType.valueOf(displayTypeStr);
+
+        GraphicsType vmGraphicsType = (displayType == DisplayType.qxl)
+                ? GraphicsType.SPICE
+                : GraphicsType.VNC;
+
+        GraphicsInfo graphicsInfo = vm.getGraphicsInfos().get(vmGraphicsType);
+
+        try {
+            vm.setDisplayType(displayType);
+        } catch (Exception e2) {
+            log.errorFormat("vm display type value illegal : {0}", 
displayType);
+        }
+        if (xmlRpcStruct.containsKey(VdsProperties.display_port)) {
+            try {
+                
graphicsInfo.setPort(Integer.parseInt(xmlRpcStruct.get(VdsProperties.display_port).toString()));
+            } catch (NumberFormatException e) {
+                log.errorFormat("vm display_port value illegal : {0}", 
xmlRpcStruct.get(VdsProperties.display_port));
+            }
+        } else if (xmlRpcStruct.containsKey(VdsProperties.display)) {
+            try {
+                graphicsInfo
+                        .setPort(VNC_START_PORT + 
Integer.parseInt(xmlRpcStruct.get(VdsProperties.display).toString()));
+            } catch (NumberFormatException e) {
+                log.errorFormat("vm display value illegal : {0}", 
xmlRpcStruct.get(VdsProperties.display));
+            }
+        }
+        if (xmlRpcStruct.containsKey(VdsProperties.display_secure_port)) {
+            try {
+                graphicsInfo
+                        
.setTlsPort(Integer.parseInt(xmlRpcStruct.get(VdsProperties.display_secure_port).toString()));
+            } catch (NumberFormatException e) {
+                log.errorFormat("vm display_secure_port value illegal : {0}",
+                        xmlRpcStruct.get(VdsProperties.display_secure_port));
+            }
+        }
+        if (xmlRpcStruct.containsKey((VdsProperties.displayIp))) {
+            graphicsInfo.setIp((String) 
xmlRpcStruct.get(VdsProperties.displayIp));
+        }
+    }
+
+    private static Integer parseIntegerOrNull(String s) {
+        try {
+            return Integer.parseInt(s);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
     public static void updateVMStatisticsData(VmStatistics vm, Map<String, 
Object> xmlRpcStruct) {
         if (xmlRpcStruct.containsKey(VdsProperties.vm_guid)) {
             vm.setId(new Guid((String) 
xmlRpcStruct.get(VdsProperties.vm_guid)));
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 e469c36..4c40be5 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
@@ -358,6 +358,13 @@
     public static final String QOS_PEAK = "peak";
     public static final String QOS_BURST = "burst";
 
+    // Display info
+    public static final String displayInfo = "displayInfo";
+    public static final String type = "type";
+    public static final String port = "port";
+    public static final String tlsPort = "tlsPort";
+    public static final String ipAddress = "ipAddress";
+
     public static String migrationMethodtoString(MigrationMethod method) {
         switch (method) {
         case OFFLINE:


-- 
To view, visit http://gerrit.ovirt.org/28572
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibb38b68ba5a49238d4f9d9cce8475f6af9180077
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Frank Kobzik <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to