[7.0.0] Fix analysis time regression with Bzlmod lockfile #20021
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This commit fixes a regression in analysis time caused by 19c0c80. Since
BazelModuleResolutionEvent
andModuleExtensionResolutionEvent
are both marked asstoreForReplay
, they are stored in a nested set for essentially all analysis phase nodes. This resulted in frequent (i.e., per target) calls to theirhashCode
methods, which are not cached and delegated to the likewise uncached methods on largeImmutableMap
andImmutableTable
instances.Since there is no need for these events to be deduplicated, switching to reference equality resolves this issue.
The following analysis phase measurements for a synthetic project with a single "hub and spokes" module extension and 2,000 repos illustrate the effect:
Fixes #19952
Closes #19970.
Commit 435d1c2
PiperOrigin-RevId: 578734010
Change-Id: I870867c5c509389632793b0d5fe5c43ddc6176f3