Merge "Use TCP keepalives for ovsdb connections"
This commit is contained in:
commit
53b7762b49
@ -11,12 +11,16 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
|
import functools
|
||||||
|
import socket
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from neutron_lib import exceptions as n_exc
|
from neutron_lib import exceptions as n_exc
|
||||||
from neutron_lib.utils import helpers
|
from neutron_lib.utils import helpers
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
from ovs import socket_util
|
||||||
|
from ovs import stream
|
||||||
from ovsdbapp.backend import ovs_idl
|
from ovsdbapp.backend import ovs_idl
|
||||||
from ovsdbapp.backend.ovs_idl import connection
|
from ovsdbapp.backend.ovs_idl import connection
|
||||||
from ovsdbapp.backend.ovs_idl import idlutils
|
from ovsdbapp.backend.ovs_idl import idlutils
|
||||||
@ -69,6 +73,45 @@ class OvnNbTransaction(idl_trans.Transaction):
|
|||||||
self.api.nb_global.increment('nb_cfg')
|
self.api.nb_global.increment('nb_cfg')
|
||||||
|
|
||||||
|
|
||||||
|
def add_keepalives(fn):
|
||||||
|
@functools.wraps(fn)
|
||||||
|
def _open(*args, **kwargs):
|
||||||
|
error, sock = fn(*args, **kwargs)
|
||||||
|
try:
|
||||||
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
|
||||||
|
except socket.error as e:
|
||||||
|
sock.close()
|
||||||
|
return socket_util.get_exception_errno(e), None
|
||||||
|
return error, sock
|
||||||
|
return _open
|
||||||
|
|
||||||
|
|
||||||
|
class NoProbesMixin:
|
||||||
|
@staticmethod
|
||||||
|
def needs_probes():
|
||||||
|
# If we are using keepalives, we can force probe_interval=0
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class TCPStream(stream.TCPStream, NoProbesMixin):
|
||||||
|
@classmethod
|
||||||
|
@add_keepalives
|
||||||
|
def _open(cls, suffix, dscp):
|
||||||
|
return super()._open(suffix, dscp)
|
||||||
|
|
||||||
|
|
||||||
|
class SSLStream(stream.SSLStream, NoProbesMixin):
|
||||||
|
@classmethod
|
||||||
|
@add_keepalives
|
||||||
|
def _open(cls, suffix, dscp):
|
||||||
|
return super()._open(suffix, dscp)
|
||||||
|
|
||||||
|
|
||||||
|
# Overwriting globals in a library is clearly a good idea
|
||||||
|
stream.Stream.register_method("tcp", TCPStream)
|
||||||
|
stream.Stream.register_method("ssl", SSLStream)
|
||||||
|
|
||||||
|
|
||||||
# This version of Backend doesn't use a class variable for ovsdb_connection
|
# This version of Backend doesn't use a class variable for ovsdb_connection
|
||||||
# and therefor allows networking-ovn to manage connection scope on its own
|
# and therefor allows networking-ovn to manage connection scope on its own
|
||||||
class Backend(ovs_idl.Backend):
|
class Backend(ovs_idl.Backend):
|
||||||
|
Loading…
Reference in New Issue
Block a user