Skip to content

Add ranged reads - #13

Merged
herber merged 1 commit into
mainfrom
feat/add-range-reads
Oct 24, 2026
Merged

herber merged 1 commit into
mainfrom
feat/add-range-reads

Conversation

@herber

@herber herber commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

Note

Medium Risk
Touches core object GET behavior and all storage backends; incorrect range parsing or streaming could cause wrong bytes or extra bandwidth, though integration tests cover the main HTTP edge cases.

Overview
Adds partial object downloads via standard HTTP Range: bytes=... on GET /buckets/{bucket}/objects/{key}. Valid single-byte ranges return 206 with Content-Range and only the requested bytes are read from storage; unsatisfiable ranges return 416 with bytes */size. GET and HEAD now advertise Accept-Ranges: bytes. Multi-range, malformed, or non-bytes ranges—and any request that includes If-Range—fall back to a full-object 200 response per RFC 9110.

The change threads through ByteRange parsing/resolution, a new get_object_range on the backend trait (local seek/read, S3/GCS/Azure native range APIs), and ObjectStoreService::get_object_range. The TypeScript client gains getObjectRange (bounded, open-ended, and suffix ranges) with strict 206/Content-Range validation, docs, tests, and a 0.4.0 release bump.

Reviewed by Cursor Bugbot for commit 60d5ff3. Bugbot is set up for automated code reviews on this repo. Configure here.

@herber herber self-assigned this Oct 24, 2026
@herber
herber merged commit 60d5ff3 into main Oct 24, 2026
6 of 8 checks passed
@herber
herber deleted the feat/add-range-reads branch October 24, 2026 13:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant