Chris Lu
ff83b808c8
Match Go CopyFile: sync EC volume journal to disk before copying
Go calls ecVolume.Sync() before copying EC volume files to ensure the
.ecj journal is flushed to disk. Added sync_to_disk() to EcVolume and
call it in the CopyFile EC branch.
4 days ago
Chris Lu
c5e7cc94fe
Match Go ReceiveFile: prefer HardDrive location for EC and use response-level write errors
Two fixes: (1) Go prefers HardDriveType disk location for EC volumes,
falling back to first location. Returns "no storage location available"
when no locations exist. (2) Write failures are now response-level
errors (in response body) instead of gRPC status errors, matching Go.
4 days ago
Chris Lu
ecf2f2c35f
Match Go DeleteVolumeNeedle: check noWriteOrDelete before allowing delete
Go checks v.noWriteOrDelete before proceeding with needle deletion,
returning "volume is read only" if true. Rust was skipping this check.
4 days ago
Chris Lu
119192ca75
Match Go VolumeCopy: reject when no suitable disk location exists
Go returns ErrVolumeNoSpaceLeft when no location matches the disk type
and has sufficient space. Rust had an unsafe fallback that silently
picked the first location regardless of type or available space.
4 days ago
Chris Lu
8063788e13
Match Go Query: quote JSON keys in output records
Go's ToJson produces valid JSON with quoted keys like {"name":"Alice"}.
Rust was producing invalid JSON with unquoted keys like {name:"Alice"}.
4 days ago
Chris Lu
f086e4b517
Match Go ProcessRangeRequest: return full content for empty/oversized ranges
Go returns nil from ProcessRangeRequest when ranges are empty or total
range size exceeds content length, causing the caller to serve the full
content as a normal 200 response. Rust was returning an empty 200 body.
4 days ago
Chris Lu
40993383b0
Match Go VolumeDelete: propagate only_empty to delete_volume for defense in depth
The gRPC VolumeDelete handler had a pre-check for only_empty but then
passed false to store.delete_volume(), bypassing the store-level check.
Go passes req.OnlyEmpty directly to DeleteVolume. Now Rust does the same
for defense in depth against TOCTOU races (though the store write lock
makes this unlikely).
4 days ago
Chris Lu
ef3acb0b0d
Match Go SaveVolumeInfo: check writability and propagate errors in save_vif
4 days ago
Chris Lu
fb03891cc6
Fix compilation: set_read_only_persist and set_writable return ()
These methods fire-and-forget save_vif internally, so gRPC callers
should not try to chain .map_err() on the unit return type.
4 days ago
Chris Lu
8b6a4a2528
Match Go Destroy: add only_empty parameter to reject non-empty volume deletion
4 days ago
Chris Lu
58021e6279
Match Go privateStoreHandler: use proper JSON error for unsupported methods
4 days ago
Chris Lu
b5d28b6a23
Match Go chunk manifest: add Accept-Ranges, Content-Disposition, filename fallback, MIME detection
4 days ago
Chris Lu
279fc77730
Match Go ParsePath: support _delta suffix on file IDs for sub-file addressing
4 days ago
Chris Lu
10f99fdfd2
Match Go VolumeEcShardsCopy: append to .ecj file instead of truncating
4 days ago
Chris Lu
1919a2468d
add docs
4 days ago
Chris Lu
8ed77f83f0
Match Go ReceiveFile: return protocol errors in response body, not gRPC status
4 days ago
Chris Lu
57232ad786
Fix raw body POST: only parse multipart when Content-Type contains form-data
4 days ago
Chris Lu
84f2004f04
Fix EC locate_needle: use get_actual_size for full needle size
4 days ago
Chris Lu
b074239112
Match Go TTL: preserve original unit when count fits in byte
4 days ago
Chris Lu
51c5be76ec
Make 5bytes the default feature for idx entry compatibility
4 days ago
Chris Lu
b2cb8b8bcb
deps: enable webp support
4 days ago
Chris Lu
05447e4eef
handlers: align upload parsing with Go
4 days ago
Chris Lu
6e5610cfe5
handlers: align range parsing and responses with Go
4 days ago
Chris Lu
4017e8e4e9
handlers: use meta-only reads for HEAD
4 days ago
Chris Lu
11c595b6c6
Match Go WriteNeedleBlob: dedup check before writing during replication
4 days ago
Chris Lu
c285e596c1
Match Go check_volume_data_integrity: verify all 10 entries, detect trailing corruption
4 days ago
Chris Lu
7bf2595ea8
Match Go read_super_block: apply replication override from .vif
4 days ago
Chris Lu
5405179b2d
Match Go VolumeTailSender: send needle_header on every chunk
4 days ago
Chris Lu
8a5b481efb
Match Go VolumeEcShardsCopy: set ignore_source_file_not_found for .vif
4 days ago
Chris Lu
97419af55a
Match Go ScrubVolume: count total_files even on scrub error
4 days ago
Chris Lu
497c98d861
Match Go ScrubEcVolume: accumulate total_files from EC shards
4 days ago
Chris Lu
d2681c5e07
Match Go crop params: default x1/y1 to 0 when not provided
4 days ago
Chris Lu
7109dffcee
Match Go download throttle: return JSON error instead of plain text
4 days ago
Chris Lu
8fa6f7642b
Match Go error behavior for truncated needle data in read_body_v2
Go's readNeedleDataVersion2 returns "index out of range %d" errors
(indices 1-7) when needle body or metadata fields are truncated.
Rust was silently tolerating truncation and returning Ok. Now returns
NeedleError::IndexOutOfRange with the matching index for each field.
4 days ago
Chris Lu
8434429f25
Match Go TTL Display: return empty string when unit is Empty
Go checks `t.Unit == Empty` separately and returns "" for TTLs
with nonzero count but Empty unit. Rust only checked is_empty()
(count==0 && unit==0), so count>0 with unit=0 would format as
"5 " instead of "".
4 days ago
Chris Lu
9e386184d4
Match Go VolumeUnmount: idempotent success when volume not found
4 days ago
Chris Lu
58156cabea
Match Go write_needle_blob monotonic appendAtNs via get_append_at_ns
4 days ago
Chris Lu
132c963097
Match Go throttle boundary: use <= instead of <, fix pretty JSON to 1-space
4 days ago
Chris Lu
e78bd10793
Emit EC heartbeat deltas on shard changes
4 days ago
Chris Lu
03de5c0813
Report remote storage info in heartbeats
4 days ago
Chris Lu
4fcbe1c6d4
Honor master preallocate in volume max
4 days ago
Chris Lu
139b06a01d
Match Go volume heartbeat pruning
4 days ago
Chris Lu
7f0b8e7b03
Delete expired EC volumes during heartbeat
4 days ago
Chris Lu
9e9b73f571
Match Go duplicate UUID heartbeat retries
4 days ago
Chris Lu
c67fba4b9d
Match Go heartbeat metric accounting
4 days ago
Chris Lu
b3cf5ee896
Match Go gRPC: EC multi-disk placement, per-shard mount/unmount, no auto-mount on reconstruct, streaming ReadAll/EcShardRead, ReceiveFile cleanup, version check, proxy streaming, redirect Content-Type
4 days ago
Chris Lu
e861f14aa4
Add CheckVolumeDataIntegrity on volume load matching Go
4 days ago
Chris Lu
886dac6fcb
Add per-shard EC mount/unmount, location predicate search, idx directory for EC
4 days ago
Chris Lu
11b9ac8efc
Add EC volume read and delete support in HTTP handlers
4 days ago
Chris Lu
7790843f5b
Match Go gRPC: tail header first-chunk-only, EC cleanup on failure, copy append mode, ecx rebuild, compact cancellation
4 days ago