new feature: expose core reader tuning options in Java bindings
- Dominant language
- Rust
- Stars
- 5.4k
- Forks
- 825
- Avg merge
- 1d 14m
- Merged PRs (30d)
- 127
Description
### Feature Description
Expose the existing core reader controls through the Java reader/stream construction API so applications can use native bounded concurrency and buffering without implementing their own Range scheduler.
### Problem and Solution
Java ReadOptions currently contains only offset and length. WriteOptions already exposes write tuning. This is a binding capability gap, not evidence that the core lacks concurrent reading.
The Java options work is already tracked broadly in #6226. This issue isolates reader construction/tuning as an actionable child of that migration and #8251. Preserve the distinction between per-read range options and reader execution options; adding every field to one options class is not a design requirement.
Acceptance criteria:
- Inventory and map supported core reader controls, including concurrency, chunking and applicable prefetch/gap behavior; document unsupported controls explicitly.
- Preserve default unchunked streaming and existing range behavior.
- Verify options reach the core and have documented units and resource implications.
- Exercise the natural stream API against real storage. Do not use a shared hand-written Range adapter to hide the missing API or suppress SDK capabilities.
- Keep internal concurrency distinct from the number of application transfers.
### Additional Context
[Source reference](https://github.com/apache/opendal/blob/b6cf44f7b8a1523409e0e998e478c996ac970f03/bindings/java/src/main/java/org/apache/opendal/ReadOptions.java). OpenDAL API inventory was checked at `b6cf44f7b8a1523409e0e998e478c996ac970f03`.
Contributor guide
Research direction
Start with bindings/java/src/main/java/org/apache/opendal/ReadOptions.java and compare the existing WriteOptions tuning surface, then trace the Java reader and stream construction API to the supported core controls. Inventory concurrency, chunking, and applicable prefetch or gap behavior, preserving default streaming and range behavior. Done means options reach the core, units and resource implications are documented, unsupported controls are explicit, and the natural stream API works against real storage.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, rust
- Domain
- api, backend
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100