Arik Hadas has uploaded a new change for review.

Change subject: core: add managed virtio-serial devices on upgrade
......................................................................

core: add managed virtio-serial devices on upgrade

The upgrade scripts do the following things:
- Change every existing virtio-serial device to be managed
- Then is adds managed virtio-serial device to VMs that don't have it

In addition, we might get reports of unmanaged virtio-serial devices
from VMs that were running at the time of the upgrade, so in that case
we'll not add new device, but use the managed device instead.

Change-Id: I5b99dd3fa0d43307788a685c0115b32691757454
Bug-Url: https://bugzilla.redhat.com/1028387
Signed-off-by: Arik Hadas <[email protected]>
---
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
A 
packaging/dbscripts/upgrade/03_06_1010_change_virtio_serial_to_managed_device.sql
2 files changed, 36 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/31894/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 24732f7..60e4eb9 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
@@ -1236,7 +1236,7 @@
                 continue;
             }
 
-            Guid deviceId = getDeviceId(device);
+            Guid deviceId = getDeviceId(device, deviceMap);
             VmDevice vmDevice = deviceMap.get(new VmDeviceId(deviceId, vmId));
             if (deviceId == null || vmDevice == null) {
                 deviceId = addNewVmDevice(vmId, device);
@@ -1326,9 +1326,21 @@
      * @param device
      * @return
      */
-    private static Guid getDeviceId(Map device) {
+    private static Guid getDeviceId(Map device, Map<VmDeviceId, VmDevice> 
deviceMap) {
         String deviceId = (String) device.get(VdsProperties.DeviceId);
-        return deviceId == null ? null : new Guid(deviceId);
+        if (deviceId != null) {
+            return new Guid(deviceId);
+        }
+
+        if 
(VdsProperties.VirtioSerial.equals(device.get(VdsProperties.Device))) {
+            for (VmDevice dev : deviceMap.values()) {
+                if 
(VmDeviceType.VIRTIOSERIAL.getName().equals(dev.getDevice())) {
+                    return dev.getDeviceId();
+                }
+            }
+        }
+
+        return null;
     }
 
     // if not statistics check if status changed return a list of those
diff --git 
a/packaging/dbscripts/upgrade/03_06_1010_change_virtio_serial_to_managed_device.sql
 
b/packaging/dbscripts/upgrade/03_06_1010_change_virtio_serial_to_managed_device.sql
new file mode 100644
index 0000000..75ca2ec
--- /dev/null
+++ 
b/packaging/dbscripts/upgrade/03_06_1010_change_virtio_serial_to_managed_device.sql
@@ -0,0 +1,21 @@
+-- change existing unmanaged virtio-serial devices to be managed
+update vm_device set is_managed=true where device='virtio-serial';
+
+-- add managed virtio-serial device to each vm that does not have it
+Create or replace FUNCTION __temp_add_missing_virio_serial_devices()
+RETURNS VOID
+   AS $procedure$
+   DECLARE
+   v_vm_guid UUID;
+BEGIN
+   FOR v_vm_guid in (select vm_guid from vm_static where 
entity_type!='INSTANCE_TYPE' and vm_guid not in (select vm_id from vm_device 
where device='virtio-serial')) LOOP
+      INSERT INTO vm_device (device_id, vm_id, type, device, address, 
spec_params, is_managed, is_plugged, custom_properties, snapshot_id)
+       VALUES ((SELECT uuid_generate_v1()), v_vm_guid, 'controller', 
'virtio-serial', '', '', true, true, '', NULL);
+   END LOOP;
+
+RETURN;
+END; $procedure$
+LANGUAGE plpgsql;
+
+SELECT __temp_add_missing_virio_serial_devices();
+DROP function __temp_add_missing_virio_serial_devices();


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

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

Reply via email to