The documentation of disk=0 in flavor is misleading

Bug #1599787 reported by Balazs Gibizer
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
Fix Released
Low
Balazs Gibizer

Bug Description

Description
===========

Current nova api documentation states the following about disk=0 in flavor:

The size of the root disk that will be created in GiB. If 0 the
root disk will be set to exactly the size of the image used to
deploy the instance. [1]

However scheduler does not check the actual image size during select destintation and also resource tracker does not calculate the used space properly.

[1] https://github.com/openstack/nova/blob/master/api-ref/source/parameters.yaml#L1548-L1555

Steps to reproduce
==================
1. Create a sizeable image. e.g. 8GB
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | bde0b00c072a8b5ab28ac58a3b8ea6ed |
| container_format | bare |
| created_at | 2016-07-07T09:25:33Z |
| disk_format | qcow2 |
| id | ea14a784-252a-4193-9129-a311f64c01f4 |
| min_disk | 0 |
| min_ram | 0 |
| name | my_image |
| owner | 0878b2a9a9fa4c538931df5d67708b51 |
| protected | False |
| size | 8591507456 |
| status | active |
| tags | [] |
| updated_at | 2016-07-07T09:29:35Z |
| virtual_size | None |
| visibility | private |
+------------------+--------------------------------------+

2. Check the current host-describe output to see the available and used space
vagrant@controller:~$ nova host-describe controller
+------------+----------------------------------+-----+-----------+---------+
| HOST | PROJECT | cpu | memory_mb | disk_gb |
+------------+----------------------------------+-----+-----------+---------+
| controller | (total) | 8 | 7794 | 39 |
| controller | (used_now) | 0 | 512 | 0 |
| controller | (used_max) | 0 | 64 | 0 |
+------------+----------------------------------+-----+-----------+---------+

3. boot a vm with a flavor disk=0
vagrant@controller:/opt/stack/nova/nova/scheduler/filters$ nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True |
| 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True |
| 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True |
| 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True |
| 42 | m1.nano | 64 | 0 | 0 | | 1 | 1.0 | True |
| 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True |
| 84 | m1.micro | 128 | 0 | 0 | | 1 | 1.0 | True |
| c1 | cirros256 | 256 | 0 | 0 | | 1 | 1.0 | True |
| d1 | ds512M | 512 | 5 | 0 | | 1 | 1.0 | True |
| d2 | ds1G | 1024 | 10 | 0 | | 1 | 1.0 | True |
| d3 | ds2G | 2048 | 10 | 0 | | 2 | 1.0 | True |
| d4 | ds4G | 4096 | 20 | 0 | | 4 | 1.0 | True |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
vagrant@controller:~$ nova boot --image ea14a784-252a-4193-9129-a311f64c01f4 --flavor 42 vm2 --poll
+--------------------------------------+-------------------------------------------------+
| Property | Value |
+--------------------------------------+-------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | |
| OS-EXT-SRV-ATTR:host | - |
| OS-EXT-SRV-ATTR:hostname | vm2 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | - |
| OS-EXT-SRV-ATTR:instance_name | instance-00000002 |
| OS-EXT-SRV-ATTR:kernel_id | |
| OS-EXT-SRV-ATTR:launch_index | 0 |
| OS-EXT-SRV-ATTR:ramdisk_id | |
| OS-EXT-SRV-ATTR:reservation_id | r-5c032r0o |
| OS-EXT-SRV-ATTR:root_device_name | - |
| OS-EXT-SRV-ATTR:user_data | - |
| OS-EXT-STS:power_state | 0 |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| OS-SRV-USG:launched_at | - |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| adminPass | MmVFaJr7B5Rp |
| config_drive | |
| created | 2016-07-07T09:32:14Z |
| description | - |
| flavor | m1.nano (42) |
| hostId | |
| host_status | |
| id | 16c2e302-62f9-4ce3-b603-e8c98115fd13 |
| image | my_image (ea14a784-252a-4193-9129-a311f64c01f4) |
| key_name | - |
| locked | False |
| metadata | {} |
| name | vm2 |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | default |
| status | BUILD |
| tags | [] |
| tenant_id | 0878b2a9a9fa4c538931df5d67708b51 |
| updated | 2016-07-07T09:32:14Z |
| user_id | d2046b30b0e6459ebe02b67aba2b11d4 |
+--------------------------------------+-------------------------------------------------+

