Skip to content

Commit 4288ada

Browse files
authored
fix(service): isolate redis namespace for core-svc instance and properly check if project is cached (#3555)
1 parent a2f2df4 commit 4288ada

File tree

8 files changed

+32
-23
lines changed

8 files changed

+32
-23
lines changed

helm-chart/renku-core/templates/deployment.yaml

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
{{- range $version := .Values.versions }}
2-
{{- $queuesWithVersion := dict "datasetqueues" (list) "managementqueues" (list) -}}
3-
{{- range $queue := (split "," $.Values.datasetsWorkerQueues) -}}
4-
{{- $var := printf "%s.%s" $version.name $queue | append $queuesWithVersion.datasetqueues | set $queuesWithVersion "datasetqueues" -}}
5-
{{- end }}
6-
{{- range $queue := (split "," $.Values.managementWorkerQueues) -}}
7-
{{- $var := printf "%s.%s" $version.name $queue | append $queuesWithVersion.managementqueues | set $queuesWithVersion "managementqueues" -}}
8-
{{- end }}
92
---
103
apiVersion: apps/v1
114
kind: Deployment
@@ -199,7 +192,7 @@ spec:
199192
- name: RENKU_SVC_CLEANUP_INTERVAL
200193
value: {{ $.Values.cleanupInterval | quote }}
201194
- name: RENKU_SVC_WORKER_QUEUES
202-
value: {{ join "," $queuesWithVersion.datasetqueues }}
195+
value: {{ $.Values.datasetsWorkerQueues}}
203196
- name: RENKU_SVC_CLEANUP_TTL_FILES
204197
value: {{ $.Values.cleanupFilesTTL | quote }}
205198
- name: RENKU_SVC_CLEANUP_TTL_PROJECTS
@@ -255,7 +248,7 @@ spec:
255248
- name: RENKU_SVC_CLEANUP_INTERVAL
256249
value: {{ $.Values.cleanupInterval | quote }}
257250
- name: RENKU_SVC_WORKER_QUEUES
258-
value: {{ join "," $queuesWithVersion.managementqueues }}
251+
value: {{ $.Values.managementWorkerQueues }}
259252
- name: RENKU_SVC_CLEANUP_TTL_FILES
260253
value: {{ $.Values.cleanupFilesTTL | quote }}
261254
- name: RENKU_SVC_CLEANUP_TTL_PROJECTS

helm-chart/renku-core/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ versions:
9898
fullnameOverride: ""
9999
image:
100100
repository: renku/renku-core
101-
tag: "v1.11.3"
101+
tag: "v1.11.4"
102102
pullPolicy: IfNotPresent
103103
podSecurityContext:
104104
runAsUser: 1000

poetry.lock

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ marshmallow = { version = ">=3.18.0,<3.20.0", optional = true }
116116
marshmallow-oneofschema = { version = ">=3.0.1,<4.0.0", optional = true }
117117
pillow = { version = ">=9.0.0,<9.6", optional = true }
118118
python-dotenv = { version = ">=0.19.0,<0.21.0", optional = true }
119-
redis = { version = ">=3.5.3,<4.6.0", optional = true }
119+
redis = { version = ">=3.5.3,<4.6.0,!=4.5.5", optional = true }
120120
rq = { version = "==1.15.0", optional = true }
121121
rq-scheduler = { version = "==0.13.1", optional = true }
122122
sentry-sdk = { version = ">=1.5.11,<1.26.0", extras = ["flask"], optional = true }

renku/ui/service/cache/config.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,22 @@
1616
# limitations under the License.
1717
"""Renku service cache configuration."""
1818
import os
19+
import platform
20+
import socket
21+
import uuid
22+
23+
container_name = platform.node()
24+
if not container_name:
25+
container_name = socket.gethostname()
26+
if not container_name:
27+
container_name = uuid.uuid4().hex # NOTE: Fallback if no hostname could be determined
1928

2029
REDIS_HOST = os.getenv("REDIS_HOST", "localhost")
2130
REDIS_PORT = int(os.getenv("REDIS_PORT", 6379))
2231
REDIS_DATABASE = int(os.getenv("REDIS_DATABASE", 0))
2332
REDIS_PASSWORD = os.getenv("REDIS_PASSWORD")
2433

25-
REDIS_NAMESPACE = os.getenv("REDIS_NAMESPACE")
34+
REDIS_NAMESPACE = os.getenv("REDIS_NAMESPACE", "") + container_name
2635

2736
REDIS_IS_SENTINEL = os.environ.get("REDIS_IS_SENTINEL", "") == "true"
2837
REDIS_MASTER_SET = os.environ.get("REDIS_MASTER_SET", "mymaster")

renku/ui/service/controllers/api/mixins.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,11 @@ def execute_op(self):
162162
project = Project.get(
163163
(Project.user_id == self.user_data["user_id"]) & (Project.git_url == self.context["git_url"])
164164
)
165+
166+
if not project.abs_path.exists():
167+
project.delete()
168+
raise ValueError("Project found in redis but missing on disk.")
169+
165170
except ValueError:
166171
from renku.ui.service.controllers.cache_project_clone import ProjectCloneCtrl
167172

renku/ui/service/controllers/templates_create_project.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,10 @@ def setup_template(self):
130130
self.template_version = repository.head.commit.hexsha
131131

132132
# Verify missing parameters
133-
template_parameters = {p.name for p in self.template.parameters}
133+
template_parameters = {p.name: p for p in self.template.parameters}
134134
provided_parameters = {p["key"]: p["value"] for p in self.ctx["parameters"]}
135-
missing_keys = list(template_parameters - provided_parameters.keys())
135+
missing_keys = list(template_parameters.keys() - provided_parameters.keys())
136+
missing_keys = [k for k in missing_keys if not template_parameters[k].has_default]
136137
if len(missing_keys) > 0:
137138
raise UserProjectCreationError(error_message=f"the template requires a value for '${missing_keys[0]}'")
138139

renku/ui/service/worker.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from sentry_sdk.integrations.rq import RqIntegration
2424

2525
from renku.core.errors import ConfigurationError, UsageError
26+
from renku.ui.service.cache.config import REDIS_NAMESPACE
2627
from renku.ui.service.config import SENTRY_ENABLED, SENTRY_SAMPLERATE
2728
from renku.ui.service.jobs.queues import QUEUES, WorkerQueues
2829
from renku.ui.service.logger import DEPLOYMENT_LOG_LEVEL, worker_log
@@ -63,12 +64,12 @@ def check_queues(queue_list):
6364

6465
def start_worker(queue_list):
6566
"""Start worker."""
66-
q = [q.strip() for q in queue_list if q.strip()]
67+
q = [f"{REDIS_NAMESPACE}.{q.strip()}" for q in queue_list if q.strip()]
6768
check_queues(q)
6869

69-
worker_log.info(f"working on queues: {queue_list}")
70+
worker_log.info(f"working on queues: {q}")
7071

71-
with worker(queue_list) as rq_worker:
72+
with worker(q) as rq_worker:
7273
worker_log.info("running worker")
7374
rq_worker.work(logging_level=DEPLOYMENT_LOG_LEVEL)
7475

@@ -82,4 +83,4 @@ def start_worker(queue_list):
8283
"Worker queues not specified. Please, set RENKU_SVC_WORKER_QUEUES environment variable."
8384
)
8485

85-
start_worker([queue_name.strip() for queue_name in queues.strip().split(",")])
86+
start_worker([f"{REDIS_NAMESPACE}.{queue_name.strip()}" for queue_name in queues.strip().split(",")])

0 commit comments

Comments
 (0)