Skip to content

Commit 780925e

Browse files
committed
fixing k8s wrapper to work, and dequeue.py to choose which mode of execution it wants docker/kubernetes and use corresponding wrapper
1 parent 4e99322 commit 780925e

3 files changed

Lines changed: 37 additions & 24 deletions

File tree

‎docker-app/qfieldcloud/core/management/commands/dequeue.py‎

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
import logging
23
import signal
34
from time import sleep
@@ -9,15 +10,30 @@
910
from django.db import connection, transaction
1011
from django.db.models import Q
1112
from qfieldcloud.core.models import Job
12-
from worker_wrapper.wrapper import (
13-
ApplyDeltaJobRun,
14-
CreateProjectJobRun,
15-
JobRun,
16-
PackageJobRun,
17-
ProcessProjectfileJobRun,
18-
cancel_orphaned_workers,
13+
14+
execution_mode = os.environ.get(
15+
"QFC_WORKER_EXECUTION_MODE",
16+
"docker",
1917
)
2018

19+
if execution_mode == "kubernetes":
20+
from worker_wrapper.wrapper_k8s import (
21+
ApplyDeltaJobRun,
22+
CreateProjectJobRun,
23+
JobRun,
24+
PackageJobRun,
25+
ProcessProjectfileJobRun,
26+
cancel_orphaned_workers,
27+
)
28+
else:
29+
from worker_wrapper.wrapper import (
30+
ApplyDeltaJobRun,
31+
CreateProjectJobRun,
32+
JobRun,
33+
PackageJobRun,
34+
ProcessProjectfileJobRun,
35+
cancel_orphaned_workers,
36+
)
2137

2238
class GracefulKiller:
2339
alive = True

‎docker-app/requirements/requirements_worker_wrapper.txt‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,8 @@ requests==2.34.2
1313
tenacity==9.1.4
1414
# via -r requirements/requirements_worker_wrapper.in
1515
urllib3==2.7.0
16-
# via
17-
# kubernetes
18-
# requests
19-
charset-normalizer==3.4.7
20-
# via requests
21-
docker==7.1.0
2216
# via -r /requirements/requirements_worker_wrapper.in
2317
durationpy==0.10
24-
# via kubernetes
25-
idna==3.15
2618
# via requests
2719
kubernetes==35.0.0
2820
# via -r /requirements/requirements_worker_wrapper.in
@@ -31,8 +23,6 @@ oauthlib==3.3.1
3123
python-dateutil==2.9.0.post0
3224
# via kubernetes
3325
pyyaml==6.0.3
34-
# via kubernetes
35-
requests==2.32.4
3626
# via
3727
# docker
3828
# kubernetes
@@ -44,8 +34,6 @@ six==1.17.0
4434
# kubernetes
4535
# python-dateutil
4636
tenacity==9.1.4
47-
# via -r /requirements/requirements_worker_wrapper.in
48-
urllib3==2.2.3
4937
# via
5038
# docker
5139
# kubernetes

‎docker-app/worker_wrapper/wrapper_k8s.py‎

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class JobRun:
9090

9191
def __init__(self, job_id: str) -> None:
9292
self.job = None
93-
self.container_timeout_secs = config.WORKER_TIMEOUT_S
93+
self.container_timeout_secs = settings.QFIELDCLOUD_WORKER_TIMEOUT_S
9494

9595
try:
9696
self.job_id = job_id
@@ -505,7 +505,10 @@ def _run_kubernetes_job(
505505
)
506506

507507
logger.info(
508-
f"Kubernetes Job {job_name} finished: {status}"
508+
"Kubernetes Job %s finished: succeeded=%s failed=%s",
509+
job_name,
510+
status.succeeded,
511+
status.failed,
509512
)
510513

511514
if not success:
@@ -851,6 +854,8 @@ def after_worker_run(self) -> None:
851854
"outputs"
852855
]["project_details"]["project_details"]
853856

857+
update_fields = ["project_details"]
858+
854859
# Since the `Project.qgis_version` field is newly added, we want to backfill it for old projects that didn't have it set,
855860
# but the `process_projectfile` job can detect the QGIS version from the project file and return it in the feedback, we can set it here.
856861
# NOTE `Project.qgis_version` is used by `wrapper.JobRun.get_qgis_image()` to detect
@@ -866,10 +871,12 @@ def after_worker_run(self) -> None:
866871
project.save(update_fields=update_fields)
867872

868873
QgisProject.objects.update_from_details(
869-
project, project.the_qgis_file.latest_version, project.project_details
874+
project,
875+
project.the_qgis_file.latest_version,
876+
project.project_details,
870877
)
871878

872-
def after_docker_exception(self) -> None:
879+
def after_worker_exception(self) -> None:
873880
project = self.job.project
874881

875882
if hasattr(project, "qgis_project"):
@@ -889,4 +896,6 @@ class CreateProjectJobRun(JobRun):
889896
]
890897

891898
def cancel_orphaned_workers() -> None:
892-
logger.info("cancel_orphaned_workers disabled for Kubernetes backend")
899+
logger.info(
900+
"cancel_orphaned_workers disabled for Kubernetes backend"
901+
)

0 commit comments

Comments
 (0)