diff --git a/rust/volume_server/DEV_PLAN.md b/rust/volume_server/DEV_PLAN.md index 7bb5d85a9..7cefb3661 100644 --- a/rust/volume_server/DEV_PLAN.md +++ b/rust/volume_server/DEV_PLAN.md @@ -14,7 +14,8 @@ Implement a native Rust volume server that replicates Go volume-server behavior - Go master + Go volume (default) - Go master + Rust launcher (`VOLUME_SERVER_IMPL=rust`) - Rust launcher `proxy` mode has full-suite integration pass while delegating backend handlers to Go. -- Native Rust API/storage logic is not implemented yet. +- Rust launcher `native` mode is wired as the default Rust entrypoint and currently bootstraps via supervised Go backend delegation. +- Native Rust API/storage handlers are not implemented yet. ## Parity Exit Criteria 1. Native mode passes: @@ -27,7 +28,7 @@ Implement a native Rust volume server that replicates Go volume-server behavior ## Architecture Workstreams ### A. Runtime and Configuration Parity -- [ ] Add `native` runtime mode in `weed-volume-rs`. +- [x] Add `native` runtime mode in `weed-volume-rs` (bootstrap delegation path). - [ ] Parse and honor volume-server CLI/config flags used by integration harness: - [ ] network/bind ports (`-ip`, `-port`, `-port.grpc`, `-port.public`) - [ ] master target/config dir/read mode/throttling/JWT-related config @@ -91,7 +92,7 @@ Implement a native Rust volume server that replicates Go volume-server behavior - [ ] `/status`, `/healthz` - [ ] `GetState`, `SetState`, `VolumeServerStatus`, `Ping`, `VolumeServerLeave` - Gate: - - targeted HTTP/grpc control tests pass in `native` mode. + - [x] targeted HTTP/grpc control tests pass in `native` mode (delegated backend path). ### M2: Native Core Data Paths - [ ] Native HTTP read/write/delete baseline parity. @@ -110,15 +111,15 @@ Implement a native Rust volume server that replicates Go volume-server behavior - full `/test/volume_server/http` and `/test/volume_server/grpc` pass in `native` mode. ### M5: CI/Cutover -- [ ] Add/expand native-mode CI jobs. -- [ ] Make native mode default for Rust integration runs. +- [x] Add/expand native-mode CI jobs (smoke matrix includes `native`). +- [x] Make native mode default for Rust integration runs. - [ ] Keep `exec`/`proxy` only as explicit fallback modes during rollout. ## Immediate Next Steps -1. Introduce `VOLUME_SERVER_RUST_MODE=native` and wire native server startup skeleton. -2. Implement `/status` and `/healthz` with parity headers/payload fields. -3. Implement minimal gRPC state/ping RPCs. -4. Run targeted integration tests in native mode and iterate on mismatches. +1. Implement `/status` and `/healthz` with native Rust handlers and parity headers/payload fields. +2. Implement minimal native gRPC state/ping RPC handlers (`GetState`, `SetState`, `VolumeServerStatus`, `Ping`, `VolumeServerLeave`). +3. Keep rerunning native-mode integration suites as each delegated branch is replaced. +4. Add mismatch triage notes for each API moved from delegation to native implementation. ## Risk Register - On-disk format mismatch risk: @@ -144,4 +145,13 @@ Implement a native Rust volume server that replicates Go volume-server behavior - Date: 2026-02-16 - Change: Re-focused plan from test expansion to native Rust implementation parity. - Validation basis: latest Rust proxy full-suite pass keeps regression baseline stable while native implementation starts. -- Commits: pending +- Commits: `14c863dbf` + +- Date: 2026-02-16 +- Change: Added native Rust launcher mode bootstrap, set Rust launcher default mode to `native`, and expanded CI Rust smoke matrix to include `native`. +- Validation: + - `env VOLUME_SERVER_IMPL=rust VOLUME_SERVER_RUST_MODE=native go test -count=1 ./test/volume_server/http` + - `env VOLUME_SERVER_IMPL=rust VOLUME_SERVER_RUST_MODE=native go test -count=1 ./test/volume_server/grpc` + - `env VOLUME_SERVER_IMPL=rust go test -count=1 ./test/volume_server/http -run '^TestAdminStatusAndHealthz$'` + - `env VOLUME_SERVER_IMPL=rust go test -count=1 ./test/volume_server/grpc -run '^TestStateAndStatusRPCs$'` +- Commits: `70ddbee37`, `61befd10f`, `2e65966c0` diff --git a/test/volume_server/DEV_PLAN.md b/test/volume_server/DEV_PLAN.md index 934065c7b..2ee4c6960 100644 --- a/test/volume_server/DEV_PLAN.md +++ b/test/volume_server/DEV_PLAN.md @@ -1230,7 +1230,7 @@ Update this section during implementation: - APIs covered: full `/test/volume_server/http` and `/test/volume_server/grpc` packages. - Profiles covered: existing matrix in Rust proxy launcher mode. - Gaps introduced/remaining: native Rust endpoint/storage/RPC implementation remains pending (current Rust mode still delegates to Go backend handlers). -- Commit: pending +- Commit: `6bb9d8bac` - Date: 2026-02-15 - Change: Added tail sender stream-cancellation interruption coverage. @@ -1272,4 +1272,11 @@ Update this section during implementation: - APIs covered: no new API additions in this plan entry; integration suite remains the validation gate. - Profiles covered: unchanged. - Gaps introduced/remaining: primary remaining gap is native Rust handler/storage/RPC implementation replacing Go backend delegation. -- Commit: pending +- Commit: `14c863dbf` + +- Date: 2026-02-16 +- Change: Added Rust launcher `native` mode bootstrap, made it the default Rust launcher mode, and expanded CI Rust smoke matrix coverage to include `native`. +- APIs covered: full `/test/volume_server/http` and `/test/volume_server/grpc` packages re-validated in `VOLUME_SERVER_RUST_MODE=native`; default Rust launcher path (`VOLUME_SERVER_IMPL=rust`) smoke-validated for HTTP and gRPC control tests. +- Profiles covered: existing HTTP/gRPC matrix in native launcher mode; default-mode smoke checks on P1 control flows. +- Gaps introduced/remaining: native Rust API/storage/RPC handlers still pending; current `native` mode remains a delegation bootstrap while parity replacement proceeds. +- Commit: `70ddbee37`, `61befd10f`, `2e65966c0` diff --git a/test/volume_server/README.md b/test/volume_server/README.md index a62fadb84..9a681b58f 100644 --- a/test/volume_server/README.md +++ b/test/volume_server/README.md @@ -17,7 +17,7 @@ If a `weed` binary is not found, the harness will build one automatically. - `WEED_BINARY`: explicit path to the `weed` executable (disables auto-build). - `VOLUME_SERVER_IMPL`: select volume-server implementation (`go` default, `rust` for Rust launcher mode). - `VOLUME_SERVER_BINARY`: explicit path to the volume-server executable (overrides `VOLUME_SERVER_IMPL`). -- `VOLUME_SERVER_RUST_MODE`: Rust launcher mode (`exec` default, `proxy` for Rust front proxy + Go backend). +- `VOLUME_SERVER_RUST_MODE`: Rust launcher mode (`native` default, `exec` for direct Go delegation, `proxy` for Rust front proxy + Go backend). - `VOLUME_SERVER_RUST_REBUILD=1`: force rebuild of Rust volume-server binary in Rust mode. - `VOLUME_SERVER_IT_KEEP_LOGS=1`: keep temporary test directories and process logs.