80e28a00ec
- unmodified_drivers: handle IRQF_SAMPLE_RANDOM, it was removed in 3.6-rc1 - bnc#778105 - first XEN-PV VM fails to spawn xend: Increase wait time for disk to appear in host bootloader Modified existing xen-domUloader.diff - Disable the snapshot patches. Snapshot only supported the qcow2 image format which was poorly implemented qemu 0.10.2. Snapshot support may be restored in the future when the newer upstream qemu is used by Xen. - bnc#776995 - attaching scsi control luns with pvscsi - xend/pvscsi: fix passing of SCSI control LUNs xen-bug776995-pvscsi-no-devname.patch - xend/pvscsi: fix usage of persistant device names for SCSI devices xen-bug776995-pvscsi-persistent-names.patch - xend/pvscsi: update sysfs parser for Linux 3.0 xen-bug776995-pvscsi-sysfs-parser.patch - Update to Xen 4.2.0 RC3+ c/s 25779 - Update to Xen 4.2.0 RC2+ c/s 25765 OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=199
57 lines
2.3 KiB
Diff
57 lines
2.3 KiB
Diff
Improve check_device_status to handle HA cases
|
|
|
|
In HA environment, sometimes xenstore status has changed but ev.wait() cannot
|
|
get the signal, it will wait until timeout, thus incorrect device status is
|
|
returned. To fix this problem, we do not depend on ev.wait() result, but read
|
|
xenstore directly to get correct device status.
|
|
|
|
Index: xen-4.2.0-testing/tools/python/xen/xend/server/DevController.py
|
|
===================================================================
|
|
--- xen-4.2.0-testing.orig/tools/python/xen/xend/server/DevController.py
|
|
+++ xen-4.2.0-testing/tools/python/xen/xend/server/DevController.py
|
|
@@ -149,7 +149,10 @@ class DevController:
|
|
(status, err) = self.waitForBackend(devid)
|
|
|
|
if status == Timeout:
|
|
- self.destroyDevice(devid, False)
|
|
+ #Clean timeout backend resource
|
|
+ dev = self.convertToDeviceNumber(devid)
|
|
+ self.writeBackend(dev, HOTPLUG_STATUS_NODE, HOTPLUG_STATUS_ERROR)
|
|
+ self.destroyDevice(devid, True)
|
|
raise VmError("Device %s (%s) could not be connected. "
|
|
"Hotplug scripts not working." %
|
|
(devid, self.deviceClass))
|
|
@@ -554,7 +557,17 @@ class DevController:
|
|
|
|
xswatch(statusPath, hotplugStatusCallback, ev, result)
|
|
|
|
- ev.wait(DEVICE_CREATE_TIMEOUT)
|
|
+ for i in range(1, 50):
|
|
+ ev.wait(DEVICE_CREATE_TIMEOUT/50)
|
|
+ status = xstransact.Read(statusPath)
|
|
+ if status is not None:
|
|
+ if status == HOTPLUG_STATUS_ERROR:
|
|
+ result['status'] = Error
|
|
+ elif status == HOTPLUG_STATUS_BUSY:
|
|
+ result['status'] = Busy
|
|
+ else:
|
|
+ result['status'] = Connected
|
|
+ break
|
|
|
|
err = xstransact.Read(backpath, HOTPLUG_ERROR_NODE)
|
|
|
|
@@ -571,7 +584,12 @@ class DevController:
|
|
|
|
xswatch(statusPath, deviceDestroyCallback, ev, result)
|
|
|
|
- ev.wait(DEVICE_DESTROY_TIMEOUT)
|
|
+ for i in range(1, 50):
|
|
+ ev.wait(DEVICE_DESTROY_TIMEOUT/50)
|
|
+ status = xstransact.Read(statusPath)
|
|
+ if status is None:
|
|
+ result['status'] = Disconnected
|
|
+ break
|
|
|
|
return result['status']
|
|
|