From eac09e4f5d6c2f4eb7e5f8f085f88bc3ed234a42 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 31 Oct 2024 07:42:36 +0000
Subject: [PATCH] Debug OFC24, Service and Optical Controller

---
 .../service/task_scheduler/TaskExecutor.py    | 28 +++++++++++++++----
 .../Task_OpticalConnectionDeconfigure.py      | 11 +++++++-
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/src/service/service/task_scheduler/TaskExecutor.py b/src/service/service/task_scheduler/TaskExecutor.py
index ac06e321d..9e7175e74 100644
--- a/src/service/service/task_scheduler/TaskExecutor.py
+++ b/src/service/service/task_scheduler/TaskExecutor.py
@@ -219,13 +219,22 @@ class TaskExecutor:
         service = item
         if (isinstance(item, ServiceId)):
             service = self.get_service(item)
-        class_service_handler = None
+        service_handler = None
         service_handler_settings = {}
         for connection in connections.connections:
             connection_uuid=connection.connection_id.connection_uuid
-            if class_service_handler is None:
-                class_service_handler = self.get_service_handler(connection, service,**service_handler_settings)
-            if class_service_handler.check_media_channel(connection_uuid):
+            if service_handler is None:
+                service_handlers = self.get_service_handlers(
+                    connection, service, **service_handler_settings
+                )
+                # TODO: improve to select different service handlers when needed
+                # By now, assume a single service handler is retrieved for all the
+                # device types in the path, i.e., all entries carry the same
+                # service handler, so we choose the first one retrieved.
+                if len(service_handlers) < 1:
+                    raise Exception('Unsupported case: {:s}'.format(str(service_handlers)))
+                service_handler,_ = list(service_handlers.values())[0]
+            if service_handler.check_media_channel(connection_uuid):
                 return True
         return False
 
@@ -234,7 +243,16 @@ class TaskExecutor:
     ) -> bool:
         service_handler_settings = {}
         connection_uuid = connection.connection_id.connection_uuid
-        service_handler_class = self.get_service_handler(connection, service, **service_handler_settings)
+        classes_service_handlers = self.get_service_handlers(
+            connection, service, **service_handler_settings
+        )
+        # TODO: improve to select different service handlers when needed
+        # By now, assume a single service handler is retrieved for all the
+        # device types in the path, i.e., all entries carry the same
+        # service handler, so we choose the first one retrieved.
+        if len(classes_service_handlers) < 1:
+            raise Exception('Unsupported case: {:s}'.format(str(classes_service_handlers)))
+        service_handler_class,_ = list(classes_service_handlers.values())[0]
         return service_handler_class.check_media_channel(connection_uuid)
 
     def get_device_controller(self, device : Device) -> Optional[Device]:
diff --git a/src/service/service/task_scheduler/tasks/Task_OpticalConnectionDeconfigure.py b/src/service/service/task_scheduler/tasks/Task_OpticalConnectionDeconfigure.py
index b1afdeef1..a624e81b5 100644
--- a/src/service/service/task_scheduler/tasks/Task_OpticalConnectionDeconfigure.py
+++ b/src/service/service/task_scheduler/tasks/Task_OpticalConnectionDeconfigure.py
@@ -48,7 +48,16 @@ class Task_OpticalConnectionDeconfigure(_Task):
         service = self._task_executor.get_service(connection.service_id)
         errors = []
         service_handler_settings = {}
-        service_handler = self._task_executor.get_service_handler(connection, service, **service_handler_settings)
+        service_handlers = self._task_executor.get_service_handlers(
+            connection, service, **service_handler_settings
+        )
+        # TODO: improve to select different service handlers when needed
+        # By now, assume a single service handler is retrieved for all the
+        # device types in the path, i.e., all entries carry the same
+        # service handler, so we choose the first one retrieved.
+        if len(service_handlers) < 1:
+            raise Exception('Unsupported case: {:s}'.format(str(service_handlers)))
+        service_handler,_ = list(service_handlers.values())[0]
 
         endpointids_to_delete = endpointids_to_raw(connection.path_hops_endpoint_ids)
         connection_uuid = connection.connection_id.connection_uuid.uuid
-- 
GitLab