Range + If-Range support, end-to-end
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 35/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- go
- 領域
- api, backend, infrastructure
調査の方向性
internal/strategy/apiv1.go と internal/cache/api.go から始め、次に s3_parallel_get.go と disk、memory、tiered、remote バックエンドを調べて、既存の読み取りパスを理解します。Range と If-Range の処理について、client/ と remote の連携を追跡します。各バックエンドが 206 と Content-Range を付けて正しい範囲のバイトを返し、古い If-Range には 200 を返し、満たせない範囲には 416 を返せば完了です。
索引モデルが issue の本文から書いたものです。
説明
Follow-up from the ETag support assessment (label: etag-range-followup).
The strong content-hash ETag is already a suitable, tier-stable If-Range validator (a range continuation served from a different tier/pod validates correctly; a changed object correctly forces a full 200). The validator value is fine; the surrounding machinery is entirely missing.
Current gaps
apiv1.getObject(internal/strategy/apiv1.go) doesio.Copy(w, cr)— always200, never honoursRange, never setsAccept-Ranges, never returns206/Content-Range/416.- The
cache.Cacheinterface (internal/cache/api.go) only exposes a whole-objectOpenreturning anio.ReadCloser; there is no partial-read / seek capability. Only the disk backend reader happens to be seekable. checkConditionalsdoes not evaluateIf-Range.
Work
- Add a partial-read capability to the cache interface — either a range-aware open (offset + length) or a documented seekable-reader contract — and implement it for
disk,memory,s3(S3 already does parallel range GETs internally, sees3_parallel_get.go),tiered, andremote. - Implement server-side range handling in
apiv1.getObject: parseRange, emitAccept-Ranges: bytes, return206withContent-Rangefor satisfiable ranges and416for unsatisfiable ones. - Evaluate
If-Range(against the strong ETag; fall back to full200when the validator does not match) before serving a partial response. - Plumb
Range/If-Rangethrough the client (client/) and remote backend as needed so a tiered remote tier can serve ranges.
Acceptance
Ranged GET against each backend returns the correct bytes with 206/Content-Range; If-Range with a stale ETag returns the full object with 200; unsatisfiable ranges return 416.
- 主要言語
- Go
- スター
- 41
- フォーク
- 14
- 平均マージ
- 19時間 28分
- マージ済み PR(30日)
- 3
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
block/cachew のほかの issue
-
etag-range-followup
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
-
難易度 5/5 1週間以上 初心者へのやさしさ 38/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 56/100
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 90/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
NVIDIA/k8s-device-plugin#2076 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
メンテナーはふだん 1 日以内に返信
-
agentic-workflows
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
area/release kind/bug
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
kubernetes-sigs/kueue#16455 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信