Skip to content

Commit

Permalink
fix(sessions): get the session status from the pod state (#611)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alputer committed Nov 18, 2024
1 parent 7896c61 commit 49cf295
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
17 changes: 17 additions & 0 deletions reana_workflow_controller/k8s.py
Original file line number Diff line number Diff line change
Expand Up @@ -477,3 +477,20 @@ def delete_dask_dashboard_ingress(cluster_name, workflow_id):
plural="middlewares",
name=f"replacepath-{workflow_id}",
)


def check_pod_by_prefix(pod_name_prefix, namespace="default"):
"""Check if there is a Pod in the given namespace whose name starts with the specified prefix. We assume that there exists 0 or 1 pod with a given prefix."""
try:
pods = current_k8s_corev1_api_client.list_namespaced_pod(namespace=namespace)

Check warning on line 485 in reana_workflow_controller/k8s.py

View check run for this annotation

Codecov / codecov/patch

reana_workflow_controller/k8s.py#L484-L485

Added lines #L484 - L485 were not covered by tests

for pod in pods.items:
if pod.metadata.name.startswith(pod_name_prefix):
if pod.status.phase == "Running":
return "Running"

Check warning on line 490 in reana_workflow_controller/k8s.py

View check run for this annotation

Codecov / codecov/patch

reana_workflow_controller/k8s.py#L487-L490

Added lines #L487 - L490 were not covered by tests
else:
return "Not Ready"

Check warning on line 492 in reana_workflow_controller/k8s.py

View check run for this annotation

Codecov / codecov/patch

reana_workflow_controller/k8s.py#L492

Added line #L492 was not covered by tests

return "Not Found"
except ApiException as e:
return f"Error: {e.reason}"

Check warning on line 496 in reana_workflow_controller/k8s.py

View check run for this annotation

Codecov / codecov/patch

reana_workflow_controller/k8s.py#L494-L496

Added lines #L494 - L496 were not covered by tests
16 changes: 16 additions & 0 deletions reana_workflow_controller/rest/workflows.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from webargs import fields, validate
from webargs.flaskparser import use_args, use_kwargs
from reana_commons.config import WORKFLOW_TIME_FORMAT
from reana_commons.utils import build_unique_component_name
from reana_db.database import Session
from reana_db.models import RunStatus, User, UserWorkflow, Workflow, WorkflowResource
from reana_db.utils import (
Expand All @@ -48,6 +49,8 @@
use_paginate_args,
)

from reana_workflow_controller.k8s import check_pod_by_prefix

START = "start"
STOP = "stop"
DELETED = "deleted"
Expand Down Expand Up @@ -398,7 +401,20 @@ def get_workflows(args, paginate=None): # noqa
if int_session:
workflow_response["session_type"] = int_session.type_.name
workflow_response["session_uri"] = int_session.path
int_session_pod_name_prefix = build_unique_component_name(

Check warning on line 404 in reana_workflow_controller/rest/workflows.py

View check run for this annotation

Codecov / codecov/patch

reana_workflow_controller/rest/workflows.py#L404

Added line #L404 was not covered by tests
"run-session", int_session.workflow[0].id_
)
if int_session.status == RunStatus.created:
pod_status = check_pod_by_prefix(

Check warning on line 408 in reana_workflow_controller/rest/workflows.py

View check run for this annotation

Codecov / codecov/patch

reana_workflow_controller/rest/workflows.py#L407-L408

Added lines #L407 - L408 were not covered by tests
pod_name_prefix=int_session_pod_name_prefix
)
if pod_status == "Running":
int_session.status = RunStatus.running
db_session = Session.object_session(int_session)
db_session.commit()

Check warning on line 414 in reana_workflow_controller/rest/workflows.py

View check run for this annotation

Codecov / codecov/patch

reana_workflow_controller/rest/workflows.py#L411-L414

Added lines #L411 - L414 were not covered by tests

workflow_response["session_status"] = int_session.status.name

# Skip workflow if type is interactive and there is no session
elif type_ == "interactive":
continue
Expand Down

0 comments on commit 49cf295

Please sign in to comment.