From 0fd99637c28bfe5df5fefd5b16de14cd495f285f Mon Sep 17 00:00:00 2001 From: Nelson Dominguez Date: Wed, 4 Mar 2026 11:06:21 +0100 Subject: [PATCH] Improve cargo workspace layout --- Cargo.toml | 4 ++-- docker-compose.yml => compose.yml | 16 ++++++++-------- {minikv-core => crates/minikv-core}/Cargo.toml | 0 {minikv-core => crates/minikv-core}/src/error.rs | 0 .../minikv-core}/src/hashing.rs | 0 {minikv-core => crates/minikv-core}/src/lib.rs | 0 .../minikv-core}/src/locking.rs | 0 .../minikv-core}/src/rebalance.rs | 0 .../minikv-core}/src/rebuild.rs | 0 .../minikv-core}/src/record.rs | 0 .../minikv-core}/src/replication.rs | 0 {minikv-core => crates/minikv-core}/src/state.rs | 0 .../minikv-core}/src/storage/leveldb.rs | 0 .../minikv-core}/src/storage/mod.rs | 0 .../minikv-core}/src/volumes.rs | 0 .../minikv-core}/tests/hashing.rs | 0 .../minikv-core}/tests/rebalance.rs | 0 .../minikv-core}/tests/record.rs | 0 {minikv => crates/minikv}/Cargo.toml | 0 {minikv => crates/minikv}/src/cli.rs | 0 {minikv => crates/minikv}/src/error.rs | 0 {minikv => crates/minikv}/src/http/handlers.rs | 0 {minikv => crates/minikv}/src/http/mod.rs | 0 {minikv => crates/minikv}/src/http/query.rs | 0 {minikv => crates/minikv}/src/http/s3.rs | 0 {minikv => crates/minikv}/src/lib.rs | 0 {minikv => crates/minikv}/src/main.rs | 0 {minikv => crates/minikv}/tests/integration.rs | 0 Dockerfile => docker/Dockerfile | 11 ++++------- Dockerfile.volume => docker/Dockerfile.volume | 0 {config => nginx}/nginx-frontend.conf | 0 {config => nginx}/nginx-volume.conf | 0 volume => scripts/volume | 0 33 files changed, 14 insertions(+), 17 deletions(-) rename docker-compose.yml => compose.yml (89%) rename {minikv-core => crates/minikv-core}/Cargo.toml (100%) rename {minikv-core => crates/minikv-core}/src/error.rs (100%) rename {minikv-core => crates/minikv-core}/src/hashing.rs (100%) rename {minikv-core => crates/minikv-core}/src/lib.rs (100%) rename {minikv-core => crates/minikv-core}/src/locking.rs (100%) rename {minikv-core => crates/minikv-core}/src/rebalance.rs (100%) rename {minikv-core => crates/minikv-core}/src/rebuild.rs (100%) rename {minikv-core => crates/minikv-core}/src/record.rs (100%) rename {minikv-core => crates/minikv-core}/src/replication.rs (100%) rename {minikv-core => crates/minikv-core}/src/state.rs (100%) rename {minikv-core => crates/minikv-core}/src/storage/leveldb.rs (100%) rename {minikv-core => crates/minikv-core}/src/storage/mod.rs (100%) rename {minikv-core => crates/minikv-core}/src/volumes.rs (100%) rename {minikv-core => crates/minikv-core}/tests/hashing.rs (100%) rename {minikv-core => crates/minikv-core}/tests/rebalance.rs (100%) rename {minikv-core => crates/minikv-core}/tests/record.rs (100%) rename {minikv => crates/minikv}/Cargo.toml (100%) rename {minikv => crates/minikv}/src/cli.rs (100%) rename {minikv => crates/minikv}/src/error.rs (100%) rename {minikv => crates/minikv}/src/http/handlers.rs (100%) rename {minikv => crates/minikv}/src/http/mod.rs (100%) rename {minikv => crates/minikv}/src/http/query.rs (100%) rename {minikv => crates/minikv}/src/http/s3.rs (100%) rename {minikv => crates/minikv}/src/lib.rs (100%) rename {minikv => crates/minikv}/src/main.rs (100%) rename {minikv => crates/minikv}/tests/integration.rs (100%) rename Dockerfile => docker/Dockerfile (93%) rename Dockerfile.volume => docker/Dockerfile.volume (100%) rename {config => nginx}/nginx-frontend.conf (100%) rename {config => nginx}/nginx-volume.conf (100%) rename volume => scripts/volume (100%) diff --git a/Cargo.toml b/Cargo.toml index da80326..ab0400b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "3" -members = ["minikv", "minikv-core"] +members = ["crates/minikv", "crates/minikv-core"] [workspace.package] version = "0.1.0" @@ -14,7 +14,7 @@ keywords = ["storage", "distributed", "leveldb", "object-store"] categories = ["database", "network-programming"] [workspace.dependencies] -minikv-core = { path = "minikv-core" } +minikv-core = { path = "crates/minikv-core" } thiserror = "2" tracing = "0.1" diff --git a/docker-compose.yml b/compose.yml similarity index 89% rename from docker-compose.yml rename to compose.yml index 28741f5..90ea9fa 100644 --- a/docker-compose.yml +++ b/compose.yml @@ -16,7 +16,7 @@ services: ports: - "8080:8080" volumes: - - ./config/nginx-frontend.conf:/etc/nginx/nginx.conf:ro + - ./nginx/nginx-frontend.conf:/etc/nginx/nginx.conf:ro depends_on: minikv: condition: service_started @@ -33,7 +33,7 @@ services: minikv: build: context: . - dockerfile: Dockerfile + dockerfile: docker/Dockerfile target: runtime image: minikv:local container_name: minikv @@ -78,13 +78,13 @@ services: volume1: build: context: . - dockerfile: Dockerfile.volume + dockerfile: docker/Dockerfile.volume image: minikv-volume:local container_name: volume1 ports: - "8001:8080" # localhost:8001 → volume1:8080 (matches --public-volumes[0]) volumes: - - ./config/nginx-volume.conf:/etc/nginx/nginx.conf:ro + - ./nginx/nginx-volume.conf:/etc/nginx/nginx.conf:ro - volume1-data:/data networks: - minikv-net @@ -102,13 +102,13 @@ services: volume2: build: context: . - dockerfile: Dockerfile.volume + dockerfile: docker/Dockerfile.volume image: minikv-volume:local container_name: volume2 ports: - "8002:8080" # localhost:8002 → volume2:8080 (matches --public-volumes[1]) volumes: - - ./config/nginx-volume.conf:/etc/nginx/nginx.conf:ro + - ./nginx/nginx-volume.conf:/etc/nginx/nginx.conf:ro - volume2-data:/data networks: - minikv-net @@ -122,13 +122,13 @@ services: volume3: build: context: . - dockerfile: Dockerfile.volume + dockerfile: docker/Dockerfile.volume image: minikv-volume:local container_name: volume3 ports: - "8003:8080" # localhost:8003 → volume3:8080 (matches --public-volumes[2]) volumes: - - ./config/nginx-volume.conf:/etc/nginx/nginx.conf:ro + - ./nginx/nginx-volume.conf:/etc/nginx/nginx.conf:ro - volume3-data:/data networks: - minikv-net diff --git a/minikv-core/Cargo.toml b/crates/minikv-core/Cargo.toml similarity index 100% rename from minikv-core/Cargo.toml rename to crates/minikv-core/Cargo.toml diff --git a/minikv-core/src/error.rs b/crates/minikv-core/src/error.rs similarity index 100% rename from minikv-core/src/error.rs rename to crates/minikv-core/src/error.rs diff --git a/minikv-core/src/hashing.rs b/crates/minikv-core/src/hashing.rs similarity index 100% rename from minikv-core/src/hashing.rs rename to crates/minikv-core/src/hashing.rs diff --git a/minikv-core/src/lib.rs b/crates/minikv-core/src/lib.rs similarity index 100% rename from minikv-core/src/lib.rs rename to crates/minikv-core/src/lib.rs diff --git a/minikv-core/src/locking.rs b/crates/minikv-core/src/locking.rs similarity index 100% rename from minikv-core/src/locking.rs rename to crates/minikv-core/src/locking.rs diff --git a/minikv-core/src/rebalance.rs b/crates/minikv-core/src/rebalance.rs similarity index 100% rename from minikv-core/src/rebalance.rs rename to crates/minikv-core/src/rebalance.rs diff --git a/minikv-core/src/rebuild.rs b/crates/minikv-core/src/rebuild.rs similarity index 100% rename from minikv-core/src/rebuild.rs rename to crates/minikv-core/src/rebuild.rs diff --git a/minikv-core/src/record.rs b/crates/minikv-core/src/record.rs similarity index 100% rename from minikv-core/src/record.rs rename to crates/minikv-core/src/record.rs diff --git a/minikv-core/src/replication.rs b/crates/minikv-core/src/replication.rs similarity index 100% rename from minikv-core/src/replication.rs rename to crates/minikv-core/src/replication.rs diff --git a/minikv-core/src/state.rs b/crates/minikv-core/src/state.rs similarity index 100% rename from minikv-core/src/state.rs rename to crates/minikv-core/src/state.rs diff --git a/minikv-core/src/storage/leveldb.rs b/crates/minikv-core/src/storage/leveldb.rs similarity index 100% rename from minikv-core/src/storage/leveldb.rs rename to crates/minikv-core/src/storage/leveldb.rs diff --git a/minikv-core/src/storage/mod.rs b/crates/minikv-core/src/storage/mod.rs similarity index 100% rename from minikv-core/src/storage/mod.rs rename to crates/minikv-core/src/storage/mod.rs diff --git a/minikv-core/src/volumes.rs b/crates/minikv-core/src/volumes.rs similarity index 100% rename from minikv-core/src/volumes.rs rename to crates/minikv-core/src/volumes.rs diff --git a/minikv-core/tests/hashing.rs b/crates/minikv-core/tests/hashing.rs similarity index 100% rename from minikv-core/tests/hashing.rs rename to crates/minikv-core/tests/hashing.rs diff --git a/minikv-core/tests/rebalance.rs b/crates/minikv-core/tests/rebalance.rs similarity index 100% rename from minikv-core/tests/rebalance.rs rename to crates/minikv-core/tests/rebalance.rs diff --git a/minikv-core/tests/record.rs b/crates/minikv-core/tests/record.rs similarity index 100% rename from minikv-core/tests/record.rs rename to crates/minikv-core/tests/record.rs diff --git a/minikv/Cargo.toml b/crates/minikv/Cargo.toml similarity index 100% rename from minikv/Cargo.toml rename to crates/minikv/Cargo.toml diff --git a/minikv/src/cli.rs b/crates/minikv/src/cli.rs similarity index 100% rename from minikv/src/cli.rs rename to crates/minikv/src/cli.rs diff --git a/minikv/src/error.rs b/crates/minikv/src/error.rs similarity index 100% rename from minikv/src/error.rs rename to crates/minikv/src/error.rs diff --git a/minikv/src/http/handlers.rs b/crates/minikv/src/http/handlers.rs similarity index 100% rename from minikv/src/http/handlers.rs rename to crates/minikv/src/http/handlers.rs diff --git a/minikv/src/http/mod.rs b/crates/minikv/src/http/mod.rs similarity index 100% rename from minikv/src/http/mod.rs rename to crates/minikv/src/http/mod.rs diff --git a/minikv/src/http/query.rs b/crates/minikv/src/http/query.rs similarity index 100% rename from minikv/src/http/query.rs rename to crates/minikv/src/http/query.rs diff --git a/minikv/src/http/s3.rs b/crates/minikv/src/http/s3.rs similarity index 100% rename from minikv/src/http/s3.rs rename to crates/minikv/src/http/s3.rs diff --git a/minikv/src/lib.rs b/crates/minikv/src/lib.rs similarity index 100% rename from minikv/src/lib.rs rename to crates/minikv/src/lib.rs diff --git a/minikv/src/main.rs b/crates/minikv/src/main.rs similarity index 100% rename from minikv/src/main.rs rename to crates/minikv/src/main.rs diff --git a/minikv/tests/integration.rs b/crates/minikv/tests/integration.rs similarity index 100% rename from minikv/tests/integration.rs rename to crates/minikv/tests/integration.rs diff --git a/Dockerfile b/docker/Dockerfile similarity index 93% rename from Dockerfile rename to docker/Dockerfile index 7b7a9aa..1a492f9 100644 --- a/Dockerfile +++ b/docker/Dockerfile @@ -27,9 +27,9 @@ WORKDIR /build # ----------------------------------------------------------------------------- FROM chef AS planner +# Copy workspace manifests, preserving folder structure COPY Cargo.toml Cargo.lock ./ -COPY minikv ./minikv -COPY minikv-core ./minikv-core +COPY crates ./crates RUN cargo chef prepare --recipe-path recipe.json @@ -48,10 +48,7 @@ COPY --from=planner /build/recipe.json recipe.json RUN cargo chef cook --release --recipe-path recipe.json -COPY Cargo.toml Cargo.lock ./ -COPY minikv ./minikv -COPY minikv-core ./minikv-core -COPY config ./config +COPY . . # Enforce strict compilation rules. ENV RUSTFLAGS="-D warnings -D unsafe_code" @@ -75,7 +72,7 @@ LABEL org.opencontainers.image.licenses="MIT" COPY --from=builder /build/target/release/minikv /usr/local/bin/minikv # Copy nginx reference configuration (for operators). -COPY --from=builder /build/config/nginx-volume.conf /etc/minikv/nginx-volume.conf +COPY --from=builder /build/nginx/nginx-volume.conf /etc/minikv/nginx-volume.conf # Working directory for the metadata database. # This path must be mounted as a volume in production. diff --git a/Dockerfile.volume b/docker/Dockerfile.volume similarity index 100% rename from Dockerfile.volume rename to docker/Dockerfile.volume diff --git a/config/nginx-frontend.conf b/nginx/nginx-frontend.conf similarity index 100% rename from config/nginx-frontend.conf rename to nginx/nginx-frontend.conf diff --git a/config/nginx-volume.conf b/nginx/nginx-volume.conf similarity index 100% rename from config/nginx-volume.conf rename to nginx/nginx-volume.conf diff --git a/volume b/scripts/volume similarity index 100% rename from volume rename to scripts/volume