Fix leaked file descriptors by cleaning up objects

A reference to the ovsdbapp Connection object is stored on the the
API impl class and it is causing the object to stick around and
its pipe fds to never close. Ultimately, python-ovs's call to
select() is limited to 1024 file descriptors and will eventually
error out. This deletes the connection and api objects explicitly
when we are done with them.

Change-Id: I97b27eaa293fb161724d34da88b4398f8b590c33
Co-authored-by: Brian Haley <bhaley@redhat.com>
Closes-Bug: #1894136
This commit is contained in:
Terry Wilson 2020-10-15 12:53:36 -05:00
parent b68d2a78a4
commit 5b0715d967
2 changed files with 6 additions and 4 deletions

View File

@ -116,6 +116,7 @@ class OvnProviderHelper(object):
self.requests.put({'type': ovn_const.REQ_TYPE_EXIT})
self.helper_thread.join()
self.ovn_nbdb.stop()
del self.ovn_nbdb_api
@staticmethod
def _map_val(row, col, key):

View File

@ -175,10 +175,11 @@ class OvnNbIdlForLb(ovsdb_monitor.OvnIdl):
def stop(self):
# Close the running connection if it has been initalized
if ((hasattr(self, 'conn') and not
self.conn.stop(timeout=config.get_ovn_ovsdb_timeout()))):
LOG.debug("Connection terminated to OvnNb "
"but a thread is still alive")
if hasattr(self, 'conn'):
if not self.conn.stop(timeout=config.get_ovn_ovsdb_timeout()):
LOG.debug("Connection terminated to OvnNb "
"but a thread is still alive")
del self.conn
# complete the shutdown for the event handler
self.notify_handler.shutdown()
# Close the idl session