diff options
| author | Johannes Erdfelt <johannes.erdfelt@rackspace.com> | 2011-04-06 09:05:12 -0700 |
|---|---|---|
| committer | Johannes Erdfelt <johannes.erdfelt@rackspace.com> | 2011-04-06 09:05:12 -0700 |
| commit | dbeab47bbdeceab0bef896c9d7646ae346c9dd3a (patch) | |
| tree | 0c5348bd0f428f8e9524121f2ac3363987eeed8d | |
| parent | 134b1b4caa9df1cbba54b09625696e4f60147e05 (diff) | |
| download | nova-dbeab47bbdeceab0bef896c9d7646ae346c9dd3a.tar.gz nova-dbeab47bbdeceab0bef896c9d7646ae346c9dd3a.tar.xz nova-dbeab47bbdeceab0bef896c9d7646ae346c9dd3a.zip | |
Wait for device node to be created after mounting image VDI
| -rw-r--r-- | nova/virt/xenapi/vm_utils.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py index d07d60800..d29456ec6 100644 --- a/nova/virt/xenapi/vm_utils.py +++ b/nova/virt/xenapi/vm_utils.py @@ -49,6 +49,8 @@ LOG = logging.getLogger("nova.virt.xenapi.vm_utils") FLAGS = flags.FLAGS flags.DEFINE_string('default_os_type', 'linux', 'Default OS type') +flags.DEFINE_integer('timeout_block', 10, + 'time to wait for a block device to be created') XENAPI_POWER_STATE = { 'Halted': power_state.SHUTDOWN, @@ -896,6 +898,16 @@ def remap_vbd_dev(dev): return remapped_dev +def _wait_for_device(dev): + """Wait for device node to appear""" + for i in xrange(0, FLAGS.timeout_block): + if os.path.exists('/dev/%s' % dev): + return + time.sleep(1) + + raise StorageError(_('Timeout waiting for device %s to be created') % dev) + + def with_vdi_attached_here(session, vdi_ref, read_only, f): this_vm_ref = get_this_vm_ref(session) vbd_rec = {} @@ -924,6 +936,7 @@ def with_vdi_attached_here(session, vdi_ref, read_only, f): if dev != orig_dev: LOG.debug(_('VBD %(vbd_ref)s plugged into wrong dev, ' 'remapping to %(dev)s') % locals()) + _wait_for_device(dev) return f(dev) finally: LOG.debug(_('Destroying VBD for VDI %s ... '), vdi_ref) |