Server building... 0% complete
Server building... 0% complete
Server building... 100% complete
Finished
vagrant@controller:~$

4. Check the host-describe output again.
vagrant@controller:~$ nova host-describe controller
+------------+----------------------------------+-----+-----------+---------+
| HOST | PROJECT | cpu | memory_mb | disk_gb |
+------------+----------------------------------+-----+-----------+---------+
| controller | (total) | 8 | 7794 | 39 |
| controller | (used_now) | 1 | 576 | 0 |
| controller | (used_max) | 1 | 64 | 0 |
| controller | 0878b2a9a9fa4c538931df5d67708b51 | 1 | 64 | 0 |
+------------+----------------------------------+-----+-----------+---------+

To see the data used by the scheduler decision you shall add an extra log line to the disk_filter.py

vagrant@controller:/opt/stack/nova$ git diff
diff --git a/nova/scheduler/filters/disk_filter.py b/nova/scheduler/filters/disk_filter.py
index 3476ace..d16dcbf 100644
--- a/nova/scheduler/filters/disk_filter.py
+++ b/nova/scheduler/filters/disk_filter.py
@@ -37,6 +37,8 @@ class DiskFilter(filters.BaseHostFilter):
                                   spec_obj.ephemeral_gb) +
                           spec_obj.swap)

+ LOG.error('requested_disk' + str(requested_disk))
+
         free_disk_mb = host_state.free_disk_mb
         total_usable_disk_mb = host_state.total_usable_disk_gb * 1024

Then in the scheduler log you will see that during the boot the requested_disk is 0 and not 8G as expected based on the documentation.

2016-07-07 09:19:18.480 ERROR nova.scheduler.filters.disk_filter [req-c7410319-c65f-4274-88b8-a0c68e0bc7ff admin admin] requested_disk0

Expected result
===============
The documentation correctly states that disk=0 means that the scheduler will not select the host based on image size.

Environment
===========
Devstack on master.

vagrant@controller:/opt/stack/nova$ git log -1
commit 2d551ce83d186ad70ca69b1a6f9454906b4b3448
Merge: 94c96f2 7451862
Author: Jenkins <email address hidden>
Date: Mon Jul 4 15:40:25 2016 +0000

    Merge "Improve the help text for configdrive options"

Tags: doc
Revision history for this message
John Garbutt (johngarbutt) wrote :

Hmm, so disk=0 should only be used for testing really.

Maybe thats what the documentation should be updated to say?

The fact the resource tracker doesn't report correctly is a separate bug that should be fixed. I don't think it totally makes sense to fix up the scheduler in this case.

Changed in nova:
status: New → Confirmed
tags: added: doc
Changed in nova:
importance: Undecided → Low
Revision history for this message
Balazs Gibizer (balazs-gibizer) wrote :

It seems that disk=0 is needed for volume booted VM.

Changed in nova:
assignee: nobody → Balazs Gibizer (balazs-gibizer)
Changed in nova:
status: Confirmed → In Progress
Revision history for this message
Balazs Gibizer (balazs-gibizer) wrote :
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to nova (master)

Reviewed: https://review.openstack.org/339034
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=9d08e805a8889d84ff1076da2373c37057670f23
Submitter: Jenkins
Branch: master

commit 9d08e805a8889d84ff1076da2373c37057670f23
Author: Balazs Gibizer <email address hidden>
Date: Thu Jul 7 16:28:10 2016 +0200

    doc: fix disk=0 use case in flavor doc

    The 0 value of the disk parameter of the flavor is only meaningfull
    if the instance is booted from volume as in any other case the
    instance will use local disk and the scheduler will not be
    able to select the hosts based on the real image size as that
    information is not available for the scheduler.

    Change-Id: I6b3ba2fb323341071eae6b9e9f54ef833fdbaff7
    Closes-Bug: #1599787
    DocImpact: admin guide

Changed in nova:
status: In Progress → Fix Released
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/nova 15.0.0.0b1

This issue was fixed in the openstack/nova 15.0.0.0b1 development milestone.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.