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
