From aa5cc0ca5dd06d1f45693fcfe488981c9a45496f Mon Sep 17 00:00:00 2001 From: Milind Srivastava Date: Wed, 18 Mar 2026 22:03:07 -0400 Subject: [PATCH 1/2] Modified asap-tools to use Rust asap-planner-rs --- asap-planner-rs/Dockerfile | 43 +++++++++++++++++++ asap-planner-rs/docker-compose.yml.j2 | 15 +++++++ asap-planner-rs/installation/install.sh | 18 ++++++++ asap-tools/components.conf | 1 + .../experiment_utils/services/misc.py | 6 +-- 5 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 asap-planner-rs/Dockerfile create mode 100644 asap-planner-rs/docker-compose.yml.j2 create mode 100755 asap-planner-rs/installation/install.sh diff --git a/asap-planner-rs/Dockerfile b/asap-planner-rs/Dockerfile new file mode 100644 index 0000000..594fd57 --- /dev/null +++ b/asap-planner-rs/Dockerfile @@ -0,0 +1,43 @@ +FROM rust:1.89 AS builder + +LABEL maintainer="SketchDB Team" +LABEL description="ASAP Planner (Rust) for SketchDB" + +WORKDIR /code + +COPY asap-common ./asap-common +COPY Cargo.toml ./ +COPY Cargo.lock ./ +COPY asap-query-engine/Cargo.toml ./asap-query-engine/ +COPY asap-planner-rs/Cargo.toml ./asap-planner-rs/ + +# Create dummy source files so Cargo can resolve all workspace members +RUN mkdir -p asap-query-engine/src && echo "fn main() {}" > asap-query-engine/src/main.rs && \ + mkdir -p asap-planner-rs/src && echo "fn main() {}" > asap-planner-rs/src/main.rs && \ + echo "pub fn placeholder() {}" >> asap-planner-rs/src/lib.rs + +# Build dependencies (this layer will be cached) +WORKDIR /code/asap-planner-rs +RUN cargo build --release && rm -rf src/ + +# Copy source code +COPY asap-planner-rs/src ./src + +# Build the actual application +RUN touch src/main.rs && cargo build --release + +FROM ubuntu:24.04 + +WORKDIR /app + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + libssl3 \ + zlib1g \ + && rm -rf /var/lib/apt/lists/* + +RUN mkdir -p /app/input /app/output + +COPY --from=builder /code/target/release/asap-planner /usr/local/bin/asap-planner + +ENTRYPOINT ["asap-planner"] diff --git a/asap-planner-rs/docker-compose.yml.j2 b/asap-planner-rs/docker-compose.yml.j2 new file mode 100644 index 0000000..d36368f --- /dev/null +++ b/asap-planner-rs/docker-compose.yml.j2 @@ -0,0 +1,15 @@ +services: + controller: + image: sketchdb-controller:latest + container_name: {{ container_name }} + volumes: + - {{ input_config_path }}:/app/input/config.yaml:ro + - {{ output_dir }}:/app/output + command: [ + "--input_config", "/app/input/config.yaml", + "--output_dir", "/app/output", + "--prometheus_scrape_interval", "{{ prometheus_scrape_interval }}", + "--streaming_engine", "{{ streaming_engine }}"{% if punting %}, + "--enable-punting"{% endif %} + ] + restart: no diff --git a/asap-planner-rs/installation/install.sh b/asap-planner-rs/installation/install.sh new file mode 100755 index 0000000..8824b66 --- /dev/null +++ b/asap-planner-rs/installation/install.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -e + +THIS_DIR=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")") +PARENT_DIR=$(dirname "$THIS_DIR") +WORKSPACE_DIR=$(dirname "$PARENT_DIR") + +source "$HOME/.cargo/env" + +echo "Building asap-planner-rs Rust binary..." +cd "$WORKSPACE_DIR" +cargo build --release -p asap_planner + +echo "Building asap-planner-rs Docker image..." +docker build . -f asap-planner-rs/Dockerfile -t sketchdb-controller:latest + +echo "asap-planner-rs Docker image built successfully: sketchdb-controller:latest" diff --git a/asap-tools/components.conf b/asap-tools/components.conf index 5f325d8..f533b30 100644 --- a/asap-tools/components.conf +++ b/asap-tools/components.conf @@ -8,6 +8,7 @@ asap-common #QueryEngine asap-query-engine asap-planner +asap-planner-rs #prometheus-kafka-adapter asap-sketch-ingest asap-quickstart diff --git a/asap-tools/experiments/experiment_utils/services/misc.py b/asap-tools/experiments/experiment_utils/services/misc.py index 1e4e340..798e63d 100644 --- a/asap-tools/experiments/experiment_utils/services/misc.py +++ b/asap-tools/experiments/experiment_utils/services/misc.py @@ -236,7 +236,7 @@ def _start_bare_metal( controller_remote_output_dir: str, punting: bool, ) -> None: - cmd = "python3 main_controller.py --input_config {} --prometheus_scrape_interval {} --output_dir {} --streaming_engine {}".format( + cmd = "./target/release/asap-planner --input_config {} --prometheus_scrape_interval {} --output_dir {} --streaming_engine {}".format( controller_input_file, prometheus_scrape_interval, controller_remote_output_dir, @@ -244,7 +244,7 @@ def _start_bare_metal( ) if punting: cmd += " --enable-punting" - cmd_dir = os.path.join(self.provider.get_home_dir(), "code", "asap-planner") + cmd_dir = os.path.join(self.provider.get_home_dir(), "code", "asap-planner-rs") self.provider.execute_command( node_idx=self.node_offset, cmd=cmd, @@ -263,7 +263,7 @@ def _start_containerized( punting: bool, ): controller_dir = os.path.join( - self.provider.get_home_dir(), "code", "asap-planner" + self.provider.get_home_dir(), "code", "asap-planner-rs" ) template_path = os.path.join(controller_dir, "docker-compose.yml.j2") From 5720fc184e3a03eb1975c70c16592c01e3d285ae Mon Sep 17 00:00:00 2001 From: Milind Srivastava Date: Thu, 19 Mar 2026 16:08:26 -0400 Subject: [PATCH 2/2] Bug fix --- asap-planner-rs/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asap-planner-rs/Dockerfile b/asap-planner-rs/Dockerfile index 594fd57..d751168 100644 --- a/asap-planner-rs/Dockerfile +++ b/asap-planner-rs/Dockerfile @@ -24,7 +24,7 @@ RUN cargo build --release && rm -rf src/ COPY asap-planner-rs/src ./src # Build the actual application -RUN touch src/main.rs && cargo build --release +RUN touch src/main.rs src/lib.rs && cargo build --release FROM ubuntu:24.04