Merge "[OVN] Skip the port status UP update during a live migration" into stable/xena
This commit is contained in:
commit
327091eeb8
@ -300,6 +300,7 @@ LSP_TYPE_VIRTUAL = 'virtual'
|
|||||||
LSP_TYPE_EXTERNAL = 'external'
|
LSP_TYPE_EXTERNAL = 'external'
|
||||||
LSP_TYPE_LOCALPORT = 'localport'
|
LSP_TYPE_LOCALPORT = 'localport'
|
||||||
LSP_TYPE_ROUTER = 'router'
|
LSP_TYPE_ROUTER = 'router'
|
||||||
|
LSP_OPTIONS_REQUESTED_CHASSIS_KEY = 'requested-chassis'
|
||||||
LSP_OPTIONS_VIRTUAL_PARENTS_KEY = 'virtual-parents'
|
LSP_OPTIONS_VIRTUAL_PARENTS_KEY = 'virtual-parents'
|
||||||
LSP_OPTIONS_VIRTUAL_IP_KEY = 'virtual-ip'
|
LSP_OPTIONS_VIRTUAL_IP_KEY = 'virtual-ip'
|
||||||
LSP_OPTIONS_MCAST_FLOOD_REPORTS = 'mcast_flood_reports'
|
LSP_OPTIONS_MCAST_FLOOD_REPORTS = 'mcast_flood_reports'
|
||||||
|
@ -797,3 +797,10 @@ def get_ovn_chassis_other_config(chassis):
|
|||||||
return chassis.other_config
|
return chassis.other_config
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return chassis.external_ids
|
return chassis.external_ids
|
||||||
|
|
||||||
|
|
||||||
|
def get_requested_chassis(requested_chassis):
|
||||||
|
"""Returns a list with the items in the LSP.options:requested-chassis"""
|
||||||
|
if isinstance(requested_chassis, str):
|
||||||
|
return requested_chassis.split(',')
|
||||||
|
return []
|
||||||
|
@ -275,6 +275,15 @@ class PortBindingChassisUpdateEvent(row_event.RowEvent):
|
|||||||
{'port': row.logical_port, 'binding': row.uuid})
|
{'port': row.logical_port, 'binding': row.uuid})
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
req_chassis = utils.get_requested_chassis(
|
||||||
|
row.options.get(ovn_const.LSP_OPTIONS_REQUESTED_CHASSIS_KEY, ''))
|
||||||
|
if len(req_chassis) > 1:
|
||||||
|
# This event has been issued during a LSP migration. During this
|
||||||
|
# process, the LSP will change the port binding but the port status
|
||||||
|
# will be handled by the ``LogicalSwitchPortUpdateDownEvent`` and
|
||||||
|
# ``LogicalSwitchPortUpdateUpEvent`` events.
|
||||||
|
return False
|
||||||
|
|
||||||
return bool(lsp.up)
|
return bool(lsp.up)
|
||||||
|
|
||||||
def run(self, event, row, old=None):
|
def run(self, event, row, old=None):
|
||||||
|
@ -360,6 +360,7 @@ class TestPortBindingChassisUpdateEvent(base.BaseTestCase):
|
|||||||
self.driver.set_port_status_up.assert_called()
|
self.driver.set_port_status_up.assert_called()
|
||||||
else:
|
else:
|
||||||
self.driver.set_port_status_up.assert_not_called()
|
self.driver.set_port_status_up.assert_not_called()
|
||||||
|
self.driver.set_port_status_up.reset_mock()
|
||||||
|
|
||||||
def test_event_matches(self):
|
def test_event_matches(self):
|
||||||
# NOTE(twilson) This primarily tests implementation details. If a
|
# NOTE(twilson) This primarily tests implementation details. If a
|
||||||
@ -369,10 +370,24 @@ class TestPortBindingChassisUpdateEvent(base.BaseTestCase):
|
|||||||
attrs={'name': 'Port_Binding'})
|
attrs={'name': 'Port_Binding'})
|
||||||
ovsdb_row = fakes.FakeOvsdbRow.create_one_ovsdb_row
|
ovsdb_row = fakes.FakeOvsdbRow.create_one_ovsdb_row
|
||||||
self.driver.nb_ovn.lookup.return_value = ovsdb_row(attrs={'up': True})
|
self.driver.nb_ovn.lookup.return_value = ovsdb_row(attrs={'up': True})
|
||||||
|
|
||||||
|
# Port binding change.
|
||||||
self._test_event(
|
self._test_event(
|
||||||
self.event.ROW_UPDATE,
|
self.event.ROW_UPDATE,
|
||||||
ovsdb_row(attrs={'_table': pbtable, 'chassis': 'one',
|
ovsdb_row(attrs={'_table': pbtable, 'chassis': 'one',
|
||||||
'type': '_fake_', 'logical_port': 'foo'}),
|
'type': '_fake_', 'logical_port': 'foo',
|
||||||
|
'options': {}}),
|
||||||
|
ovsdb_row(attrs={'_table': pbtable, 'chassis': 'two',
|
||||||
|
'type': '_fake_'}))
|
||||||
|
|
||||||
|
# Port binding change because of a live migration in progress.
|
||||||
|
options = {
|
||||||
|
ovn_const.LSP_OPTIONS_REQUESTED_CHASSIS_KEY: 'chassis1,chassis2'}
|
||||||
|
self._test_event(
|
||||||
|
self.event.ROW_UPDATE,
|
||||||
|
ovsdb_row(attrs={'_table': pbtable, 'chassis': 'one',
|
||||||
|
'type': '_fake_', 'logical_port': 'foo',
|
||||||
|
'options': options}),
|
||||||
ovsdb_row(attrs={'_table': pbtable, 'chassis': 'two',
|
ovsdb_row(attrs={'_table': pbtable, 'chassis': 'two',
|
||||||
'type': '_fake_'}))
|
'type': '_fake_'}))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user