feat(inkless): Support ListOffsets for all cases of diskless partitions#584
feat(inkless): Support ListOffsets for all cases of diskless partitions#584viktorsomogyi merged 5 commits intomainfrom
Conversation
0583631 to
6dc6e89
Compare
There was a problem hiding this comment.
Pull request overview
This PR updates ReplicaManager.fetchOffset to support more ListOffsets timestamp cases for inkless/diskless (“migrated/hybrid”) partitions, and adds unit tests covering the intended routing between classic (UnifiedLog / tiered) and diskless paths.
Changes:
- Extend
fetchOffsetrouting logic for migrated/hybrid diskless partitions across multipleListOffsetstimestamp modes (earliest, earliest-local, latest-tiered, max/latest, and specific timestamps). - Add
disklessFetchOffsetWithClassicFallbackto fall back to classic when diskless returns a genuine empty result (including chaining tiered-storage async lookups). - Add/extend
ReplicaManagerTestcoverage for the above routing and fallback behaviors.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| core/src/main/scala/kafka/server/ReplicaManager.scala | Implements expanded ListOffsets routing for migrated/hybrid diskless partitions and adds a diskless→classic fallback wrapper. |
| core/src/test/scala/unit/kafka/server/ReplicaManagerTest.scala | Adds unit tests validating classic vs diskless routing and the new fallback behavior (including tiered async chaining). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
3889e82 to
b03fb79
Compare
b03fb79 to
78a30c7
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
78a30c7 to
b41b4b4
Compare
b41b4b4 to
b9fa5c9
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
b9fa5c9 to
2924261
Compare
jeqo
left a comment
There was a problem hiding this comment.
Looks good. A couple of improvement suggestions
Introduce DisklessFetchOffsetRouter to dispatch ListOffsets queries
between the classic UnifiedLog path and the diskless control plane,
covering all four diskless-managed partition states:
1. Pure diskless: answer from the diskless control plane.
2. Hybrid (classic data still present alongside diskless): route by
requested timestamp, with classic↔diskless fallback on no-match
or empty results.
3. Migration pending: classic path only
4. Follower ListOffsets on a migrated partition: classic path only.
2924261 to
d9a45bb
Compare
…ns (#584) Introduce DisklessFetchOffsetRouter to dispatch ListOffsets queries between the classic UnifiedLog path and the diskless control plane, covering all four diskless-managed partition states: 1. Pure diskless: answer from the diskless control plane. 2. Hybrid (classic data still present alongside diskless): route by requested timestamp, with classic↔diskless fallback on no-match or empty results. 3. Migration pending: classic path only 4. Follower ListOffsets on a migrated partition: classic path only.
Introduce DisklessFetchOffsetRouter to dispatch ListOffsets queries between the classic UnifiedLog path and the diskless control plane, covering all four diskless-managed partition states: