OpenStack Compute (Nova)
Go to file
Lee Yarwood caca71376f libvirt: Report the allocated size of preallocated file based disks
At present the Libvirt driver can preallocate file based disks using the
fallocate command and importantly the `-n` option. This option allocates
blocks on the filesystem past the initial EOF of a given file:

```
$ touch test.img ; fallocate -n -l $(( 1024 * 1024 )) test.img
$ ll -lah test.img
-rw-rw-r--. 1 stack stack 0 Apr 16 13:28 test.img
$ du -h test.img
1.0M	test.img
```

This results in a miscalculation of the total disk overcommit for file
based (excluding ploop) disks as os.path.getsize is currently used to
determine the allocated size of these disks:

```
>>> import os
>>> os.path.getsize('test.img')
0
```

Using the above example the disk overcommit would be reported as 1.0M as
the disk appears empty yet will report a potential (virtual) size of 1.0M.

However as the required blocks have already been allocated on the
filesystem the host will report disk_available_least as missing an
additional 1.0M, essentially doubling the allocation for each disk.

To correct this the allocated size of file based (excluding ploop) disks
is reported using `disk_size` from the `qemu-img info` command. This
should ensure blocks allocated past the EOF of the file are taken into
account and correctly reported as allocated.

A future change should ultimately remove the use of the `-n` option with
fallocate, however as this would not help disks that have already been
allocated this has not been included in this change to simplify backports.

Conflicts:
        nova/tests/unit/virt/libvirt/test_driver.py

NOTE(lyarwood): I11e329ac5f5fe4b9819fefbcc32ff1ee504fc58b made
get_domain private in Queens.

Change-Id: If642e51a4e186833349a8e30b04224a3687f5594
Closes-bug: #1764489
(cherry picked from commit 23bd8f6263)
(cherry picked from commit 2d50f6e785)
(cherry picked from commit d88b75e81e)
2018-04-17 23:52:23 +01:00
api-guide/source Removes unnecessary utf-8 encoding 2016-12-20 10:27:01 +07:00
api-ref/source fix nova accepting invalid availability zone name with ':' 2017-10-04 18:11:23 -04:00
contrib Merge "changed quantum to neutron in vif-openstack" 2014-03-05 10:45:05 +00:00
devstack Skip test_rebuild_server_in_error_state for cells v1 2017-08-22 18:42:29 +00:00
doc Merge "Fix docs for IsolatedHostsFilter" into stable/ocata 2018-04-17 16:05:41 +00:00
etc/nova Fix doc generation warnings 2017-03-06 18:51:19 +09:00
gate move gate hooks to gate/ 2017-01-04 11:05:16 +00:00
nova libvirt: Report the allocated size of preallocated file based disks 2018-04-17 23:52:23 +01:00
plugins/xenserver XenAPI Remove useless files when use os-xenapi lib 2017-01-10 18:06:17 -08:00
releasenotes Add 'delete_host' command in 'nova-manage cell_v2' 2018-02-13 00:44:41 +00:00
tools Prepare for using standard python tests 2017-02-09 18:01:02 +00:00
.coveragerc Remove nova/openstack/* from .coveragerc 2016-10-12 16:20:49 -04:00
.gitignore doc: Integrate oslo_policy.sphinxpolicygen 2016-10-20 10:31:01 +01:00
.gitreview Update .gitreview for stable/ocata 2017-02-03 19:10:42 +00:00
.mailmap Add mailmap entry 2014-05-07 12:14:26 -07:00
.testr.conf [placement] Adjust the name of the gabbi tests 2016-09-20 19:14:44 +00:00
.zuul.yaml Bumping functional test job timeouts 2018-01-30 21:02:54 +00:00
CONTRIBUTING.rst Workflow documentation is now in infra-manual 2014-12-05 03:30:37 +00:00
HACKING.rst hacking: Use uuidutils or uuidsentinel to generate UUID 2016-11-29 11:49:24 +05:30
LICENSE initial commit 2010-05-27 23:05:26 -07:00
MAINTAINERS Add a maintainers file 2015-05-23 03:22:07 +10:00
README.rst Show team and repo badges on README 2016-11-25 13:55:29 +01:00
babel.cfg Get rid of distutils.extra. 2012-02-08 19:30:39 -08:00
bindep.txt Update bindep.txt for doc builds 2017-11-21 20:09:30 +00:00
requirements.txt Updated from global requirements 2017-08-09 01:01:23 +00:00
run_tests.sh Add description on how to run ./run_test.sh -8 2016-01-11 13:17:04 +00:00
setup.cfg Fix doc generation warnings 2017-03-06 18:51:19 +09:00
setup.py Updated from global requirements 2015-09-17 16:41:48 +00:00
test-requirements.txt Updated from global requirements 2017-01-26 18:48:41 +00:00
tests-functional-py3.txt Remove invalid URL in gabbi tests 2017-01-17 21:10:45 +00:00
tests-py3.txt Enable virt.vmwareapi test cases on Python 2017-01-18 11:14:24 +08:00
tox.ini Update UPPER_CONSTRAINTS_FILE for stable/ocata 2017-02-03 19:10:44 +00:00

README.rst

Team and repository tags

image

OpenStack Nova

OpenStack Nova provides a cloud computing fabric controller, supporting a wide variety of compute technologies, including: libvirt (KVM, Xen, LXC and more), Hyper-V, VMware, XenServer and OpenStack Ironic.

OpenStack Nova is distributed under the terms of the Apache License, Version 2.0. The full terms and conditions of this license are detailed in the LICENSE file.

API

To learn how to use Nova's API, consult the documentation available online at:

http://developer.openstack.org/api-guide/compute/ http://developer.openstack.org/api-ref/compute/

For more information on OpenStack APIs, SDKs and CLIs, please see:

http://www.openstack.org/appdev/ http://developer.openstack.org/

Operators

To learn how to deploy and configure OpenStack Nova, consult the documentation available online at:

http://docs.openstack.org

For information about the different compute (hypervisor) drivers supported by Nova, please read:

http://docs.openstack.org/developer/nova/feature_classification.html

In the unfortunate event that bugs are discovered, they should be reported to the appropriate bug tracker. If you obtained the software from a 3rd party operating system vendor, it is often wise to use their own bug tracker for reporting problems. In all other cases use the master OpenStack bug tracker, available at:

http://bugs.launchpad.net/nova

Developers

For information on how to contribute to Nova, please see the contents of the CONTRIBUTING.rst.

Any new code must follow the development guidelines detailed in the HACKING.rst file, and pass all unit tests.

Further developer focused documentation is available at:

http://docs.openstack.org/developer/nova/