← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1734784] [NEW] Cannot boot instances on filesystem without O_DIRECT support (fails on tmpfs)

 

Public bug reported:

I'm trying to (tempest) validate OpenStack Pike for Debian. So I'm
running Pike (nova 16.0.3) on Debian Sid. My environment for running
tempest is a Debian Live system which I just boot once, install all of
OpenStack on, and run tempest.

As a consequence, my filesystem is a bit weirdo. It's a single root
partition that is using overlayfs, which has its read/write volume on
tpmfs. This worked well when validating Newton, but it seems there's a
regression with Pike. Here's what happens when trying to boot an
instance:

 Traceback (most recent call last):
   File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 2192, in _build_resources
     yield resources
   File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 2007, in _build_and_run_instance
     block_device_info=block_device_info)
   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 2802, in spawn
     block_device_info=block_device_info)
   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 3240, in _create_image
     fallback_from_host)
   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 3331, in _create_and_inject_local_root
     instance, size, fallback_from_host)
   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 6988, in _try_fetch_image_cache
     size=size)
   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/imagebackend.py", line 241, in cache
     *args, **kwargs)
   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/imagebackend.py", line 595, in create_image
     prepare_template(target=base, *args, **kwargs)
   File "/usr/lib/python2.7/dist-packages/oslo_concurrency/lockutils.py", line 271, in inner
     return f(*args, **kwargs)
   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/imagebackend.py", line 237, in fetch_func_sync
     fetch_func(target=target, *args, **kwargs)
   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/utils.py", line 446, in fetch_image
     images.fetch_to_raw(context, image_id, target)
   File "/usr/lib/python2.7/dist-packages/nova/virt/images.py", line 171, in fetch_to_raw
     % {'exp': exp})
 ImageUnacceptable: Image f8dc206b-d5a1-4123-b26c-7216d03ab1e7 is unacceptable: Unable to convert image to raw: Image /var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.part is unacceptable: Unable to convert image to raw: Unexpected error while running command.
 Command: qemu-img convert -t none -O raw -f qcow2 /var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.part /var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.converted
 Exit code: 1
 Stdout: u''
 Stderr: u"qemu-img: file system may not support O_DIRECT\nqemu-img: Could not open '/var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.converted': Could not open '/var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.converted': Invalid argument\n"

In this log, the important bit is:

file system may not support O_DIRECT

Indeed, my weirdo filesystem setup doesn't supports this.

I tried to set [libvirt]/disk_cachemodes = file=writethrough, as per
recommendation on #openstack-nova, but it didn't fix the problem. It
looks like nova doesn't really care about this.

Because I also have a small scratch disk to do some cinder tests, and
wanted to make sure about this issue, I tried mounting
/var/lib/nova/instances on ext4, just to see if there was still the
issue. And indeed, it fixed the problem.

So, here, nova should check if /var/lib/nova/instances really has
O_DIRECT support and use the correct options for libvirt, but it's
looking like it isn't doing things properly. This IMO deserves a fix.

** Affects: nova
     Importance: Undecided
         Status: New


** Tags: libvirt

** Summary changed:

- Cannot boot instances on filesystem without O_DIRECT, like tpmfs
+ Cannot boot instances on filesystem without O_DIRECT support (fails on tmpfs)

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1734784

Title:
  Cannot boot instances on filesystem without O_DIRECT support (fails on
  tmpfs)

Status in OpenStack Compute (nova):
  New

Bug description:
  I'm trying to (tempest) validate OpenStack Pike for Debian. So I'm
  running Pike (nova 16.0.3) on Debian Sid. My environment for running
  tempest is a Debian Live system which I just boot once, install all of
  OpenStack on, and run tempest.

  As a consequence, my filesystem is a bit weirdo. It's a single root
  partition that is using overlayfs, which has its read/write volume on
  tpmfs. This worked well when validating Newton, but it seems there's a
  regression with Pike. Here's what happens when trying to boot an
  instance:

   Traceback (most recent call last):
     File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 2192, in _build_resources
       yield resources
     File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 2007, in _build_and_run_instance
       block_device_info=block_device_info)
     File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 2802, in spawn
       block_device_info=block_device_info)
     File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 3240, in _create_image
       fallback_from_host)
     File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 3331, in _create_and_inject_local_root
       instance, size, fallback_from_host)
     File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 6988, in _try_fetch_image_cache
       size=size)
     File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/imagebackend.py", line 241, in cache
       *args, **kwargs)
     File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/imagebackend.py", line 595, in create_image
       prepare_template(target=base, *args, **kwargs)
     File "/usr/lib/python2.7/dist-packages/oslo_concurrency/lockutils.py", line 271, in inner
       return f(*args, **kwargs)
     File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/imagebackend.py", line 237, in fetch_func_sync
       fetch_func(target=target, *args, **kwargs)
     File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/utils.py", line 446, in fetch_image
       images.fetch_to_raw(context, image_id, target)
     File "/usr/lib/python2.7/dist-packages/nova/virt/images.py", line 171, in fetch_to_raw
       % {'exp': exp})
   ImageUnacceptable: Image f8dc206b-d5a1-4123-b26c-7216d03ab1e7 is unacceptable: Unable to convert image to raw: Image /var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.part is unacceptable: Unable to convert image to raw: Unexpected error while running command.
   Command: qemu-img convert -t none -O raw -f qcow2 /var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.part /var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.converted
   Exit code: 1
   Stdout: u''
   Stderr: u"qemu-img: file system may not support O_DIRECT\nqemu-img: Could not open '/var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.converted': Could not open '/var/lib/nova/instances/_base/c44b0b620ae7c6fd8111e0abb5a8d1fc39fcdf08.converted': Invalid argument\n"

  In this log, the important bit is:

  file system may not support O_DIRECT

  Indeed, my weirdo filesystem setup doesn't supports this.

  I tried to set [libvirt]/disk_cachemodes = file=writethrough, as per
  recommendation on #openstack-nova, but it didn't fix the problem. It
  looks like nova doesn't really care about this.

  Because I also have a small scratch disk to do some cinder tests, and
  wanted to make sure about this issue, I tried mounting
  /var/lib/nova/instances on ext4, just to see if there was still the
  issue. And indeed, it fixed the problem.

  So, here, nova should check if /var/lib/nova/instances really has
  O_DIRECT support and use the correct options for libvirt, but it's
  looking like it isn't doing things properly. This IMO deserves a fix.

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1734784/+subscriptions


Follow ups