diff --git a/lower-constraints.txt b/lower-constraints.txt index cf60cc2db7e..6586d5a9dc9 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -79,7 +79,7 @@ oslo.versionedobjects==1.35.1 oslotest==3.2.0 osprofiler==2.3.0 ovs==2.10.0 -ovsdbapp==1.15.0 +ovsdbapp==1.16.0 packaging==20.4 Paste==2.0.2 PasteDeploy==1.5.0 diff --git a/neutron/agent/ovn/metadata/ovsdb.py b/neutron/agent/ovn/metadata/ovsdb.py index 18d9812f921..7817bdaf85c 100644 --- a/neutron/agent/ovn/metadata/ovsdb.py +++ b/neutron/agent/ovn/metadata/ovsdb.py @@ -50,7 +50,7 @@ class MetadataAgentOvnSbIdl(ovsdb_monitor.OvnIdl): if chassis: for table in set(tables).intersection({'Chassis', 'Chassis_Private'}): - self.tables[table].condition = [['name', '==', chassis]] + self.set_table_condition(table, [['name', '==', chassis]]) if events: self.notify_handler.watch_events(events) diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py index 02ba4e3810c..f9939d91d34 100644 --- a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py +++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py @@ -23,6 +23,7 @@ from neutron_lib.utils import helpers from oslo_config import cfg from oslo_log import log from oslo_utils import timeutils +from ovs.db import idl as ovs_idl_mod from ovs.stream import Stream from ovsdbapp.backend.ovs_idl import connection from ovsdbapp.backend.ovs_idl import event as row_event @@ -693,6 +694,15 @@ class Ml2OvnIdlBase(connection.OvsdbIdl): super(Ml2OvnIdlBase, self).__init__( remote, schema, probe_interval=probe_interval, **kwargs) + def set_table_condition(self, table_name, condition): + # Prior to ovs commit 46d44cf3be0, self.cond_change() doesn't work here + # but after that commit, setting table.condtion doesn't work. + if hasattr(ovs_idl_mod, 'ConditionState'): + self.cond_change(table_name, condition) + else: + # Can be removed after the minimum ovs version >= 2.17.0 + self.tables[table_name].condition = condition + class BaseOvnIdl(Ml2OvnIdlBase): def __init__(self, remote, schema, **kwargs): @@ -909,11 +919,8 @@ class OvnInitPGNbIdl(OvnIdl): def __init__(self, driver, remote, schema): super(OvnInitPGNbIdl, self).__init__(driver, remote, schema) - # self.cond_change() doesn't work here because we are setting the - # condition *before an initial monitor request is made* so there is - # no previous session whose condition we wish to change - self.tables['Port_Group'].condition = [ - ['name', '==', ovn_const.OVN_DROP_PORT_GROUP_NAME]] + self.set_table_condition( + 'Port_Group', [['name', '==', ovn_const.OVN_DROP_PORT_GROUP_NAME]]) self.neutron_pg_drop_event = NeutronPgDropPortGroupCreated( timeout=ovn_conf.get_ovn_ovsdb_timeout()) self.notify_handler.watch_event(self.neutron_pg_drop_event) diff --git a/requirements.txt b/requirements.txt index 51c6ad2e02b..cdb6c3c548d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -46,7 +46,7 @@ osprofiler>=2.3.0 # Apache-2.0 os-ken>=2.2.0 # Apache-2.0 os-resource-classes>=1.1.0 # Apache-2.0 ovs>=2.10.0 # Apache-2.0 -ovsdbapp>=1.15.0 # Apache-2.0 +ovsdbapp>=1.16.0 # Apache-2.0 packaging>=20.4 # Apache-2.0 psutil>=5.3.0 # BSD pyroute2>=0.6.6;sys_platform!='win32' # Apache-2.0 (+ dual licensed GPL2)