Skip to content

Commit

Permalink
fix(service): isolate redis namespace for core-svc instance and prope…
Browse files Browse the repository at this point in the history
…rly check if project is cached (#3555)
  • Loading branch information
Panaetius committed Jul 13, 2023
1 parent a2f2df4 commit 4288ada
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 23 deletions.
11 changes: 2 additions & 9 deletions helm-chart/renku-core/templates/deployment.yaml
@@ -1,11 +1,4 @@
{{- range $version := .Values.versions }}
{{- $queuesWithVersion := dict "datasetqueues" (list) "managementqueues" (list) -}}
{{- range $queue := (split "," $.Values.datasetsWorkerQueues) -}}
{{- $var := printf "%s.%s" $version.name $queue | append $queuesWithVersion.datasetqueues | set $queuesWithVersion "datasetqueues" -}}
{{- end }}
{{- range $queue := (split "," $.Values.managementWorkerQueues) -}}
{{- $var := printf "%s.%s" $version.name $queue | append $queuesWithVersion.managementqueues | set $queuesWithVersion "managementqueues" -}}
{{- end }}
---
apiVersion: apps/v1
kind: Deployment
Expand Down Expand Up @@ -199,7 +192,7 @@ spec:
- name: RENKU_SVC_CLEANUP_INTERVAL
value: {{ $.Values.cleanupInterval | quote }}
- name: RENKU_SVC_WORKER_QUEUES
value: {{ join "," $queuesWithVersion.datasetqueues }}
value: {{ $.Values.datasetsWorkerQueues}}
- name: RENKU_SVC_CLEANUP_TTL_FILES
value: {{ $.Values.cleanupFilesTTL | quote }}
- name: RENKU_SVC_CLEANUP_TTL_PROJECTS
Expand Down Expand Up @@ -255,7 +248,7 @@ spec:
- name: RENKU_SVC_CLEANUP_INTERVAL
value: {{ $.Values.cleanupInterval | quote }}
- name: RENKU_SVC_WORKER_QUEUES
value: {{ join "," $queuesWithVersion.managementqueues }}
value: {{ $.Values.managementWorkerQueues }}
- name: RENKU_SVC_CLEANUP_TTL_FILES
value: {{ $.Values.cleanupFilesTTL | quote }}
- name: RENKU_SVC_CLEANUP_TTL_PROJECTS
Expand Down
2 changes: 1 addition & 1 deletion helm-chart/renku-core/values.yaml
Expand Up @@ -98,7 +98,7 @@ versions:
fullnameOverride: ""
image:
repository: renku/renku-core
tag: "v1.11.3"
tag: "v1.11.4"
pullPolicy: IfNotPresent
podSecurityContext:
runAsUser: 1000
Expand Down
10 changes: 5 additions & 5 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Expand Up @@ -116,7 +116,7 @@ marshmallow = { version = ">=3.18.0,<3.20.0", optional = true }
marshmallow-oneofschema = { version = ">=3.0.1,<4.0.0", optional = true }
pillow = { version = ">=9.0.0,<9.6", optional = true }
python-dotenv = { version = ">=0.19.0,<0.21.0", optional = true }
redis = { version = ">=3.5.3,<4.6.0", optional = true }
redis = { version = ">=3.5.3,<4.6.0,!=4.5.5", optional = true }
rq = { version = "==1.15.0", optional = true }
rq-scheduler = { version = "==0.13.1", optional = true }
sentry-sdk = { version = ">=1.5.11,<1.26.0", extras = ["flask"], optional = true }
Expand Down
11 changes: 10 additions & 1 deletion renku/ui/service/cache/config.py
Expand Up @@ -16,13 +16,22 @@
# limitations under the License.
"""Renku service cache configuration."""
import os
import platform
import socket
import uuid

container_name = platform.node()
if not container_name:
container_name = socket.gethostname()
if not container_name:
container_name = uuid.uuid4().hex # NOTE: Fallback if no hostname could be determined

REDIS_HOST = os.getenv("REDIS_HOST", "localhost")
REDIS_PORT = int(os.getenv("REDIS_PORT", 6379))
REDIS_DATABASE = int(os.getenv("REDIS_DATABASE", 0))
REDIS_PASSWORD = os.getenv("REDIS_PASSWORD")

REDIS_NAMESPACE = os.getenv("REDIS_NAMESPACE")
REDIS_NAMESPACE = os.getenv("REDIS_NAMESPACE", "") + container_name

REDIS_IS_SENTINEL = os.environ.get("REDIS_IS_SENTINEL", "") == "true"
REDIS_MASTER_SET = os.environ.get("REDIS_MASTER_SET", "mymaster")
5 changes: 5 additions & 0 deletions renku/ui/service/controllers/api/mixins.py
Expand Up @@ -162,6 +162,11 @@ def execute_op(self):
project = Project.get(
(Project.user_id == self.user_data["user_id"]) & (Project.git_url == self.context["git_url"])
)

if not project.abs_path.exists():
project.delete()
raise ValueError("Project found in redis but missing on disk.")

except ValueError:
from renku.ui.service.controllers.cache_project_clone import ProjectCloneCtrl

Expand Down
5 changes: 3 additions & 2 deletions renku/ui/service/controllers/templates_create_project.py
Expand Up @@ -130,9 +130,10 @@ def setup_template(self):
self.template_version = repository.head.commit.hexsha

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

Expand Down
9 changes: 5 additions & 4 deletions renku/ui/service/worker.py
Expand Up @@ -23,6 +23,7 @@
from sentry_sdk.integrations.rq import RqIntegration

from renku.core.errors import ConfigurationError, UsageError
from renku.ui.service.cache.config import REDIS_NAMESPACE
from renku.ui.service.config import SENTRY_ENABLED, SENTRY_SAMPLERATE
from renku.ui.service.jobs.queues import QUEUES, WorkerQueues
from renku.ui.service.logger import DEPLOYMENT_LOG_LEVEL, worker_log
Expand Down Expand Up @@ -63,12 +64,12 @@ def check_queues(queue_list):

def start_worker(queue_list):
"""Start worker."""
q = [q.strip() for q in queue_list if q.strip()]
q = [f"{REDIS_NAMESPACE}.{q.strip()}" for q in queue_list if q.strip()]
check_queues(q)

worker_log.info(f"working on queues: {queue_list}")
worker_log.info(f"working on queues: {q}")

with worker(queue_list) as rq_worker:
with worker(q) as rq_worker:
worker_log.info("running worker")
rq_worker.work(logging_level=DEPLOYMENT_LOG_LEVEL)

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

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

0 comments on commit 4288ada

Please sign in to comment.