summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Erdfelt <johannes.erdfelt@rackspace.com>2011-04-06 09:05:12 -0700
committerJohannes Erdfelt <johannes.erdfelt@rackspace.com>2011-04-06 09:05:12 -0700
commitdbeab47bbdeceab0bef896c9d7646ae346c9dd3a (patch)
tree0c5348bd0f428f8e9524121f2ac3363987eeed8d
parent134b1b4caa9df1cbba54b09625696e4f60147e05 (diff)
downloadnova-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.py13
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)