← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 2065460] Re: ovn-octavia-provider results in a new OVSDB connection for every Octavia API request


Reviewed:  https://review.opendev.org/c/openstack/ovn-octavia-provider/+/919229
Committed: https://opendev.org/openstack/ovn-octavia-provider/commit/9c2274e813fe167b79b1ceb7f8da188e251cc6ef
Submitter: "Zuul (22348)"
Branch:    master

commit 9c2274e813fe167b79b1ceb7f8da188e251cc6ef
Author: Terry Wilson <twilson@xxxxxxxxxx>
Date:   Fri May 10 15:00:05 2024 -0500

    Don't create an OVSDB connection per API request
    Using the default ovsdbapp.backend.ovs_idl.Backend behavior which
    stores the ovsdb_connection on the Backend class itself ensures
    that when Octavia does the imports necessary for instantiating the
    driver, that the ovsdb_connection will remain on the class even
    though the instances are deleted. This will allow us to reuse the
    OVSDB connection between APIs despite octavia-api knowing nothing
    about it.
    In addition, __del__() can called from any thread by the garbage
    collector, and so it was possible that thread.join() would be
    called by the thread we were in, throwing an Exception and
    preventing cleanup.
    Co-authored-by: Gregory Thiemonge <gthiemon@xxxxxxxxxx>
    Co-authored-by: Ihar Hrachyshka <ihrachys@xxxxxxxxxx>
    Co-authored-by: Jakub Libosvar <jlibosva@xxxxxxxxxx>
    Closes-Bug: #2065460
    Closes-Bug: #2065459
    Change-Id: I4f5df34ab32e8b33ff54f311b9b2ac00c9be1e05

** Changed in: neutron
       Status: In Progress => Fix Released

You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.

  ovn-octavia-provider  results in a new OVSDB connection for every
  Octavia API request

Status in neutron:
  Fix Released

Bug description:
  Octavia API instantiates a driver for each request e.g.:

  def post():
     driver = driver_factory.get_driver(provider)

  and then driver goes out of scope after the request. ovn-octavia-
  driver currently starts an OVSDB connection when it is instantiated.
  This is a very expensive operation, as it requests all of the rows
  from all of the monitored tables in the OVN DB and then stores them in
  memory, just to throw them all away after the request. For even
  medium-large deployments, this can mean the minimum time for any
  Octavia API request is > 10s.

To manage notifications about this bug go to: