Remove openvswitch runtime version checks
Specification for removing the runtime openvswitch version checks and replacing them with an external script that specifically tests the functionality required of openvswitch. Change-Id: Id497149fd0ea32be31e32cb5308e4a9640e9e763
This commit is contained in:
parent
a37fbe7431
commit
539816a69c
139
specs/juno/remove-openvswitch-version-check.rst
Normal file
139
specs/juno/remove-openvswitch-version-check.rst
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
Remove openvswitch run-time version checks
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Launchpad blueprint:
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/neutron/+spec/remove-openvswitch-version-check
|
||||||
|
|
||||||
|
The current method of checking openvswitch and kernel versions for specific
|
||||||
|
feature support is brittle, distro-specific and unsupportable.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
When VXLAN tunnels are enabled, openvswitch-using agents call ovs_lib code to
|
||||||
|
check that the installed kernel and openvswitch versions are greater than a
|
||||||
|
minimum specified version. Due to distro-specific differences in 1) the fields
|
||||||
|
returned by modinfo and 2) the minimum required version due to the practice of
|
||||||
|
backporting, this run-time checking method fails.
|
||||||
|
|
||||||
|
In addition to VXLAN, other specific openvswitch features will need to be
|
||||||
|
tested for in the future. As the number of features and versions and distros
|
||||||
|
grows, checking version numbers becomes increasingly unsustainable and should
|
||||||
|
not be done at agent start, but instead at package installation or deployment.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
Trying to test features by version numbers across multiple distros is a fool's
|
||||||
|
errand. It is much better to leave dependency management to the distros and
|
||||||
|
packaging as they are the only ones who really know what version dependencies
|
||||||
|
exist in their environment. The run-time checks should be completely removed
|
||||||
|
from ovs_lib and the agents.
|
||||||
|
|
||||||
|
If an attempt is made to use a specific openvswitch feature fails, a helpful
|
||||||
|
error message suggesting that updating openvswitch *may* resolve the issue
|
||||||
|
should be logged.
|
||||||
|
|
||||||
|
To help deployment tools, a script will be created that attempts to use
|
||||||
|
specific openvswitch features and exits 0 for success and 1 for failure. This
|
||||||
|
way a deployment can be aborted, e.g. in devstack, if the feature is enabled
|
||||||
|
but not available in the current openvswitch/kernel versions without trying
|
||||||
|
to keep track of version numbers or incurring a messy run-time feature check
|
||||||
|
at agent start.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
Openvswitch does not have the ability to query whether it supports certain
|
||||||
|
features, so the only way to reliably test whether a feature exists at runtime
|
||||||
|
is to try to use the feature and see if it works. It would be possible, but
|
||||||
|
unacceptably messy, to attempt to use all required OVS features at agent start
|
||||||
|
and exit the agent on failure. Dependency management should be handled at
|
||||||
|
packaging and/or deployment and not checked every time an agent is started by
|
||||||
|
modifying system state.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
N/A
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
Negligible improvement in openvswitch-using agents due to removal of checks.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
Existing deployments will be unaffected as they will already have the
|
||||||
|
appropriate dependencies for their deployment.
|
||||||
|
|
||||||
|
Deployments using distro packaging will be unaffected as the dependencies will
|
||||||
|
already be handled by the packaging.
|
||||||
|
|
||||||
|
Source installs, e.g. devstack, should run the feature test script to verify
|
||||||
|
that an appropriate version of openvswitch has been installed on the system.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
Agents using openvswitch will no longer need to check openvswitch versions
|
||||||
|
when using version-specific openvswitch features. Testing is simplified since
|
||||||
|
the version-check feature is being removed and no longer requires testing.
|
||||||
|
|
||||||
|
Devstack can also be modified to run the external feature test script before
|
||||||
|
deployment and fail early in the case of a configuration/dependency mismatch.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
Primary assignee:
|
||||||
|
otherwiseguy
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
* Remove runtime version checks and associated tests
|
||||||
|
* Create the feature test script
|
||||||
|
|
||||||
|
This will essentially be a refactoring of:
|
||||||
|
|
||||||
|
https://review.openstack.org/#/c/88121/
|
||||||
|
|
||||||
|
into two pieces, the runtime check -> separate script and the existing code
|
||||||
|
removal in that patch.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
As this implementation primarily removes code that should not exist, it also
|
||||||
|
removes the need for testing the version checking code.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
N/A
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
N/A
|
Loading…
Reference in New Issue
Block a user