From b656e1658a812595b105b234fe0a160352fde066 Mon Sep 17 00:00:00 2001
From: rahhal <mrahhal@cttc.es>
Date: Thu, 12 Dec 2024 15:40:41 +0000
Subject: [PATCH] Updated-TaskExecutor

---
 .../service/task_scheduler/TaskExecutor.py    | 31 +++++++++++++++----
 1 file changed, 25 insertions(+), 6 deletions(-)

diff --git a/src/service/service/task_scheduler/TaskExecutor.py b/src/service/service/task_scheduler/TaskExecutor.py
index 6fb1eca34..55f50f044 100644
--- a/src/service/service/task_scheduler/TaskExecutor.py
+++ b/src/service/service/task_scheduler/TaskExecutor.py
@@ -287,10 +287,15 @@ class TaskExecutor:
                 devices.setdefault(device_type, dict())[device_uuid] = device
             else:
                 if not exclude_managed_by_controller:
+                    LOGGER.debug('device managed by controller = {:s}'.format(str(device_uuid)))
                     device_type = DeviceTypeEnum._value2member_map_[device.device_type]
+                    LOGGER.debug('device_type not exlude by controller = {:s}'.format(str(device_type)))
                     devices.setdefault(device_type, dict())[device_uuid] = device
-                device_type = DeviceTypeEnum._value2member_map_[controller.device_type]
-                devices.setdefault(device_type, dict())[controller.device_id.device_uuid.uuid] = controller
+                else:
+                    device_type = DeviceTypeEnum._value2member_map_[controller.device_type]
+                    LOGGER.debug('device_type = {:s}'.format(str(device_type)))
+                    devices.setdefault(device_type, dict())[controller.device_id.device_uuid.uuid] = controller
+
         return devices
 
     # ----- Service-related methods ------------------------------------------------------------------------------------
@@ -320,16 +325,30 @@ class TaskExecutor:
     def get_service_handlers(
         self, connection : Connection, service : Service, **service_handler_settings
     ) -> Dict[DeviceTypeEnum, Tuple['_ServiceHandler', Dict[str, Device]]]:
-        connection_device_types : Dict[DeviceTypeEnum, Dict[str, Device]] = self.get_devices_from_connection(
+        # WARNING: exclude_managed_by_controller should be True, changed to False for test purposes.
+        # For Ryu SDN controller we need to know the underlying devices we are traversing.
+        # Elaborate proper logic to resolve this case.
+        connection_device_types_excluded : Dict[DeviceTypeEnum, Dict[str, Device]] = self.get_devices_from_connection(
             connection, exclude_managed_by_controller=True
         )
+        LOGGER.debug('connection_device_types_excluded = {:s}'.format(str(connection_device_types_excluded)))
+        connection_device_types_included : Dict[DeviceTypeEnum, Dict[str, Device]] = self.get_devices_from_connection(
+            connection, exclude_managed_by_controller=False
+        )
+        LOGGER.debug('connection_device_types_included = {:s}'.format(str(connection_device_types_included)))
         service_handlers : Dict[DeviceTypeEnum, Tuple['_ServiceHandler', Dict[str, Device]]] = dict()
-        for device_type, connection_devices in connection_device_types.items():
+        for device_type, connection_devices in connection_device_types_excluded.items():
             try:
                 service_handler_class = get_service_handler_class(
-                    self._service_handler_factory, service, connection_devices)
+                    self._service_handler_factory, service, connection_devices
+                )
+                LOGGER.debug('service_handler_class IN CONNECTION DEVICE TYPE EXCLUDED = {:s}'.format(str(service_handler_class.__name__)))
                 service_handler = service_handler_class(service, self, **service_handler_settings)
-                service_handlers[device_type] = (service_handler, connection_devices)
+                LOGGER.debug('service_handler IN CONNECTION DEVICE TYPE EXCLUDED = {:s}'.format(str(service_handler)))
+                connection_devices_included = connection_device_types_included.get(device_type, connection_devices)
+                LOGGER.debug('connection_devices_included IN CONNECTION DEVICE TYPE EXCLUDED = {:s}'.format(str(connection_devices_included)))
+                service_handlers[device_type] = (service_handler, connection_devices_included)
+                LOGGER.debug('service_handlers IN CONNECTION DEVICE TYPE EXCLUDED = {:s}'.format(str(service_handlers)))
             except (
                 UnsatisfiedFilterException, UnsupportedFilterFieldException,
                 UnsupportedFilterFieldValueException
-- 
GitLab