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

Reply via email to