Some checks failed
go: build dev binaries / cleanup (push) Successful in 4s
Codespell / Check for spelling errors (push) Failing after 3s
docker: build dev containers / build-rust-binaries (amd64, x86_64-unknown-linux-musl) (push) Failing after 3s
docker: build dev containers / build-dev-containers (push) Has been skipped
docker: build dev containers / build-rust-binaries (arm64, true, aarch64-unknown-linux-musl) (push) Failing after 3s
End to End / FUSE Mount (push) Failing after 2s
EC Integration Tests / EC Integration Tests (push) Failing after 30s
FUSE DLM Integration Tests / FUSE DLM Integration Tests (push) Failing after 3s
FUSE Volume Server Failover Tests / FUSE Volume Server Failover (push) Failing after 3s
FUSE Integration Tests / FUSE Integration Testing (push) Failing after 2s
FUSE P2P Peer Chunk Sharing Integration Tests / FUSE P2P Peer Chunk Sharing (push) Failing after 3s
go: build binary / Go Vet (push) Failing after 2s
go: build binary / Go Vet 32-bit (push) Failing after 3s
go: build binary / Build (push) Failing after 4s
go: build binary / Build cross-platform (freebsd/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (darwin/arm64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/arm64) (push) Failing after 3s
go: build binary / Test (push) Failing after 2s
go: build binary / Test 32-bit (push) Failing after 3s
helm: lint and test charts / lint-test (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (11) (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (17) (push) Failing after 3s
go: build dev binaries / build_dev_linux_windows (amd64, linux) (push) Failing after 2s
go: build dev binaries / build_dev_linux_windows (amd64, windows) (push) Failing after 3s
go: build dev binaries / build_dev_darwin (amd64, darwin) (push) Has been skipped
go: build dev binaries / build_dev_darwin (arm64, darwin) (push) Has been skipped
Java Client Unit Tests / Java Unit Tests (11) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (17) (push) Failing after 2s
Java Client Unit Tests / Java Unit Tests (21) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (8) (push) Failing after 3s
Kafka Quick Test (Load Test with Schema Registry) / Kafka Client Load Test (Quick) (push) Failing after 3s
Kafka Gateway Tests / Kafka Unit Tests (unit-tests-1) (push) Failing after 11s
Kafka Gateway Tests / Kafka Integration Tests (Critical) (integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka End-to-End Tests (with SMQ) (e2e-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Consumer Group Tests (Highly Isolated) (consumer-group-1) (push) Failing after 2s
Kafka Gateway Tests / Kafka Client Compatibility (with SMQ) (client-compat-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka SMQ Integration Tests (Full Stack) (smq-integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Protocol Tests (Isolated) (protocol-1) (push) Failing after 3s
KMS Tests / KMS Provider Integration Tests (push) Failing after 2s
KMS Tests / S3 KMS End-to-End Tests (push) Failing after 3s
Master Cold Start Tests / Master Cold Start Tests (push) Failing after 4s
Metadata Subscribe Integration Tests / Metadata Subscribe Integration Tests (push) Failing after 3s
Multi-Master Tests / Multi-Master Failover Tests (push) Failing after 3s
Performance / CPU and Heap Profile (push) Failing after 2s
Performance / S3 Read/Write Benchmark (rust volume) (push) Failing after 3s
pjdfstest POSIX Compliance / pjdfstest (push) Failing after 2s
Plugin Worker Integration Tests / Plugin Worker: erasure_coding (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: vacuum (push) Failing after 3s
Rust Volume Server Tests / Rust Integration Tests (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 1) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 1) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 3) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Distributed Tests (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Performance Tests (push) Failing after 3s
Performance / Throughput Benchmark (go volume) (push) Failing after 3s
Performance / Throughput Benchmark (rust volume) (push) Failing after 2s
Performance / S3 Read/Write Benchmark (go volume) (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: volume_balance (push) Failing after 3s
PostgreSQL Gateway Tests / PostgreSQL Basic Tests (push) Failing after 3s
Rust Volume Server Tests / Rust Unit Tests (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 3) (push) Failing after 3s
Rust Plugin Worker Tests / Rust Plugin Worker Build and Unit Tests (push) Failing after 3s
rust: build dev volume server binaries / cleanup (push) Successful in 3s
S3 ETag and ACL Tests / S3 ETag + ACL Integration Tests (push) Failing after 3s
S3 IAM Integration Tests / IAM Unit Tests (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (advanced) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (basic) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (group) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (policy-enforcement) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (sts) (push) Failing after 4s
S3 Keycloak Integration Tests / S3 Keycloak Integration Tests (push) Failing after 3s
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.11) (push) Failing after 3s
S3 PyArrow Parquet Tests / Go Unit Tests (Implicit Directory) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.12) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-amd64, x86_64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-arm64, aarch64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-linux (linux-amd64, x86_64-unknown-linux-gnu) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.9) (push) Has been cancelled
S3 Proxy Signature Tests / S3 Proxy Signature Verification Tests (push) Has been cancelled
S3 SDK V2 Route Disambiguation Tests / S3 SDK V2 Routing Tests (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (quick) (push) Has been cancelled
S3 SSE Tests / S3 SSE Compatibility Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Metadata Persistence Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Copy Operations Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Multipart Upload Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Performance Test (push) Has been cancelled
S3 SSE Tests / S3 Volume Encryption Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (comprehensive) (push) Has been cancelled
Spark Integration Tests / Spark Integration Tests (push) Failing after 2s
Telemetry Integration Tests / telemetry-integration-test (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 1) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 1) (push) Failing after 3s
Ceph S3 tests / Basic S3 tests (KV store) (push) Has been cancelled
Ceph S3 tests / S3 Versioning & Object Lock tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Unit Tests (push) Failing after 3s
Ceph S3 tests / S3 CORS tests (push) Has been cancelled
Ceph S3 tests / SeaweedFS Custom S3 Copy tests (push) Has been cancelled
Ceph S3 tests / Basic S3 tests (SQL store) (push) Has been cancelled
test s3 over https using aws-cli / awscli-tests (push) Has been cancelled
TLS Rotation Integration Tests / TLS Rotation Integration Tests (push) Has been cancelled
Vacuum Integration Tests / Vacuum Integration Tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Variables Integration Tests (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (advanced-policy) (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (basic-policy) (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (contextual-policy) (push) Failing after 4s
S3 Policy Integration Tests / Trusted Proxy Detection Tests (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Shell Integration Tests (push) Failing after 3s
Samba on FUSE Integration / samba-integration (push) Failing after 2s
SFTP Integration Tests / SFTP Integration Testing (push) Failing after 3s
terraform: validate and test modules / fmt, validate, plan-level tests (push) Failing after 3s
terraform: validate and test modules / local cluster smoke test (real weed) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 3) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 2) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 2) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 3) (push) Failing after 5s
mount: windows conformance / WinFsp conformance (push) Has been cancelled
mount: windows / Mount on Windows (push) Has been cancelled
12 KiB
12 KiB
Rust Volume Server — Missing Features Audit
Comprehensive line-by-line comparison of Go vs Rust volume server. Generated 2026-03-07 from 4 parallel audits covering HTTP, gRPC, storage, and infrastructure.
Executive Summary
| Area | Total Features | Implemented | Partial | Missing |
|---|---|---|---|---|
| gRPC RPCs | 48 | 43 (90%) | 2 (4%) | 3 (6%) |
| HTTP Handlers | 31 | 12 (39%) | 10 (32%) | 9 (29%) |
| Storage Layer | 22 | 6 (27%) | 7 (32%) | 9 (41%) |
| Infrastructure | 14 | 5 (36%) | 4 (29%) | 5 (36%) |
Priority 1 — Critical for Production
P1.1 Streaming / Meta-Only Reads
- Go:
ReadNeedleMeta(),ReadNeedleData(),ReadPagedData()— reads only metadata or pages of large files - Go:
streamWriteResponseContent()streams needle data in chunks - Go:
AttemptMetaOnly/MustMetaOnlyflags inReadOption - Rust: Reads entire needle into memory always
- Impact: OOM on large files; 8MB file = 8MB heap per request
- Files:
weed/storage/needle/needle_read.go,weed/server/volume_server_handlers_read.go - Effort: Medium
P1.2 Download Proxy/Redirect Fallback (ReadMode)
- Go:
ReadModeconfig: "local" | "proxy" | "redirect" - Go:
tryProxyToReplica()probes replicas,proxyReqToTargetServer()streams response - Rust: Always returns 404 for non-local volumes
- Impact: Clients must handle volume placement themselves; breaks transparent replication
- Files:
weed/server/volume_server_handlers_read.go:138-250 - Effort: Medium
P1.3 TLS/HTTPS Support
- Go:
LoadServerTLS(),LoadClientTLS(), cert/key loading from security.toml - Go: Applied to both HTTP and gRPC servers
- Rust: No TLS at all — plain TCP only
- Impact: Cannot deploy in secure clusters
- Files:
weed/security/tls.go,weed/command/volume.go - Effort: Medium (rustls + tokio-rustls already in Cargo.toml)
P1.4 VolumeMarkReadonly/Writable Master Notification
- Go:
notifyMasterVolumeReadonly()updates master with readonly state - Rust: Only sets local in-memory flag
- Impact: Master keeps directing writes to readonly volume
- Files:
weed/server/volume_grpc_admin.go - Effort: Low
P1.5 Compaction/Maintenance Throttling
- Go:
WriteThrottlerwithMaybeSlowdown()for MB/s rate limiting - Rust: Flags parsed but no throttle implementation
- Impact: Compaction/copy operations can saturate disk IO
- Files:
weed/util/throttler.go - Effort: Low
P1.6 File Size Limit Enforcement
- Go:
fileSizeLimitByteschecked on upload, returns 400 - Rust: No enforcement — accepts any size
- Impact: Can write files larger than volume size limit
- Files:
weed/server/volume_server_handlers_write.go - Effort: Low
Priority 2 — Important for Compatibility
P2.1 ts Query Param (Custom Timestamps)
- Go: Upload and delete accept
tsquery param for custom Last-Modified time - Rust: Always uses current time
- Impact: Replication timestamp fidelity; sync from external sources
- Files:
weed/server/volume_server_handlers_write.go,volume_server_handlers_admin.go - Effort: Low
P2.2 Multipart Form Upload Parsing
- Go:
needle.CreateNeedleFromRequest()parses multipart forms, extracts MIME type, custom headers/pairs - Rust: Reads raw body bytes only — no multipart form parsing for metadata
- Impact: MIME type not stored; custom needle pairs not supported
- Files:
weed/storage/needle/needle.go:CreateNeedleFromRequest - Effort: Medium
P2.3 JPEG Orientation Auto-Fix
- Go:
images.FixJpgOrientation()on upload when enabled - Rust: Not implemented (flag exists but unused)
- Impact: Mobile uploads may display rotated
- Files:
weed/images/orientation.go - Effort: Low (exif crate)
P2.4 TTL Expiration Enforcement
- Go: Checks
HasTtl()+AppendAtNsagainst current time on read path - Rust: TTL struct exists but no expiration checking
- Impact: Expired needles still served
- Files:
weed/storage/needle/volume_ttl.go,weed/storage/volume_read.go - Effort: Low
P2.5 Health Check — Master Heartbeat Status
- Go: Returns 503 if not heartbeating (can't reach master)
- Rust: Only checks
is_stoppingflag - Impact: Load balancers won't detect disconnected volume servers
- Files:
weed/server/volume_server.go - Effort: Low
P2.6 Stats Endpoints
- Go:
/stats/counter,/stats/memory,/stats/disk(whitelist-guarded) - Rust: Not implemented
- Impact: No operational visibility
- Files:
weed/server/volume_server.go - Effort: Low
P2.7 Webp Image Support
- Go:
.webpincluded in resize-eligible extensions - Rust: Only
.png,.jpg,.jpeg,.gif - Impact: Webp images can't be resized on read
- Files:
weed/server/volume_server_handlers_read.go - Effort: Low (add webp feature to image crate)
P2.8 preStopSeconds Graceful Drain
- Go: Stops heartbeat, waits N seconds, then shuts down servers
- Rust: Immediate shutdown on signal
- Impact: In-flight requests dropped; Kubernetes readiness race
- Files:
weed/command/volume.go - Effort: Low
P2.9 S3 Response Passthrough Headers
- Go:
response-content-encoding,response-expires,response-content-languagequery params - Rust: Only handles
response-content-type,response-cache-control,dl - Impact: S3-compatible GET requests missing some override headers
- Files:
weed/server/volume_server_handlers_read.go - Effort: Low
Priority 3 — Storage Layer Gaps
P3.1 LevelDB Needle Maps
- Go: 5 needle map variants: memory, LevelDB, LevelDB-medium, LevelDB-large, sorted-file
- Rust: Memory-only needle map
- Impact: Large volumes (millions of needles) require too much RAM
- Files:
weed/storage/needle_map_leveldb.go - Effort: High (need LevelDB binding or alternative)
P3.2 Async Request Processing
- Go:
asyncRequestsChanwith 128-entry queue, worker goroutine for batched writes - Rust: All writes synchronous
- Impact: Write throughput limited by fsync latency
- Files:
weed/storage/needle/async_request.go - Effort: Medium
P3.3 Volume Scrubbing (Data Integrity)
- Go:
ScrubIndex(),scrubVolumeData()— full data + index verification - Rust: Stub only in gRPC (returns OK without actual scrubbing)
- Impact: No way to verify data integrity
- Files:
weed/storage/volume_checking.go,weed/storage/idx/check.go - Effort: Medium
P3.4 Volume Backup / Sync
- Go: Streaming backup, binary search for last modification, index generation scanner
- Rust: Not implemented
- Impact: No backup/restore capability
- Files:
weed/storage/volume_backup.go - Effort: Medium
P3.5 Volume Info (.vif) Persistence
- Go:
.viffiles store tier/remote metadata, readonly state persists across restarts - Rust: No
.vifsupport; readonly is in-memory only - Impact: Readonly state lost on restart; no tier metadata
- Files:
weed/storage/volume_info/volume_info.go - Effort: Low
P3.6 Disk Location Features
- Go: Directory UUID tracking, disk space monitoring, min-free-space enforcement, tag-based grouping
- Rust: Basic directory only
- Impact: No disk-full protection
- Files:
weed/storage/disk_location.go - Effort: Medium
P3.7 Compact Map (Memory-Efficient Needle Map)
- Go:
CompactMapwith overflow handling for memory optimization - Rust: Uses standard HashMap
- Impact: Higher memory usage for index
- Files:
weed/storage/needle_map/compact_map.go - Effort: Medium
Priority 4 — Nice to Have
P4.1 gRPC: VolumeTierMoveDatToRemote / FromRemote
- Go: Full streaming implementation for tiering volumes to/from S3
- Rust: Stub returning error
- Files:
weed/server/volume_grpc_tier_upload.go,volume_grpc_tier_download.go - Effort: High
P4.2 gRPC: Query (S3 Select)
- Go: JSON/CSV query over needle data (S3 Select compatible)
- Rust: Stub returning error
- Files:
weed/server/volume_grpc_query.go - Effort: High
P4.3 FetchAndWriteNeedle — Already Implemented
- Note: The gRPC audit incorrectly flagged this as missing. It was implemented in a prior session with full S3 remote storage support.
P4.4 JSON Pretty Print + JSONP
- Go:
?prettyquery param for indented JSON;?callback=fnfor JSONP - Rust: Neither supported
- Effort: Low
P4.5 Request ID Generation
- Go: Generates UUID if
x-amz-request-idheader missing, propagates to gRPC context - Rust: Only echoes existing header
- Effort: Low
P4.6 UI Status Page
- Go: Full HTML template with volumes, disks, stats, uptime
- Rust: Stub HTML
- Effort: Medium
P4.7 Advanced Prometheus Metrics
- Go: InFlightRequestsGauge, ConcurrentUploadLimit/DownloadLimit gauges, metrics push gateway
- Rust: Basic request counter and histogram only
- Effort: Low
P4.8 Profiling (pprof)
- Go: CPU/memory profiling, /debug/pprof endpoints
- Rust: Flags parsed but not wired
- Effort: Medium (tokio-console or pprof-rs)
P4.9 EC Distribution / Rebalancing
- Go: 17 files for EC operations including placement strategies, recovery, scrubbing
- Rust: 6 files with basic encoder/decoder
- Effort: High
P4.10 Cookie Mismatch Status Code
- Go: Returns 406 Not Acceptable
- Rust: Returns 400 Bad Request
- Effort: Trivial
Implementation Order Recommendation
Sprint 1 — Quick Wins (Low effort, high impact) ✅ DONE
- ✅ P1.4 VolumeMarkReadonly master notification — triggers immediate heartbeat
- ✅ P1.5 Compaction throttling —
maybe_throttle_compaction()method added - ✅ P1.6 File size limit enforcement — checks
file_size_limit_byteson upload - ✅ P2.1
tsquery param — custom timestamps for upload and delete - ✅ P2.4 TTL expiration check — was already implemented
- ✅ P2.5 Health check heartbeat status — returns 503 if not heartbeating
- ✅ P2.8 preStopSeconds — graceful drain delay before shutdown
- ✅ P2.9 S3 passthrough headers — content-encoding, expires, content-language, content-disposition
- ✅ P3.5 .vif persistence — readonly state persists across restarts
- ✅ P2.7 Webp support — added to image resize-eligible extensions
P4.10 Cookie 406— Go actually uses 404 for HTTP cookie mismatch (406 is gRPC batch delete only)
Sprint 2 — Core Read Path (Medium effort) — Partially Done
- P1.1 Streaming / meta-only reads — TODO (medium effort, no test coverage yet)
- ✅ P1.2 ReadMode proxy/redirect — was already implemented and tested
- ✅ P2.2 Multipart form parsing — MIME type extraction from Content-Type header
- P2.3 JPEG orientation fix — TODO (low effort, needs exif crate)
- ✅ P2.6 Stats endpoints — /stats/counter, /stats/memory, /stats/disk
- ✅ P2.7 Webp support — done in Sprint 1
- ✅ P4.4 JSON pretty print + JSONP — ?pretty=y and ?callback=fn
- ✅ P4.5 Request ID generation — generates UUID if x-amz-request-id missing
- ✅ P4.7 Advanced Prometheus metrics — INFLIGHT_REQUESTS gauge, VOLUME_FILE_COUNT gauge
Sprint 3 — Infrastructure (Medium effort) — Partially Done
- ✅ P1.3 TLS/HTTPS — rustls + tokio-rustls for HTTP, tonic ServerTlsConfig for gRPC
- P3.2 Async request processing — TODO (medium effort)
- ✅ P3.3 Volume scrubbing — CRC checksum verification of all needles
- ✅ P3.6 Disk location features — MinFreeSpace enforcement, background disk monitor
Sprint 4 — Storage Advanced (High effort) — Deferred
No integration test coverage for these items. All existing tests pass.
- P3.1 LevelDB needle maps — needed only for volumes with millions of needles
- P3.4 Volume backup/sync — streaming backup, binary search
- P3.7 Compact map — memory optimization for needle index
- P4.1 VolumeTierMoveDat — full S3 tiering (currently error stub)
- P4.9 EC distribution — advanced EC placement/rebalancing
Sprint 5 — Polish — Deferred
No integration test coverage for these items.
- P4.2 Query (S3 Select) — JSON/CSV query over needle data
- ✅ P4.4 JSON pretty/JSONP — done in Sprint 2
- ✅ P4.5 Request ID generation — done in Sprint 2
- P4.6 UI status page — HTML template with volume/disk/stats info
- ✅ P4.7 Advanced metrics — done in Sprint 2
- P4.8 Profiling — pprof-rs or tokio-console