Skip to content

feat(synology): optimize video upload with chunk preloading#1490

Merged
mengyushen merged 1 commit into
dtinit:masterfrom
SynologyOpenSource:synology-preload-video-chunk
Apr 30, 2026
Merged

feat(synology): optimize video upload with chunk preloading#1490
mengyushen merged 1 commit into
dtinit:masterfrom
SynologyOpenSource:synology-preload-video-chunk

Conversation

@simonxander
Copy link
Copy Markdown
Collaborator

Improve video upload efficiency by implementing an asynchronous producer-consumer model for chunked uploads. This minimizes idle time between network requests and increases overall throughput for large video files.

Goal

The goal of this change is to optimize video uploads to Synology by pre-fetching the next data chunk while the current one is being uploaded, reducing the total duration of sequential transfers.

Changes

  • Pattern Implementation: Refactored uploadVideoChunks into a producer-consumer model using a dedicated thread for pre-loading data from the input stream.
  • Memory Management: Introduced a bufferPool with a fixed size (2 chunks) to ensure predictable memory usage (~100MB) regardless of video size.
  • Asynchronous Execution: Utilized CompletableFuture and LinkedBlockingQueue for thread-safe coordination between chunk production and upload.
  • Robustness: Added explicit error propagation and resource cleanup (buffers, threads) using AtomicBoolean and finally blocks.
  • Observability: Enhanced logging with detailed markers for chunk fetching, queueing, and upload progress to facilitate monitoring and debugging.
image

Improve video upload efficiency by implementing an asynchronous producer-consumer
model for chunked uploads. This minimizes idle time between network requests
and increases overall throughput for large video files.

## Goal
The goal of this change is to optimize video uploads to Synology by pre-fetching
the next data chunk while the current one is being uploaded, reducing the
total duration of sequential transfers.

## Changes
- **Pattern Implementation:** Refactored `uploadVideoChunks` into a producer-consumer
  model using a dedicated thread for pre-loading data from the input stream.
- **Memory Management:** Introduced a `bufferPool` with a fixed size (2 chunks)
  to ensure predictable memory usage (~100MB) regardless of video size.
- **Asynchronous Execution:** Utilized `CompletableFuture` and `LinkedBlockingQueue`
  for thread-safe coordination between chunk production and upload.
- **Robustness:** Added explicit error propagation and resource cleanup (buffers,
  threads) using `AtomicBoolean` and `finally` blocks.
- **Observability:** Enhanced logging with detailed markers for chunk fetching,
  queueing, and upload progress to facilitate monitoring and debugging.
@yukthagaduputi
Copy link
Copy Markdown
Collaborator

LGTM

@mengyushen mengyushen merged commit 4c44f6d into dtinit:master Apr 30, 2026
6 checks passed
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.

3 participants