seaweed-volume/README.md
A drop-in replacement for the SeaweedFS Go volume server, rewritten in Rust. It uses binary-compatible storage formats (.dat, .idx, .vif) and speaks the same HTTP and gRPC protocols, so it works with an unmodified Go master server.
Requires Rust 1.75+ (2021 edition).
cd seaweed-volume
cargo build --release
The binary is produced at target/release/seaweed-volume.
Start a Go master server first, then point the Rust volume server at it:
# Minimal
seaweed-volume --port 8080 --master localhost:9333 --dir /data/vol1 --max 7
# Multiple data directories
seaweed-volume --port 8080 --master localhost:9333 \
--dir /mnt/ssd1,/mnt/ssd2 --max 100,100 --disk ssd
# With datacenter/rack topology
seaweed-volume --port 8080 --master localhost:9333 --dir /data/vol1 --max 7 \
--dataCenter dc1 --rack rack1
# With JWT authentication
seaweed-volume --port 8080 --master localhost:9333 --dir /data/vol1 --max 7 \
--securityFile /etc/seaweedfs/security.toml
# With TLS (configured in security.toml via [https.volume] and [grpc.volume] sections)
seaweed-volume --port 8080 --master localhost:9333 --dir /data/vol1 --max 7 \
--securityFile /etc/seaweedfs/security.toml
| Flag | Default | Description |
|---|---|---|
--port | 8080 | HTTP listen port |
--port.grpc | port+10000 | gRPC listen port |
--master | localhost:9333 | Comma-separated master server addresses |
--dir | /tmp | Comma-separated data directories |
--max | 8 | Max volumes per directory (comma-separated) |
--ip | auto-detect | Server IP / identifier |
--ip.bind | same as --ip | Bind address |
--dataCenter | Datacenter name | |
--rack | Rack name | |
--disk | Disk type tag: hdd, ssd, or custom | |
--index | memory | Needle map type: memory, leveldb, leveldbMedium, leveldbLarge |
--readMode | proxy | Non-local read mode: local, proxy, redirect |
--fileSizeLimitMB | 256 | Max upload file size |
--minFreeSpace | 1 (percent) | Min free disk space before marking volumes read-only |
--securityFile | Path to security.toml for JWT keys and TLS certs | |
--metricsPort | 0 (disabled) | Prometheus metrics endpoint port |
--whiteList | Comma-separated IPs with write permission | |
--preStopSeconds | 10 | Graceful drain period before shutdown |
--compactionMBps | 0 (unlimited) | Compaction I/O rate limit |
--pprof | false | Enable pprof HTTP handlers |
Set RUST_LOG=debug (or trace, info, warn) for log level control.
Set SEAWEED_WRITE_QUEUE=1 to enable batched async write processing.
.dat/.idx/.vif files as the Go server; seamless migration with no data conversion.security.toml with token source precedence (query > header > cookie), file_id claims validation, and separate read/write keys.security.toml.FetchAndWriteNeedle reads from any S3-compatible backend (AWS, MinIO, Wasabi, Backblaze, etc.) and writes locally. Supports VolumeTierMoveDatToRemote/FromRemote for tiered storage.rusty-leveldb), or redb (pure Rust disk-backed) needle maps.spawn_blocking to avoid blocking the async runtime.preStopSeconds drain period.cd seaweed-volume
cargo test
The Go test suite can target either the Go or Rust volume server via the VOLUME_SERVER_IMPL environment variable:
# Run all HTTP + gRPC integration tests against the Rust server
VOLUME_SERVER_IMPL=rust go test -v -count=1 -timeout 1200s \
./test/volume_server/grpc/... ./test/volume_server/http/...
# Run a single test
VOLUME_SERVER_IMPL=rust go test -v -count=1 -timeout 60s \
-run "TestName" ./test/volume_server/http/...
# Run S3 remote storage tests
VOLUME_SERVER_IMPL=rust go test -v -count=1 -timeout 180s \
-run "TestFetchAndWriteNeedle" ./test/volume_server/grpc/...
A load test harness is available at test/volume_server/loadtest/. See that directory for usage instructions and scenarios.
The server runs three listeners concurrently:
VolumeServer RPCs from the SeaweedFS protobuf definition.Key source modules:
| Path | Description |
|---|---|
src/main.rs | Entry point, server startup, signal handling |
src/config.rs | CLI parsing and configuration resolution |
src/server/volume_server.rs | HTTP router setup and middleware |
src/server/handlers.rs | HTTP request handlers (read, write, delete, status) |
src/server/grpc_server.rs | gRPC service implementation |
src/server/heartbeat.rs | Master heartbeat loop |
src/storage/volume.rs | Volume read/write/delete logic |
src/storage/needle.rs | Needle (file entry) serialization |
src/storage/store.rs | Multi-volume store management |
src/security.rs | JWT validation and IP whitelist guard |
src/remote_storage/ | S3 remote storage backend |
See DEV_PLAN.md for the full development history and feature checklist.