OpenStack Compute (Nova)
Go to file
Chris Dent 83030804cc [placement] Add cache headers to placement api requests
In relevant requests to the placement API add last-modified
and cache-control headers.

According the HTTP 1.1 RFC headers last-modified headers SHOULD always
be sent and should have a tie to the real last modified time. If we do
send them, we need Cache-Control headers to prevent inadvertent caching
of resources.

This change adds a microversion 1.15 which adds the headers to GET
requests and some PUT or POST requests.

Despite what it says 'no-cache' means "check to see if the version you
have is still valid as far as the server is concerned". Since our server
doesn't currently validate conditional requests and will always return an
entity, it ends up meaning "don't cache" (which is what we want).

The main steps in the patch are:

* To both the get single entity and get collection handlers add
  response.cache_control = 'no-cache'
* For single entity add response.last_modified = obj.updated_at or
  obj.created_at
* For collections, discover the max modified time when traversing the
  list of objects to create the serialized JSON output. In most of
  those loops an optimization is done where we only check for
  last-modified information if we have a high enough microversion such
  that the information will be used. This is not done when listing
  inventories because the expectation is that no single resource
  provider will ever have a huge number of inventory records.
* Both of the prior steps are assisted by a new util method:
  pick_last_modfied.

Where a time cannot be determined the current time is used.

In typical placement framework fashion this has been done in a very
explicit way, as it makes what the handler is doing very visible, even
though it results in a bit of boilerplate.

For those requests that are created from multiple objects or by doing
calculations, such as usages and aggregate associations, the current time
is used.

The handler for PUT /traits is modified a bit more extensively than some
of the others: This is because the method can either create or validate
the existence of the trait. In the case where the trait already exists,
we need to get it from the DB to get its created_at time. We only do
this if the microversion is high enough (at least 1.15) to warrant
needing the info.

Because these changes add new headers (even though they don't do
anything) a new microversion, 1.15, is added.

Partial-Bug: #1632852
Partially-Implements: bp placement-cache-headers

Change-Id: I727d4c77aaa31f0ef31c8af22c2d46cad8ab8b8e
2017-12-12 15:51:58 +00:00
api-guide/source Merge "Update description of Rebuild in server_concepts.rst" 2017-12-01 01:44:29 +00:00
api-ref/source Merge "Enable cold migration with target host(2/2)" 2017-11-30 07:38:03 +00:00
contrib trivial: Remove "vif" script 2017-08-07 16:00:10 +01:00
devstack Blacklist test_extend_attached_volume from cells v1 job 2017-10-05 17:31:05 -04:00
doc Add API and nova-manage tests that use the NoopQuotaDriver 2017-12-08 22:11:24 +00:00
etc/nova Move contrail vif plugging to privsep. 2017-11-02 12:09:27 +11:00
gate move gate hooks to gate/ 2017-01-04 11:05:16 +00:00
nova [placement] Add cache headers to placement api requests 2017-12-12 15:51:58 +00:00
placement-api-ref/source placement: adds REST API for nested providers 2017-12-06 10:48:09 -06:00
releasenotes [placement] Add cache headers to placement api requests 2017-12-12 15:51:58 +00:00
tools xenapi: cached images should be cleaned up by time 2017-10-23 16:29:16 +00:00
.coveragerc Remove nova/openstack/* from .coveragerc 2016-10-12 16:20:49 -04:00
.gitignore Fix test runner config issues with os-testr 1.0.0 2017-09-13 17:11:57 -04:00
.gitreview Add .gitreview config file for gerrit. 2011-10-24 15:07:19 -04:00
.mailmap Add mailmap entry 2014-05-07 12:14:26 -07:00
.stestr.conf Fix test runner config issues with os-testr 1.0.0 2017-09-13 17:11:57 -04:00
.testr.conf [placement] Adjust the name of the gabbi tests 2016-09-20 19:14:44 +00:00
CONTRIBUTING.rst Workflow documentation is now in infra-manual 2014-12-05 03:30:37 +00:00
HACKING.rst doc: fix link to creating unit tests in contributor guide 2017-11-14 11:22:43 -05:00
LICENSE initial commit 2010-05-27 23:05:26 -07:00
MAINTAINERS Fix broken URLs 2017-09-07 15:42:31 +02:00
README.rst doc: Rework README to reflect new doc URLs 2017-08-03 16:06:08 -04: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 21:01:09 +01:00
requirements.txt Updated from global requirements 2017-12-07 13:37:18 +00:00
setup.cfg Deprecate the IronicHostManager 2017-11-28 15:23:48 -05:00
setup.py Updated from global requirements 2017-03-02 11:50:48 +00:00
test-requirements.txt Updated from global requirements 2017-11-16 11:16:21 +00:00
tests-functional-py3.txt Remove invalid URL in gabbi tests 2017-01-17 21:10:45 +00:00
tests-py3.txt Skip unit tests for SSL + py3 2017-03-02 14:30:16 +08:00
tox.ini Make setenv consistent for unit, func, and api-samples 2017-10-05 21:45:46 +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, OpenStack Ironic and PowerVM.

Use the following resources to learn more.

API

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

For more information on OpenStack APIs, SDKs and CLIs in general, refer to:

Operators

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

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:

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:

Other Information

During each Summit and Project Team Gathering, we agree on what the whole community wants to focus on for the upcoming release. The plans for nova can be found at: