Atomic ExtraRoute Resource
Start using Neutron's extraroute-atomic API to make OS::Neutron::ExtraRoute free of lost updates because of concurrency problems. Related Neutron spec: https://review.opendev.org/655680 Change-Id: Ie9f6f47f17befd6a4e79e02e9f10b192927b6bd2 Story: #2005522 Task: #30641
This commit is contained in:
parent
54015065d3
commit
629c250f61
|
@ -0,0 +1,109 @@
|
||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
==========================
|
||||||
|
Atomic ExtraRoute Resource
|
||||||
|
==========================
|
||||||
|
|
||||||
|
https://storyboard.openstack.org/#!/story/2005522
|
||||||
|
|
||||||
|
As we improve Neutron's extraroute API we could adapt Heat's
|
||||||
|
OS::Neutron::ExtraRoute resource to use the improved API and via that
|
||||||
|
turn the resource to a supported resource.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
As discussed in an `openstack-discuss thread
|
||||||
|
<http://lists.openstack.org/pipermail/openstack-discuss/2019-April/005121.html>`_
|
||||||
|
we could improve the Neutron's extraroute API to better support Neutron
|
||||||
|
API clients, especially Heat.
|
||||||
|
|
||||||
|
The problem is that the current extraroute API does not allow atomic
|
||||||
|
additions/deletions of particular routing table entries. In the current
|
||||||
|
API the routes attribute of a router (containing all routing table
|
||||||
|
entries) must be updated at once. Therefore additions and deletions
|
||||||
|
must be performed on the client side. Therefore multiple clients race
|
||||||
|
to update the routes attribute and updates may get lost.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Change OS::Neutron::ExtraRoute to use the new Neutron API (extension
|
||||||
|
extraroute-atomic) as it is specified in the `Atomic Extraroute API
|
||||||
|
Neutron RFE <https://bugs.launchpad.net/neutron/+bug/1826396>`_.
|
||||||
|
|
||||||
|
Keep the resource template format as it is today, that is:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
extraroute0:
|
||||||
|
type: OS::Neutron::ExtraRoute
|
||||||
|
properties:
|
||||||
|
destination: 10.1.0.0/24
|
||||||
|
nexthop: 10.0.0.10
|
||||||
|
router_id: { get_resource: router0 }
|
||||||
|
|
||||||
|
Unit test and document the change.
|
||||||
|
|
||||||
|
Change the resource's support_status to SUPPORTED.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
We could introduce a OS::Neutron::ExtraRoutes resource (please note the
|
||||||
|
plural). Internally the the resource implementation would still use the
|
||||||
|
improved Neutron extraroute-atomic API. But the template syntax could allow
|
||||||
|
multiple routes in one resource;
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
extraroute1:
|
||||||
|
type: OS::Neutron::ExtraRoutes
|
||||||
|
properties:
|
||||||
|
router_id: { get_resource: router0 }
|
||||||
|
routes:
|
||||||
|
- destination: 10.1.0.0/24
|
||||||
|
nexthop: 10.0.0.10
|
||||||
|
|
||||||
|
This format could allow more efficient use of the Neutron API. But it would
|
||||||
|
be backwards incompatible with the previous unsupported
|
||||||
|
OS::Neutron::ExtraRoute resource.
|
||||||
|
|
||||||
|
Even if going with the proposed template syntax we may want to introduce a
|
||||||
|
new resource name to express the difference in behavior, for example:
|
||||||
|
OS::Neutron::AtomicExtraRoute.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee: Bence Romsics <bence.romsics@ericsson.com>
|
||||||
|
|
||||||
|
Milestones
|
||||||
|
----------
|
||||||
|
|
||||||
|
Target Milestone for completion: Not known yet, please see Dependencies
|
||||||
|
(but I hope to complete the whole Neutron+Heat feature in the Train cycle,
|
||||||
|
so either milestone 2 or 3 for Heat).
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Change the resource implementation.
|
||||||
|
* Unit test the resource implementation.
|
||||||
|
* Document the change.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
The completion of the Neutron API change is a pre-requisite to the proposed
|
||||||
|
Heat change. The proposed Neutron change is also under review at the time of
|
||||||
|
first publishing this spec. This spec may or may not need an update after the
|
||||||
|
Neutron spec is merged. All cross-project spec review is warmly welcome so
|
||||||
|
we can create a Neutron API that's easy to consume from Heat.
|
Loading…
Reference in New Issue