yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #53496
[Bug 1599787] [NEW] The documentation of disk=0 in flavor is misleading
Public bug reported:
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 <jenkins@xxxxxxxxxxxxxxxxxxxx>
Date: Mon Jul 4 15:40:25 2016 +0000
Merge "Improve the help text for configdrive options"
** Affects: nova
Importance: Undecided
Status: New
--
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/1599787
Title:
The documentation of disk=0 in flavor is misleading
Status in OpenStack Compute (nova):
New
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 <jenkins@xxxxxxxxxxxxxxxxxxxx>
Date: Mon Jul 4 15:40:25 2016 +0000
Merge "Improve the help text for configdrive options"
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1599787/+subscriptions
Follow ups