Dont use dict.get() to know certain key is in dict
In CommonAgentLoop class, there is logic to detect tap device is changed locally or not by comparing timestamp with previous. Sometimes timestamp value could be None depending on the timing (see bug/1781129) But current _get_devices_locally_modified logic can not detect local change from None to something because _get_devices_locally_modified function don't always compare if previous timestamp value was None. In order not to miss updated device always, better not to use dict.get() to know previous iteration have timestamp or not. Change-Id: Ib0361ad5c281f88558e8e048cfec588b9f9b1de4 Closes-Bug: #1781129
This commit is contained in:
parent
5db3979581
commit
b803195a99
|
@ -366,7 +366,7 @@ class CommonAgentLoop(service.Service):
|
|||
returned because this means it is new.
|
||||
"""
|
||||
return {device for device, timestamp in timestamps.items()
|
||||
if previous_timestamps.get(device) and
|
||||
if device in previous_timestamps and
|
||||
timestamp != previous_timestamps.get(device)}
|
||||
|
||||
def scan_devices(self, previous, sync):
|
||||
|
|
|
@ -233,6 +233,23 @@ class TestCommonAgentLoop(base.BaseTestCase):
|
|||
self._test_scan_devices(previous, updated, fake_current, expected,
|
||||
sync=False)
|
||||
|
||||
def test_scan_devices_timestamp_triggers_updated_None_to_something(self):
|
||||
previous = {'current': set([1, 2]),
|
||||
'updated': set(),
|
||||
'added': set(),
|
||||
'removed': set(),
|
||||
'timestamps': {2: None}}
|
||||
fake_current = set([1, 2])
|
||||
updated = set()
|
||||
expected = {'current': set([1, 2]),
|
||||
'updated': set([2]),
|
||||
'added': set(),
|
||||
'removed': set(),
|
||||
'timestamps': {2: 1000}}
|
||||
|
||||
self._test_scan_devices(previous, updated, fake_current, expected,
|
||||
sync=False, fake_ts_current={2: 1000})
|
||||
|
||||
def test_scan_devices_timestamp_triggers_updated(self):
|
||||
previous = {'current': set([1, 2]),
|
||||
'updated': set(),
|
||||
|
|
Loading…
Reference in New Issue