Skip to content

Improve range request skipping with configurable buffered skip - #103

Draft
KochTobi wants to merge 3 commits into
mainfrom
feature/improved-range-request-support
Draft

Improve range request skipping with configurable buffered skip#103
KochTobi wants to merge 3 commits into
mainfrom
feature/improved-range-request-support

Conversation

@KochTobi

Copy link
Copy Markdown
Contributor

Wrap the stream in a BufferedInputStream only during skipToStart so that seeking to a large offset (e.g. 90% of a multi-GB file) discards data in skipBufferSize chunks instead of byte-by-byte. The buffer is discarded immediately after the skip, so the producer-consumer streaming path and its backpressure behavior are unchanged.

Make the skip buffer size configurable via
server.download.skip-buffer-size (default 8192 bytes).

Wrap the stream in a BufferedInputStream only during skipToStart so that
seeking to a large offset (e.g. 90% of a multi-GB file) discards data in
skipBufferSize chunks instead of byte-by-byte. The buffer is discarded
immediately after the skip, so the producer-consumer streaming path and its
backpressure behavior are unchanged.

Make the skip buffer size configurable via
server.download.skip-buffer-size (default 8192 bytes).
Log skip progress at TRACE level in skipBufferSize steps so logs confirm the
skip advances in buffer-sized chunks rather than byte-by-byte. The logging is
opt-in via the SKIP_TRACE_LEVEL env var (default info), leaving the root log
level untouched.
The previous trace logged pseudo-progress at buffer boundaries, which is
misleading when InputStream.skip() is honored: a single skip() call can
discard the whole range in one jump, so no intermediate steps appear. Now
each honored skip() call is logged with its byte count and offset, and the
final line reports how many byte-by-byte reads fell back, making the slow
path obvious.
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants