Frank Kobzik has uploaded a new change for review. Change subject: core: engine <-> vdsm part for spicevnc ......................................................................
core: engine <-> vdsm part for spicevnc this patch (and its follow-up) makes graphics device "alive" - now graphics device is used for internal representation of state of graphics stuff. this is "engine -> vdsm" part Change-Id: Ie6eef54aea60e8fcd7f0d255c6cf72205ae45838 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/vdsbroker/CreateVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java 4 files changed, 56 insertions(+), 7 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/71/28571/1 diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java index 28638fa..1f61f07 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java @@ -61,6 +61,7 @@ private void buildVmData() { builder.buildVmProperties(); builder.buildVmVideoCards(); + builder.buildVmGraphicsDevices(); builder.buildVmCD(); builder.buildVmFloppy(); builder.buildVmDrives(); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java index 317fc8d..64f366b 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java @@ -68,14 +68,27 @@ @Override protected void buildVmVideoCards() { - createInfo.put(VdsProperties.display, vm.getDisplayType().toString()); // the requested display type might be different than the default display of // the VM in Run Once scenario, in that case we need to add proper video device. - if (vm.getDisplayType() != vm.getDefaultDisplayType()) { - addVideoCardByDisplayType(vm.getDisplayType(), vm.getNumOfMonitors(), vm.getSingleQxlPci()); - } - else { +// if (vm.getDisplayType() != vm.getDefaultDisplayType()) { // todo i break runonce here +// addVideoCardByDisplayType(vm.getDisplayType(), vm.getNumOfMonitors(), vm.getSingleQxlPci()); +// } else { addVideoCardsDefinedForVmInDB(vm.getId()); +// } + } + + @Override + protected void buildVmGraphicsDevices() { + // todo 3.6, or handle this in a different way + // the problem here is that if we send both graphics as a device and in conf, old vdsm gets confused and tries + // to create the "unknown" device + if (Version.v3_5.compareTo(vm.getVdsGroupCompatibilityVersion()) <= 0) { + buildVmDevicesFromDb(VmDeviceGeneralType.GRAPHICS, false); + } + + String legacyDisplay = deriveDisplayTypeLegacy(); + if (legacyDisplay != null) { + createInfo.put(VdsProperties.display, legacyDisplay); } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java index da9fe38..165b134 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java @@ -23,6 +23,7 @@ import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VdsNumaNode; 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.VmNumaNode; import org.ovirt.engine.core.common.businessentities.comparators.DiskImageByDiskAliasComparator; @@ -34,6 +35,7 @@ import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.osinfo.OsRepository; import org.ovirt.engine.core.common.utils.SimpleDependecyInjector; +import org.ovirt.engine.core.common.utils.VmDeviceType; import org.ovirt.engine.core.common.utils.customprop.VmPropertiesUtils; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.WindowsJavaTimezoneMapping; @@ -142,7 +144,7 @@ createInfo.put(VdsProperties.PitReinjection, "false"); } - if (vm.getDisplayType() == DisplayType.vnc) { + if (vm.getDisplayType() == DisplayType.vnc) { // todo createInfo.put(VdsProperties.TabletEnable, "true"); } createInfo.put(VdsProperties.transparent_huge_pages, @@ -373,6 +375,8 @@ protected abstract void buildVmVideoCards(); + protected abstract void buildVmGraphicsDevices(); + protected abstract void buildVmCD(); protected abstract void buildVmFloppy(); @@ -423,4 +427,28 @@ } return vdsGroup; } + + /** + * Derives display type from vm configuration, used with legacy vdsm. + * @return either "vnc" or "qxl" string or null if the vm is headless + */ + protected String deriveDisplayTypeLegacy() { + List<VmDevice> vmDevices = + DbFacade.getInstance() + .getVmDeviceDao() + .getVmDeviceByVmIdAndType(vm.getId(), + VmDeviceGeneralType.GRAPHICS); + + if (vmDevices.isEmpty()) { + return null; + } else if (vmDevices.size() == 2) { // we have spice & vnc together, we prioritize SPICE + return "qxl"; + } + + if (VmDeviceType.VNC.toString().equalsIgnoreCase(vmDevices.get(0).getDevice())) { + return "vnc"; + } else { + return "qxl"; + } + } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java index 6496258..7198251 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java @@ -32,11 +32,18 @@ @Override protected void buildVmVideoCards() { - createInfo.put(VdsProperties.display, vm.getDisplayType().toString()); // vnc,qxl createInfo.put(VdsProperties.num_of_monitors, String.valueOf(vm.getNumOfMonitors())); } @Override + protected void buildVmGraphicsDevices() { + String legacyDisplay = deriveDisplayTypeLegacy(); + if (legacyDisplay != null) { + createInfo.put(VdsProperties.display, legacyDisplay); // vnc,qxl + } + } + + @Override protected void buildVmCD() { if (!StringUtils.isEmpty(vm.getCdPath())) { createInfo.put(VdsProperties.CDRom, vm.getCdPath()); -- To view, visit http://gerrit.ovirt.org/28571 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie6eef54aea60e8fcd7f0d255c6cf72205ae45838 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
