Rename the Rust volume server binary to weed-volume for consistency
with the Go weed binary naming. The library crate name remains
seaweed_volume to avoid changing all internal imports.
The Rust volume server uses 5-byte offsets by default (17-byte idx
entries). Go tests that parse idx files need -tags 5BytesOffset so
NeedleMapEntrySize matches (17 instead of 16).
The go.mod was bumped to go 1.25.0 on master, breaking CI workflows
that hardcoded GO_VERSION: '1.24'. Switch to go-version-file: 'go.mod'
so the Go version is always derived from go.mod automatically.
- Add StreamingBody (http_body::Body) for chunked reads of files >1MB,
avoiding OOM by reading 64KB at a time via spawn_blocking + pread
- Add NeedleStreamInfo and meta-only read path to avoid loading full
needle body when streaming
- Add RustMultiVolumeCluster test framework and MultiCluster interface
so TestVolumeMoveHandlesInFlightWrites works with Rust volume servers
- Remove TestVolumeMoveHandlesInFlightWrites from CI skip list (now passes)
- All 117 Go integration tests + 8 Rust integration tests pass (100%)
Add rust-volume-go-tests job that runs the full Go volume server test
matrix (grpc + http, 3 shards each) with VOLUME_SERVER_IMPL=rust.
Also fix concurrency key and add proto path triggers per review.
- cluster_rust.go: test framework to start Go master + Rust volume server
- test/volume_server/rust/: 8 integration tests (healthz, status, ping,
write/read/delete round-trip, volume lifecycle, get/set state,
server status, metrics endpoint)
- rust-volume-server-tests.yml: CI workflow with Rust unit tests and
Go+Rust integration tests