Skip to content

Commit 38dafac

Browse files
author
Vladyslav Moisieienkov
committed
consumer: remove pods for deleted workflows
closes reanahub#437
1 parent ae32eb8 commit 38dafac

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

reana_workflow_controller/consumer.py

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
build_unique_component_name,
3232
)
3333
from reana_db.database import Session
34-
from reana_db.models import Job, JobCache, Workflow, RunStatus
34+
from reana_db.models import Job, JobCache, Workflow, RunStatus, JobStatus
3535
from sqlalchemy.exc import SQLAlchemyError
3636
from sqlalchemy.orm.attributes import flag_modified
3737

@@ -118,11 +118,40 @@ def on_message(self, body, message):
118118
)
119119
elif workflow and workflow.status not in ALIVE_STATUSES:
120120
logging.warning(
121-
f"Event for not alive workflow {workflow.id_} with DB status {workflow.status} received:\n"
122-
f"{body}\nIgnoring..."
121+
f"Event for not alive workflow {workflow.id_} with DB status {workflow.status} received."
122+
)
123+
try:
124+
_delete_workflow_job(workflow)
125+
logging.info(
126+
f"Remove batch-pod for not alive {workflow.id_} workflow."
127+
)
128+
except REANAWorkflowControllerError as exception:
129+
logging.error(
130+
f"Could not clean up not alive workflow {workflow.id_} batch pod for workflow."
131+
f" Error: {exception}"
132+
)
133+
jobs = Session.query(Job).filter(
134+
Job.workflow_uuid == workflow_uuid,
123135
)
136+
for job in jobs:
137+
job_name = build_unique_component_name("run-job", job.id_)
138+
if job.status in [
139+
JobStatus.running,
140+
JobStatus.queued,
141+
JobStatus.created,
142+
]:
143+
try:
144+
current_k8s_batchv1_api_client.delete_namespaced_job(
145+
name=job_name,
146+
namespace=REANA_RUNTIME_KUBERNETES_NAMESPACE,
147+
propagation_policy="Background",
148+
)
149+
except ApiException as e:
150+
logging.error(
151+
f"run-job pod {job_name} for {workflow.id_} could not be deleted. Error: {e}"
152+
)
124153
else:
125-
logging.warning(
154+
logging.error(
126155
f"Event for workflow {workflow_uuid} that doesn't exist in DB received:\n"
127156
f"{body}\nIgnoring..."
128157
)

0 commit comments

Comments
 (0)