From d908b4288b3e3e54381d4d7af4220d5330e91c12 Mon Sep 17 00:00:00 2001
From: chausman <chausman@nrao.edu>
Date: Thu, 18 Feb 2021 14:49:57 -0700
Subject: [PATCH] fix CapabilityEngine to actually load the capability
 execution it's executing and then properly release the engine after
 completion

---
 .../capability/services/capability_engine.py    | 17 +++++++++++++----
 .../capability/services/capability_queue.py     |  6 +++---
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/shared/workspaces/workspaces/capability/services/capability_engine.py b/shared/workspaces/workspaces/capability/services/capability_engine.py
index a8a99f930..b83427072 100644
--- a/shared/workspaces/workspaces/capability/services/capability_engine.py
+++ b/shared/workspaces/workspaces/capability/services/capability_engine.py
@@ -22,17 +22,26 @@ class CapabilityEngine(CapabilityEngineIF):
     ):
         self.capability_info = capability_info
         self.workflow_service = workflow_service
+        self.execution = None
 
-    def execute(self, execution: CapabilityExecutionIF):
+    def load_engine(self, execution: CapabilityExecutionIF):
+        """
+        Load capability execution of interest into capability engine for access and execution
+        :param execution: execution to be executed by this engine
+        :return:
+        """
+        self.execution = execution
+
+    def execute(self):
         """
         Communicate with workflow service and send a request to run a workflow with given settings
 
         :param execution:
         """
-        step_sequence = CapabilitySequence.from_str(execution.steps)
+        step_sequence = CapabilitySequence.from_str(self.execution.steps)
         # Grab value of current step (workflow name)
-        cur_step = step_sequence[int(execution.current_step)]
-        cur_step.execute(self, execution)
+        cur_step = step_sequence[int(self.execution.current_step)]
+        cur_step.execute(self, self.execution)
 
     def submit_workflow_request(
         self, execution_id: int, workflow_name: str, workflow_args: dict, files: List[AbstractFile]
diff --git a/shared/workspaces/workspaces/capability/services/capability_queue.py b/shared/workspaces/workspaces/capability/services/capability_queue.py
index cf3caa4a4..1762579f2 100644
--- a/shared/workspaces/workspaces/capability/services/capability_queue.py
+++ b/shared/workspaces/workspaces/capability/services/capability_queue.py
@@ -71,9 +71,10 @@ class CapabilityQueue(CapabilityQueueIF):
                 if engine:
                     execution = self.capability_info.lookup_execution(execution.id)
                     # Start engine
-                    engine.execute(execution)
+                    engine.load_engine(execution)
                     # Move engine to in-use list
                     self.engine_list.in_use.append(engine)
+                    engine.execute()
                 else:
                     # FIXME: Logging
                     print("No available engines. Try again later.")
@@ -87,7 +88,7 @@ class CapabilityQueue(CapabilityQueueIF):
         :return: Corresponding engine
         """
         for engine in self.engine_list.in_use:
-            if engine.execution_id == execution_id:
+            if engine.execution.id == execution_id:
                 # Found correct engine
                 return engine
 
@@ -99,7 +100,6 @@ class CapabilityQueue(CapabilityQueueIF):
         """
         engine = self.find_engine(execution_id)
         self.engine_list.in_use.remove(engine)
-        engine.execution_id = None
         engine.execution = None
         self.engine_list.available.put(engine)
 
-- 
GitLab