Properly handle virtual port chassis updates
When a VIP changes chassis the port_binding table gets the chassis information updated instead of deleted and added. This patch ensures update of chassis field is properly handled in that case so that the IP/FIP gets properly exposed on time, rather than the re-sync function fixing it Change-Id: Idced3467780f7a17aabe5cc2d821020152c7735b
This commit is contained in:
parent
b17b1d4f2c
commit
6d20db44fd
@ -37,7 +37,7 @@ class PortBindingChassisCreatedEvent(base_watcher.PortBindingChassisEvent):
|
||||
if not self._check_ip_associated(row.mac[0]):
|
||||
return False
|
||||
return (row.chassis[0].name == self.agent.chassis and
|
||||
not old.chassis)
|
||||
(not old.chassis or row.chassis != old.chassis))
|
||||
except (IndexError, AttributeError):
|
||||
return False
|
||||
|
||||
@ -62,7 +62,7 @@ class PortBindingChassisDeletedEvent(base_watcher.PortBindingChassisEvent):
|
||||
return False
|
||||
if event == self.ROW_UPDATE:
|
||||
return (old.chassis[0].name == self.agent.chassis and
|
||||
not row.chassis)
|
||||
(not row.chassis or row.chassis != old.chassis))
|
||||
else:
|
||||
return row.chassis[0].name == self.agent.chassis
|
||||
except (IndexError, AttributeError):
|
||||
|
@ -47,9 +47,24 @@ class TestPortBindingChassisCreatedEvent(test_base.TestCase):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
old = utils.create_row(chassis=self.chassis)
|
||||
old = utils.create_row(chassis=[ch])
|
||||
self.assertFalse(self.event.match_fn(mock.Mock(), row, old))
|
||||
|
||||
def test_match_fn_no_old_chassis(self):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
old = utils.create_row(chassis=[])
|
||||
self.assertTrue(self.event.match_fn(mock.Mock(), row, old))
|
||||
|
||||
def test_match_fn_different_old_chassis(self):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
ch_old = utils.create_row(name='old-chassis')
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
old = utils.create_row(chassis=[ch_old])
|
||||
self.assertTrue(self.event.match_fn(mock.Mock(), row, old))
|
||||
|
||||
def test_match_fn_index_error(self):
|
||||
row = utils.create_row(chassis=[],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
@ -112,9 +127,26 @@ class TestPortBindingChassisDeletedEvent(test_base.TestCase):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
old = utils.create_row(chassis=self.chassis)
|
||||
old = utils.create_row(chassis=[ch])
|
||||
self.assertFalse(self.event.match_fn(event, row, old))
|
||||
|
||||
def test_match_fn_update_no_chassis(self):
|
||||
event = self.event.ROW_UPDATE
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
old = utils.create_row(chassis=[ch])
|
||||
self.assertTrue(self.event.match_fn(event, row, old))
|
||||
|
||||
def test_match_fn_update_different_chassis(self):
|
||||
event = self.event.ROW_UPDATE
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
ch_new = utils.create_row(name='new-chassis')
|
||||
row = utils.create_row(chassis=[ch_new],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
old = utils.create_row(chassis=[ch])
|
||||
self.assertTrue(self.event.match_fn(event, row, old))
|
||||
|
||||
def test_match_fn_index_error(self):
|
||||
row = utils.create_row(chassis=[],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
|
Loading…
Reference in New Issue
Block a user