Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix potential memory leak in UI #18593

Closed
wants to merge 2 commits into from
Closed

Conversation

coeuvre
Copy link
Member

@coeuvre coeuvre commented Jun 6, 2023

We report download progress to UI when downloading outputs from remote cache. UI thread keeps track of active downloads. There are two cases the UI thread could leak memory:

  1. If we failed to close the output stream, the reporter.finished() will never be called, prevent UI thread from releasing the active download. This is fixed by calling reporter.finished() in finally block.
  2. Normally, UI thread stops after BuildCompleted event. However, if we have background download after build is completed, UI thread is not stopped to continue printing out download progress. But after all downloads are done, we forgot to stop the UI thread, resulting all referenced objects leaked. This is fixed by calling checkActivities() for every download progress.

Fixes #18145.

@coeuvre coeuvre requested a review from a team as a code owner June 6, 2023 15:23
@coeuvre coeuvre requested a review from tjgq June 6, 2023 15:23
@github-actions github-actions bot added awaiting-review PR is awaiting review from an assigned reviewer team-CLI Console UI team-Remote-Exec Issues and PRs for the Execution (Remote) team labels Jun 6, 2023
@coeuvre
Copy link
Member Author

coeuvre commented Jun 6, 2023

@bazel-io fork 6.3.0

@coeuvre coeuvre deleted the fix-18145 branch June 13, 2023 11:42
iancha1992 pushed a commit to iancha1992/bazel that referenced this pull request Jun 13, 2023
We report download progress to UI when downloading outputs from remote cache. UI thread keeps track of active downloads. There are two cases the UI thread could leak memory:

1. If we failed to close the output stream, the `reporter.finished()` will never be called, prevent UI thread from releasing the active download. This is fixed by calling `reporter.finished()` in `finally` block.
2. Normally, UI thread stops after `BuildCompleted` event. However, if we have background download after build is completed, UI thread is not stopped to continue printing out download progress. But after all downloads are done, we forgot to stop the UI thread, resulting all referenced objects leaked. This is fixed by calling `checkActivities()` for every download progress.

Fixes bazelbuild#18145.

Closes bazelbuild#18593.

PiperOrigin-RevId: 539923685
Change-Id: I7e2887035e540b39e382ab5fcbc06bad03b10427
@iancha1992 iancha1992 removed the awaiting-review PR is awaiting review from an assigned reviewer label Jun 13, 2023
iancha1992 added a commit that referenced this pull request Jun 14, 2023
We report download progress to UI when downloading outputs from remote cache. UI thread keeps track of active downloads. There are two cases the UI thread could leak memory:

1. If we failed to close the output stream, the `reporter.finished()` will never be called, prevent UI thread from releasing the active download. This is fixed by calling `reporter.finished()` in `finally` block.
2. Normally, UI thread stops after `BuildCompleted` event. However, if we have background download after build is completed, UI thread is not stopped to continue printing out download progress. But after all downloads are done, we forgot to stop the UI thread, resulting all referenced objects leaked. This is fixed by calling `checkActivities()` for every download progress.

Fixes #18145.

Closes #18593.

PiperOrigin-RevId: 539923685
Change-Id: I7e2887035e540b39e382ab5fcbc06bad03b10427

Co-authored-by: Chi Wang <chiwang@google.com>
traversaro pushed a commit to traversaro/bazel that referenced this pull request Jun 24, 2023
We report download progress to UI when downloading outputs from remote cache. UI thread keeps track of active downloads. There are two cases the UI thread could leak memory:

1. If we failed to close the output stream, the `reporter.finished()` will never be called, prevent UI thread from releasing the active download. This is fixed by calling `reporter.finished()` in `finally` block.
2. Normally, UI thread stops after `BuildCompleted` event. However, if we have background download after build is completed, UI thread is not stopped to continue printing out download progress. But after all downloads are done, we forgot to stop the UI thread, resulting all referenced objects leaked. This is fixed by calling `checkActivities()` for every download progress.

Fixes bazelbuild#18145.

Closes bazelbuild#18593.

PiperOrigin-RevId: 539923685
Change-Id: I7e2887035e540b39e382ab5fcbc06bad03b10427
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
team-CLI Console UI team-Remote-Exec Issues and PRs for the Execution (Remote) team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Builds without the Bytes causes Bazel OOM
2 participants