Create a project tag for zero-downtime upgrades

In transitioning projects towards a rolling upgrades strategy, it's
become clear that there are additional levels of granularity, reflecting
the additional difficulty of implementing and maintaining acceptable
solutions.

The existing asserts:supports-rolling-upgrade tag allows for minimal
downtime of the control plane during the upgrade process. This tag
raises the bar further by eliminating that allowance.

As a concession, this tag still allows for performance degradation
during the upgrade process, which we could again eliminate in a more
restrictive tag as projects begin to assert this one.

With this patch, the upgrade-related tags would then include:

1. asserts:supports-upgrade
2. asserts:supports-rolling-upgrade
3. asserts:supports-zero-downtime-upgrade

Change-Id: I8b191f7d56702aa21273c61417af4bdf1de2abb0
This commit is contained in:
Dolph Mathews 2016-09-19 18:19:16 +00:00
parent f514a93082
commit e80e5c7275
3 changed files with 82 additions and 1 deletions

@ -46,7 +46,9 @@ Requirements
there are no such caveats. This does not require complete
elimination of downtime during upgrades, but rather reducing the
scope from "all services" to "some services at a time." In other
words, "restarting all API services together" is a reasonable restriction.
words, "restarting all API services together" is a reasonable restriction. A
more restrictive tag, :ref:`tag-assert:supports-zero-downtime-upgrade`
removes this allowance.
* Full stack integration testing with services arranged in a
mid-upgrade manner is performed on every proposed commit to validate
that mixed-version services work together properly. This testing

@ -0,0 +1,78 @@
::
This work is licensed under a Creative Commons Attribution 3.0
Unported License.
http://creativecommons.org/licenses/by/3.0/legalcode
.. _`tag-assert:supports-zero-downtime-upgrade`:
=====================================
assert:supports-zero-downtime-upgrade
=====================================
This tag is part of the assert category of tags, which are assertions made by
the project team themselves about their maturity.
The ``assert:supports-zero-downtime-upgrade`` tag asserts that in addition to a
project supporting `minimal rolling upgrade capabilities
<https://governance.openstack.org/reference/tags/assert_supports-rolling-upgrade.html>`_,
it does so *without incurring any disruption to API availability*.
Application to current projects
===============================
.. tagged-projects:: assert:supports-zero-downtime-upgrade
Rationale
=========
OpenStack projects represent code that is installed and deployed on many
distributed systems in order to provide services to users. Operators need to
know what projects support an upgrade process that eliminates downtime of the
control plane entirely.
Requirements
============
* The project is already tagged as ``type:service``.
* The project has already successfully asserted both the
:ref:`tag-assert:supports-upgrade` and
:ref:`tag-assert:supports-rolling-upgrade` tags. All the requirements for
those tags are requirements for this tag, and assertion of both those tags
are requirements to assert this tag.
* In addition to the plan required by the
:ref:`tag-assert:supports-rolling-upgrade` tag which allows for minimal
downtime, this tag requires services to completely eliminate API downtime of
the control plane during the upgrade. In other words, requiring operators to
"restart all API services together" is not reasonable under this tag.
Additionally, it is not reasonable for services to respond to requests with
HTTP 5xx codes when they otherwise would have returned successful responses,
even intermittently.
* While all requests to the control plane must be eventually processed,
performance degradation during the upgrade is acceptable. This may include
slow HTTP responses and delayed request handling (such as messages queuing up
on the message bus).
* In addition to the full stack integration testing required by the
:ref:`tag-assert:supports-rolling-upgrade` tag, services should be capable of
receiving and handling requests throughout the rolling upgrade process with a
normal success rate. In order to assert this tag, services should prevent
regression by implementing a zero-downtime gate job wherein both a new
version of the service and an old version of the service are run
concurrently.
Tag application process
=======================
Assertion tags are set by the project team PTL or suitable designee based on
meeting the above criteria. The Technical Committee may exceptionally remove
the tag if they find that the project doesn't actually follow the requirements
for the assertion.
The project asserting this tag should do so when the above requirements are met
for the reference implementation(s) or configuration(s) officially adopted by
that project.

@ -30,6 +30,7 @@ Project Assertions Tags
assert_follows-standard-deprecation
assert_supports-upgrade
assert_supports-rolling-upgrade
assert_supports-zero-downtime-upgrade
Release Management Tags
=======================