Skip to content
Snippets Groups Projects
Commit 20c2b62a authored by Daniel Lyons's avatar Daniel Lyons
Browse files

Improve the query so that it handles in-progress executions correctly

parent 3ec9e75a
No related branches found
No related tags found
1 merge request!496Improve the query so that it handles in-progress executions correctly
Pipeline #2989 passed
......@@ -398,18 +398,27 @@ class CapabilityInfo(CapabilityInfoIF):
for row in self.session.get_bind().execute(
text(
"""
select
cr.capability_name,
SUM(CASE WHEN capability_executions.state = 'Waiting' THEN 1 ELSE 0 END) as submitted,
SUM(CASE WHEN capability_executions.state = 'ExecutingWorkflow' THEN 1 ELSE 0 END) as executing,
max_jobs
from capability_executions
join capability_versions cv on capability_executions.capability_request_id = cv.capability_request_id and capability_executions.capability_version_number = cv.version_number
join capability_requests cr on cv.capability_request_id = cr.capability_request_id
join capabilities on cr.capability_name = capabilities.capability_name
where split_part(steps, E'\n', current_step + 1) like 'prepare-and-run-workflow%'
and NOT capabilities.paused
group by cr.capability_name, max_jobs"""
with
queue_states as (
select cr.capability_name, ce.state, count(*) as in_state
from capability_executions ce
join capability_versions cv on ce.capability_request_id = cv.capability_request_id and ce.capability_version_number = cv.version_number
join capability_requests cr on cv.capability_request_id = cr.capability_request_id
where ce.state = 'Waiting' and split_part(steps, E'\n', current_step + 1) like 'prepare-and-run-workflow%'
group by cr.capability_name, ce.state
union all
select cr.capability_name, ce.state, count(*) as in_state
from capability_executions ce
join capability_versions cv on ce.capability_request_id = cv.capability_request_id and ce.capability_version_number = cv.version_number
join capability_requests cr on cv.capability_request_id = cr.capability_request_id
where ce.state = 'ExecutingWorkflow'
group by cr.capability_name, ce.state)
SELECT
capability_name,
COALESCE((SELECT in_state FROM queue_states WHERE c.capability_name = queue_states.capability_name AND state = 'Waiting'), 0) AS waiting,
COALESCE((SELECT in_state FROM queue_states WHERE c.capability_name = queue_states.capability_name AND state = 'ExecutingWorkflow'), 0) as executing,
max_jobs
FROM capabilities c WHERE NOT c.paused"""
)
):
result.append(QueueReport(row[0], row[1], row[2], row[3]))
......
......@@ -244,6 +244,7 @@ class ExecutionManager(ExecutionManagerIF):
self.execute_or_queue(execution)
self.capability_info.save_execution(execution)
transaction.commit()
return execution
def _complete_execution(self, execution: CapabilityExecutionIF) -> CapabilityExecutionIF:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment