From eae7f0b1cbbc9518687195f31e1691b41ee4146d Mon Sep 17 00:00:00 2001 From: Mynt Labs Date: Sun, 29 Jun 2025 23:06:33 +1000 Subject: [PATCH 1/2] Hot fix v0.2.0 --- CHANGELOG.md | 5 +++++ README.md | 2 +- VERSION | 2 +- src/compute-manager/Dockerfile | 10 ++++++++++ src/compute-manager/src/driver/local.py | 24 +++++++++++++++++++++++- src/docker-compose.build.yml | 7 ++++++- src/docker-compose.release-template.yml | 7 ++++++- src/experiment-server/entrypoint.sh | 3 +-- 8 files changed, 53 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9347df8..13bc182 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## [0.2.1] +- Misc hot fixes +- `LocalDriver` pull image if it doesn't exist locally. +- Fix Compute Manager healthcheck + ## [0.2.0] - The objective of this release is to support mounting the Flint Metastore as a POSIX-like filesystem. Consequently, reducing the number of Docker volumes required by the Control Plane. - The Experiment Tracker has been collapsed into the Experiment Server for simplicity and improved robustness around `inotify` events. diff --git a/README.md b/README.md index 952ab32..0c6c39a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ FlintML Logo Text
- Version 0.2.0 + Version 0.2.1 License BSL 1.1
diff --git a/VERSION b/VERSION index 341cf11..7dff5b8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.2.0 \ No newline at end of file +0.2.1 \ No newline at end of file diff --git a/src/compute-manager/Dockerfile b/src/compute-manager/Dockerfile index 07b0481..49c1310 100644 --- a/src/compute-manager/Dockerfile +++ b/src/compute-manager/Dockerfile @@ -12,6 +12,16 @@ RUN poetry config virtualenvs.create false && \ FROM python:3.12-slim AS runtime +# install curl +RUN apt-get update && \ + apt-get install -y --no-install-recommends curl && \ + rm -rf /var/lib/apt/lists/* + +# install yq +RUN curl -L https://github.com/mikefarah/yq/releases/download/v4.35.1/yq_linux_amd64 \ + -o /usr/local/bin/yq && \ + chmod +x /usr/local/bin/yq + WORKDIR /app # Inject dependencies diff --git a/src/compute-manager/src/driver/local.py b/src/compute-manager/src/driver/local.py index fbc79ac..fe3138b 100644 --- a/src/compute-manager/src/driver/local.py +++ b/src/compute-manager/src/driver/local.py @@ -1,7 +1,7 @@ import asyncio import docker from docker.models.containers import Container -from docker.errors import NotFound, APIError +from docker.errors import ImageNotFound, APIError from docker.types import LogConfig from typing import Dict import os @@ -25,9 +25,31 @@ def __init__(self, config: dict): super().__init__(config) self._docker: docker.DockerClient = docker.from_env() + self._ensure_worker_image() + self._containers: Dict[str, Tuple[ContainerContext, Optional[Container]]] = {} self._watch_tasks: Dict[str, asyncio.Task] = {} + def _ensure_worker_image(self) -> None: + """ + Check for self.worker_image in the local cache, and pull from Docker Hub + if it's not found. + """ + try: + self._docker.images.get(self.worker_image) + logging.info(f"Image {self.worker_image} already present, skipping pull.") + except ImageNotFound: + logging.info(f"Image {self.worker_image} not found locally, pulling…") + try: + self._docker.images.pull(self.worker_image) + logging.info(f"Successfully pulled {self.worker_image}.") + except APIError as e: + logging.error(f"Failed to pull {self.worker_image}: {e}") + raise e + except APIError as e: + logging.error(f"Docker error inspecting image {self.worker_image}: {e}") + raise e + async def launch_container(self, ctx: ContainerContext) -> None: """Start a container and begin watching it for unexpected exits.""" try: diff --git a/src/docker-compose.build.yml b/src/docker-compose.build.yml index 5c9ce5b..2d5d944 100644 --- a/src/docker-compose.build.yml +++ b/src/docker-compose.build.yml @@ -61,7 +61,12 @@ services: context: . dockerfile: ./workspace/Dockerfile depends_on: - - catalog-explorer + storage: + condition: service_healthy + compute-manager: + condition: service_healthy + catalog-explorer: + condition: service_started restart: always reverse-proxy: diff --git a/src/docker-compose.release-template.yml b/src/docker-compose.release-template.yml index 8d7c623..ee3ea73 100644 --- a/src/docker-compose.release-template.yml +++ b/src/docker-compose.release-template.yml @@ -55,7 +55,12 @@ services: <<: [*storage-creds, *s3fs] image: flintml/workspace:${VERSION} depends_on: - - catalog-explorer + storage: + condition: service_healthy + compute-manager: + condition: service_healthy + catalog-explorer: + condition: service_started restart: always reverse-proxy: diff --git a/src/experiment-server/entrypoint.sh b/src/experiment-server/entrypoint.sh index c811697..d11f0fd 100644 --- a/src/experiment-server/entrypoint.sh +++ b/src/experiment-server/entrypoint.sh @@ -39,5 +39,4 @@ server_pid=$! aim up \ --repo /mnt/metastore/experiment \ --host 0.0.0.0 --port 43800 \ - --base-path /experiment-tracker \ - --log-level debug \ No newline at end of file + --base-path /experiment-tracker \ No newline at end of file From 6ef7b8cf08647f440897bb3c44bb98090b68a941 Mon Sep 17 00:00:00 2001 From: Mynt Labs Date: Sun, 29 Jun 2025 23:07:53 +1000 Subject: [PATCH 2/2] remove yq from CM image --- src/compute-manager/Dockerfile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/compute-manager/Dockerfile b/src/compute-manager/Dockerfile index 49c1310..3e0e9ea 100644 --- a/src/compute-manager/Dockerfile +++ b/src/compute-manager/Dockerfile @@ -17,11 +17,6 @@ RUN apt-get update && \ apt-get install -y --no-install-recommends curl && \ rm -rf /var/lib/apt/lists/* -# install yq -RUN curl -L https://github.com/mikefarah/yq/releases/download/v4.35.1/yq_linux_amd64 \ - -o /usr/local/bin/yq && \ - chmod +x /usr/local/bin/yq - WORKDIR /app # Inject dependencies