Browse Source

Add a StaticScheduler without automatic scheduling

The automatic scheduling that was introduced in [0] is having some
issues. Add a StaticScheduler that can be used as an alternative for
deployments that want explicit control over where their BGP speakers are
getting scheduled.

Add a job that runs with the new scheduler.

[0] https://review.opendev.org/c/openstack/neutron-dynamic-routing/+/478455

Depends-On: https://review.opendev.org/c/openstack/neutron-tempest-plugin/+/815294
Closes-Bug: 1920065
Signed-off-by: Dr. Jens Harbott <harbott@osism.tech>
Change-Id: Ib7fcd0c7371bc75089b10024ee1b6e75c98f0188
changes/65/815265/6
Dr. Jens Harbott 3 months ago
parent
commit
8a0ddf6051
No known key found for this signature in database GPG Key ID: E7862B245C3596B1
  1. 13
      .zuul.yaml
  2. 37
      doc/source/admin/agent-scheduler.rst
  3. 2
      doc/source/admin/system-design.rst
  4. 5
      doc/source/contributor/dragent-drivers.rst
  5. 3
      doc/source/contributor/testing.rst
  6. 6
      neutron_dynamic_routing/services/bgp/scheduler/bgp_dragent_scheduler.py
  7. 10
      releasenotes/notes/add-static-scheduler-a3b0f54b964ae306.yaml

13
.zuul.yaml

@ -1,3 +1,15 @@
- job:
name: neutron-dynamic-routing-static
parent: neutron-tempest-plugin-dynamic-routing
vars:
devstack_localrc:
BGP_SCHEDULER_DRIVER: neutron_dynamic_routing.services.bgp.scheduler.bgp_dragent_scheduler.StaticScheduler
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
neutron_plugin_options:
bgp_schedule_speakers_to_agents: true
- job:
name: neutron-dynamic-routing-functional
parent: neutron-functional
@ -22,6 +34,7 @@
check:
jobs:
- neutron-dynamic-routing-functional
- neutron-dynamic-routing-static
- neutron-tempest-plugin-dynamic-routing
gate:
jobs:

37
doc/source/admin/agent-scheduler.rst

@ -48,8 +48,24 @@ BGP Scheduler
BGP Speaker and DRAgent has 1:N association which means one BGP speaker can be
scheduled on multiple DRAgents.
There are different options for the scheduling algorithm to be used, these can
be selected via the ``bgp_drscheduler_driver`` configuration option.
StaticScheduler
~~~~~~~~~~~~~~~
This is the most simple option, which does no automatic scheduling at all.
Instead it relies on API requests to explicitly associate BGP speaker with
DRAgents and to disassociate them again.
Sample configuration::
bgp_drscheduler_driver = neutron_dynamic_routing.services.bgp.scheduler.bgp_dragent_scheduler.StaticScheduler
Here is an example to associate/disassociate a BGP Speaker to/from a DRAgent.
.. TODO(frickler): update the examples to use OSC
::
(neutron) bgp-speaker-list
@ -88,7 +104,22 @@ Here is an example to associate/disassociate a BGP Speaker to/from a DRAgent.
(neutron)
.. note:: Currently, auto-scheduling is not supported.
ReST API's for neutron-dynamic-routing scheduler are defined as part of the
`Neutron API reference`_.
.. _Neutron API reference: https://docs.openstack.org/api-ref/network/#bgp-dynamic-routing
ChanceScheduler
~~~~~~~~~~~~~~~
This is the default option. It will automatically schedule newly created BGP
speakers to one of the active DRAgents. When a DRAgent goes down, the BGP
speaker will be disassociated from it and an attempt is made to schedule
it to a different agent. Note that this action will override any manual
associations that have been performed via the API, so you will want to use
this scheduler only in very basic deployments.
Sample configuration::
bgp_drscheduler_driver = neutron_dynamic_routing.services.bgp.scheduler.bgp_dragent_scheduler.ChanceScheduler
ReST API's for neutron-dynamic-routing scheduler is defined in the
API document :doc:`/reference/index`

2
doc/source/admin/system-design.rst

@ -127,4 +127,4 @@ It manages and configures different dynamic routing stack through
.. note::
Currently, only integration with `os-ken <https://docs.openstack.org/os-ken/latest/>`_
is supported. Future releases will add the support for Quagga, Bird, etc.
is supported.

5
doc/source/contributor/dragent-drivers.rst

@ -53,9 +53,8 @@ functionality of a dynamic routing protocol::
+-------------------------------+
.. note::
In the first release, only the integration with os-ken is supported. Later release will
have support for Quagga, Bird etc. Besides, BGP is the only protocol supported now
but support for more dynamic routing protocols might come in the future.
Currently only the integration with os-ken is supported
BGP is the only protocol supported.
Configuration

3
doc/source/contributor/testing.rst

@ -565,7 +565,8 @@ Service Test
* Schedule the BGP speaker to ``BGP dynamic routing agent``
The first BGP speaker is scheduled to the first dynamic routing agent automatically.
With the default scheduler configuration, the first BGP speaker is
scheduled to the first dynamic routing agent automatically.
So for a simple setup, there is nothing to be done here.
* Verify scheduling of the BGP speaker to the agent.

6
neutron_dynamic_routing/services/bgp/scheduler/bgp_dragent_scheduler.py

@ -218,3 +218,9 @@ class WeightScheduler(base_scheduler.BaseWeightScheduler,
def __init__(self):
super(WeightScheduler, self).__init__(self)
self._register_callbacks()
class StaticScheduler(BgpDrAgentFilter):
def __init__(self):
super(StaticScheduler, self).__init__()

10
releasenotes/notes/add-static-scheduler-a3b0f54b964ae306.yaml

@ -0,0 +1,10 @@
---
features:
- |
A new BGP scheduler has been added, called ``StaticScheduler``. It will
not perform any automatic scheduling of speakers to agents, instead
relying on API calls to perform explicit scheduling, fulfilling the
needs of larger deployments.
See also bug `1920065 <https://bugs.launchpad.net/neutron/+bug/1920065>`_.
The plan is to make the ``StaticScheduler`` the default option for the next
release and possibly deprecate the current default, ``ChanceScheduler``.
Loading…
Cancel
Save