Merge "Support SB OVSDB connections to non-leader servers"

This commit is contained in:
Zuul 2021-10-18 09:42:50 +00:00 committed by Gerrit Code Review
commit 4e339776d9
2 changed files with 26 additions and 12 deletions

View File

@ -40,8 +40,13 @@ class MetadataAgentOvnSbIdl(ovsdb_monitor.OvnIdl):
'SB_Global')
for table in tables:
helper.register_table(table)
super(MetadataAgentOvnSbIdl, self).__init__(
None, connection_string, helper)
try:
super(MetadataAgentOvnSbIdl, self).__init__(
None, connection_string, helper, leader_only=False)
except TypeError:
# TODO(twilson) We can remove this when we require ovs>=2.12.0
super(MetadataAgentOvnSbIdl, self).__init__(
None, connection_string, helper)
if chassis:
for table in set(tables).intersection({'Chassis',
'Chassis_Private'}):

View File

@ -561,9 +561,9 @@ class Ml2OvnIdlBase(connection.OvsdbIdl):
class BaseOvnIdl(Ml2OvnIdlBase):
def __init__(self, remote, schema):
def __init__(self, remote, schema, **kwargs):
self.notify_handler = row_event.RowEventHandler()
super(BaseOvnIdl, self).__init__(remote, schema)
super(BaseOvnIdl, self).__init__(remote, schema, **kwargs)
@classmethod
def from_server(cls, connection_string, helper):
@ -581,13 +581,18 @@ class BaseOvnSbIdl(Ml2OvnIdlBase):
helper.register_table('Encap')
helper.register_table('Port_Binding')
helper.register_table('Datapath_Binding')
return cls(connection_string, helper)
# Used by MaintenanceWorker which can use ovsdb locking
try:
return cls(connection_string, helper, leader_only=True)
except TypeError:
# TODO(twilson) We can remove this when we require ovs>=2.12.0
return cls(connection_string, helper)
class OvnIdl(BaseOvnIdl):
def __init__(self, driver, remote, schema):
super(OvnIdl, self).__init__(remote, schema)
def __init__(self, driver, remote, schema, **kwargs):
super(OvnIdl, self).__init__(remote, schema, **kwargs)
self.driver = driver
self.notify_handler = OvnDbNotifyHandler(driver)
@ -605,8 +610,8 @@ class OvnIdl(BaseOvnIdl):
class OvnIdlDistributedLock(BaseOvnIdl):
def __init__(self, driver, remote, schema):
super(OvnIdlDistributedLock, self).__init__(remote, schema)
def __init__(self, driver, remote, schema, **kwargs):
super(OvnIdlDistributedLock, self).__init__(remote, schema, **kwargs)
self.driver = driver
self.notify_handler = OvnDbNotifyHandler(driver)
self._node_uuid = self.driver.node_uuid
@ -717,8 +722,8 @@ class OvnNbIdl(OvnIdlDistributedLock):
class OvnSbIdl(OvnIdlDistributedLock):
def __init__(self, driver, remote, schema):
super(OvnSbIdl, self).__init__(driver, remote, schema)
def __init__(self, driver, remote, schema, **kwargs):
super(OvnSbIdl, self).__init__(driver, remote, schema, **kwargs)
self.notify_handler.watch_events([
ChassisAgentDeleteEvent(self.driver),
ChassisAgentDownEvent(self.driver),
@ -738,7 +743,11 @@ class OvnSbIdl(OvnIdlDistributedLock):
helper.register_table('Datapath_Binding')
helper.register_table('Connection')
helper.register_columns('SB_Global', ['external_ids'])
return cls(driver, connection_string, helper)
try:
return cls(driver, connection_string, helper, leader_only=False)
except TypeError:
# TODO(twilson) We can remove this when we require ovs>=2.12.0
return cls(driver, connection_string, helper)
def post_connect(self):
"""Watch Chassis events.