seaweed-volume/MISSING_FEATURES.md
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.
| 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%) |
ReadNeedleMeta(), ReadNeedleData(), ReadPagedData() — reads only metadata or pages of large filesstreamWriteResponseContent() streams needle data in chunksAttemptMetaOnly / MustMetaOnly flags in ReadOptionweed/storage/needle/needle_read.go, weed/server/volume_server_handlers_read.goReadMode config: "local" | "proxy" | "redirect"tryProxyToReplica() probes replicas, proxyReqToTargetServer() streams responseweed/server/volume_server_handlers_read.go:138-250LoadServerTLS(), LoadClientTLS(), cert/key loading from security.tomlweed/security/tls.go, weed/command/volume.gonotifyMasterVolumeReadonly() updates master with readonly stateweed/server/volume_grpc_admin.goWriteThrottler with MaybeSlowdown() for MB/s rate limitingweed/util/throttler.gofileSizeLimitBytes checked on upload, returns 400weed/server/volume_server_handlers_write.gots Query Param (Custom Timestamps)ts query param for custom Last-Modified timeweed/server/volume_server_handlers_write.go, volume_server_handlers_admin.goneedle.CreateNeedleFromRequest() parses multipart forms, extracts MIME type, custom headers/pairsweed/storage/needle/needle.go:CreateNeedleFromRequestimages.FixJpgOrientation() on upload when enabledweed/images/orientation.goHasTtl() + AppendAtNs against current time on read pathweed/storage/needle/volume_ttl.go, weed/storage/volume_read.gois_stopping flagweed/server/volume_server.go/stats/counter, /stats/memory, /stats/disk (whitelist-guarded)weed/server/volume_server.go.webp included in resize-eligible extensions.png, .jpg, .jpeg, .gifweed/server/volume_server_handlers_read.goweed/command/volume.goresponse-content-encoding, response-expires, response-content-language query paramsresponse-content-type, response-cache-control, dlweed/server/volume_server_handlers_read.goweed/storage/needle_map_leveldb.goasyncRequestsChan with 128-entry queue, worker goroutine for batched writesweed/storage/needle/async_request.goScrubIndex(), scrubVolumeData() — full data + index verificationweed/storage/volume_checking.go, weed/storage/idx/check.goweed/storage/volume_backup.go.vif files store tier/remote metadata, readonly state persists across restarts.vif support; readonly is in-memory onlyweed/storage/volume_info/volume_info.goweed/storage/disk_location.goCompactMap with overflow handling for memory optimizationweed/storage/needle_map/compact_map.goweed/server/volume_grpc_tier_upload.go, volume_grpc_tier_download.goweed/server/volume_grpc_query.go?pretty query param for indented JSON; ?callback=fn for JSONPx-amz-request-id header missing, propagates to gRPC contextmaybe_throttle_compaction() method addedfile_size_limit_bytes on uploadts query param — custom timestamps for upload and deleteNo integration test coverage for these items. All existing tests pass.
No integration test coverage for these items.