Trivial: avoid KeyError while processing ports

The Neutron OVS agent logs can get flooded with KeyErrors as the
'_get_port_info' method skips the added/removed dict items if no
ports have been added/removed, which are expected to be present,
even if those are just empty sets.

This change ensures that those port info dict fields are always set.

Closes-Bug: #1783556

Change-Id: I9e5325aa2d8525231353ba451e8ea895be51b1ca
(cherry picked from commit da5b13df2b)
This commit is contained in:
Lucian Petrut 2018-07-25 16:05:04 +03:00 committed by Slawek Kaplonski
parent 01d8262664
commit e60a510d85
2 changed files with 11 additions and 4 deletions

View File

@ -1216,7 +1216,9 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin,
def _get_port_info(self, registered_ports, cur_ports,
readd_registered_ports):
port_info = {'current': cur_ports}
port_info = {'current': cur_ports,
'added': set(),
'removed': set()}
# FIXME(salv-orlando): It's not really necessary to return early
# if nothing has changed.
if not readd_registered_ports and cur_ports == registered_ports:

View File

@ -367,7 +367,9 @@ class TestOvsNeutronAgent(object):
def test_scan_ports_returns_current_only_for_unchanged_ports(self):
vif_port_set = set([1, 3])
registered_ports = set([1, 3])
expected = {'current': vif_port_set}
expected = {'current': vif_port_set,
'added': set(),
'removed': set()}
actual = self.mock_scan_ports(vif_port_set, registered_ports)
self.assertEqual(expected, actual)
@ -418,7 +420,8 @@ class TestOvsNeutronAgent(object):
vif_port_set = set([1, 2, 3])
registered_ports = set([1, 2, 3])
updated_ports = set([2])
expected = dict(current=vif_port_set, updated=set([2]))
expected = dict(current=vif_port_set, updated=set([2]),
added=set(), removed=set())
actual = self.mock_scan_ports(vif_port_set, registered_ports,
updated_ports)
self.assertEqual(expected, actual)
@ -2239,7 +2242,9 @@ class AncillaryBridgesTest(object):
def test_scan_ancillary_ports_returns_cur_only_for_unchanged_ports(self):
vif_port_set = set([1, 2])
registered_ports = set([1, 2])
expected = dict(current=vif_port_set)
expected = dict(current=vif_port_set,
added=set(),
removed=set())
actual = self.mock_scan_ancillary_ports(vif_port_set, registered_ports)
self.assertEqual(expected, actual)