From 18ce44e4189f0ed324a6fc3fcc6492721fadfc1f Mon Sep 17 00:00:00 2001 From: OndrejSedlacek Date: Mon, 19 Feb 2024 17:33:00 +0100 Subject: [PATCH] SnapShooter: Bugfix - occasional duplicit snapshots. Postponed creation of the final list of components. Previously multiple independent components could sometimes be created. --- dp3/snapshots/snapshooter.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/dp3/snapshots/snapshooter.py b/dp3/snapshots/snapshooter.py index c204ed9a..ac03c330 100644 --- a/dp3/snapshots/snapshooter.py +++ b/dp3/snapshots/snapshooter.py @@ -322,21 +322,22 @@ def get_linked_entities(self, time: datetime, cached_linked_entities: list[tuple # Set linked as visited visited_entities.update(linked_entities) - # Update component + # Update component, take all connected components into account have_component = linked_entities & set(entity_to_component.keys()) if have_component: for entity in have_component: component = entity_to_component[entity] - component.update(linked_entities) - entity_to_component.update( - {entity: component for entity in linked_entities} - ) - break - else: - entity_to_component.update( - {entity: linked_entities for entity in linked_entities} - ) - linked_components.append(linked_entities) + linked_entities.update(component) + entity_to_component.update({entity: linked_entities for entity in linked_entities}) + + # Make a list of unique components + visited_entities.clear() + for entity, component in entity_to_component.items(): + if entity in visited_entities: + continue + visited_entities.update(component) + linked_components.append(component) + return linked_components def process_snapshot_task(self, msg_id, task: Snapshot):