Skip to content

[9.3.0] Stream module lockfiles directly to disk (https://github.com/bazelbuild/bazel/pull/30428) - #30581

Open
bazel-io wants to merge 1 commit into
bazelbuild:release-9.3.0from
bazel-io:cp30428-9.3.0-220644
Open

[9.3.0] Stream module lockfiles directly to disk (https://github.com/bazelbuild/bazel/pull/30428)#30581
bazel-io wants to merge 1 commit into
bazelbuild:release-9.3.0from
bazel-io:cp30428-9.3.0-220644

Conversation

@bazel-io

@bazel-io bazel-io commented Aug 4, 2026

Copy link
Copy Markdown
Member

Description

Stream MODULE.bazel.lock serialization through a buffered UTF-8 writer instead of building the complete JSON as a String. The same helper writes both workspace and hidden lockfiles. Preserve the existing trailing newline and I/O failure logging, and add a regression test for the exact persisted JSON and newline.

Motivation

A real hidden lockfile reached 456,397,262 bytes (435.254 MiB). Gson.toJson(updatedLockfile) + "\n" creates two full strings, about 870 MiB of transient heap, and can fail in BazelLockFileModule.updateLockfile with java.lang.OutOfMemoryError: Java heap space.

Streaming Gson directly to disk removes those full-size intermediate strings.

Build API Changes

No

Checklist

  • I have added tests for the new use cases (if any).
  • I have updated the documentation (if applicable).

Release Notes

RELNOTES: None

Closes #30428.

PiperOrigin-RevId: 955067300
Change-Id: I637f7cb724101d197b6ec64e1eb3081717f7c8e4

Commit 3206eb9

### Description

Stream `MODULE.bazel.lock` serialization through a buffered UTF-8 writer instead of building the complete JSON as a `String`. The same helper writes both workspace and hidden lockfiles. Preserve the existing trailing newline and I/O failure logging, and add a regression test for the exact persisted JSON and newline.

### Motivation

A real hidden lockfile reached 456,397,262 bytes (435.254 MiB). `Gson.toJson(updatedLockfile) + "\n"` creates two full strings, about 870 MiB of transient heap, and can fail in `BazelLockFileModule.updateLockfile` with `java.lang.OutOfMemoryError: Java heap space`.

Streaming Gson directly to disk removes those full-size intermediate strings.

### Build API Changes

No

### Checklist

- [x] I have added tests for the new use cases (if any).
- [x] I have updated the documentation (if applicable).

### Release Notes

RELNOTES: None

Closes bazelbuild#30428.

PiperOrigin-RevId: 955067300
Change-Id: I637f7cb724101d197b6ec64e1eb3081717f7c8e4
@bazel-io
bazel-io requested a review from a team as a code owner August 4, 2026 22:07
@bazel-io bazel-io added team-ExternalDeps External dependency handling, remote repositiories, WORKSPACE file. area-Bzlmod Bzlmod-specific PRs, issues, and feature requests awaiting-review PR is awaiting review from an assigned reviewer labels Aug 4, 2026
@bazel-io
bazel-io requested review from Wyverald and fmeum August 4, 2026 22:07
@iancha1992
iancha1992 removed the request for review from fmeum August 4, 2026 22:08
@iancha1992
iancha1992 enabled auto-merge August 4, 2026 22:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-Bzlmod Bzlmod-specific PRs, issues, and feature requests awaiting-review PR is awaiting review from an assigned reviewer team-ExternalDeps External dependency handling, remote repositiories, WORKSPACE file.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants