From 07a571f70beed3fc46c14b4c933db91e79cfdb80 Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Fri, 10 Nov 2023 02:32:57 -0800 Subject: [PATCH] Intern module extension repo mapping entries via a `SkyFunction` Since 74aadb265c1cae614ae636146f7a1e9e195b7e97, the entries of `RepositoryMapping`s are interned to prevent quadratic memory usage for module extensions that create many repos. By using a dedicated `SkyFunction` instead of an interner, the CPU time spent on computing the identical repository mappings for extension repos, which showed up in profiles, is saved in addition to the memory usage. Closes #20095. PiperOrigin-RevId: 581177545 Change-Id: Ied5682ba90f5f771fedffbea1491e7b2f6c27145 --- .../lib/bazel/BazelRepositoryModule.java | 6 +- .../devtools/build/lib/bazel/bzlmod/BUILD | 2 + ...leExtensionRepoMappingEntriesFunction.java | 78 +++++++++++++++++++ ...oduleExtensionRepoMappingEntriesValue.java | 76 ++++++++++++++++++ .../build/lib/cmdline/RepositoryMapping.java | 14 +--- .../skyframe/RepositoryMappingFunction.java | 46 +++-------- .../build/lib/skyframe/SkyFunctions.java | 3 + .../build/lib/analysis/util/AnalysisMock.java | 4 + .../bzlmod/BazelDepGraphFunctionTest.java | 3 + .../bzlmod/BazelLockFileFunctionTest.java | 3 + .../BazelModuleResolutionFunctionTest.java | 3 + .../bzlmod/BzlmodRepoRuleFunctionTest.java | 3 + .../build/lib/bazel/bzlmod/DiscoveryTest.java | 3 + .../bzlmod/ModuleExtensionResolutionTest.java | 3 + .../bazel/bzlmod/ModuleFileFunctionTest.java | 3 + .../repository/RepositoryDelegatorTest.java | 4 + 16 files changed, 203 insertions(+), 51 deletions(-) create mode 100644 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesFunction.java create mode 100644 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesValue.java diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java index 7d838d1d17dd4b..0a2661fde95dc7 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java @@ -42,6 +42,7 @@ import com.google.devtools.build.lib.bazel.bzlmod.BazelModuleInspectorValue.AugmentedModule.ResolutionReason; import com.google.devtools.build.lib.bazel.bzlmod.BazelModuleResolutionFunction; import com.google.devtools.build.lib.bazel.bzlmod.LocalPathOverride; +import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionRepoMappingEntriesFunction; import com.google.devtools.build.lib.bazel.bzlmod.ModuleFileFunction; import com.google.devtools.build.lib.bazel.bzlmod.ModuleOverride; import com.google.devtools.build.lib.bazel.bzlmod.NonRegistryOverride; @@ -290,7 +291,10 @@ SkyFunctions.BAZEL_LOCK_FILE, new BazelLockFileFunction(directories.getWorkspace .addSkyFunction(SkyFunctions.BAZEL_MODULE_RESOLUTION, new BazelModuleResolutionFunction()) .addSkyFunction(SkyFunctions.SINGLE_EXTENSION_EVAL, singleExtensionEvalFunction) .addSkyFunction(SkyFunctions.SINGLE_EXTENSION_USAGES, new SingleExtensionUsagesFunction()) - .addSkyFunction(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)); + .addSkyFunction(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .addSkyFunction( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()); filesystem = runtime.getFileSystem(); credentialModule = Preconditions.checkNotNull(runtime.getBlazeModule(CredentialModule.class)); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD index 35adfdc97b66f7..62f23a6706da5e 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD @@ -132,6 +132,7 @@ java_library( "ModuleBase.java", "ModuleExtensionEvalFactors.java", "ModuleExtensionEvalStarlarkThreadContext.java", + "ModuleExtensionRepoMappingEntriesValue.java", "ModuleExtensionResolutionEvent.java", "ModuleFileValue.java", "ModuleOverride.java", @@ -182,6 +183,7 @@ java_library( "GsonTypeAdapterUtil.java", "ModuleExtensionContext.java", "ModuleExtensionEvaluationProgress.java", + "ModuleExtensionRepoMappingEntriesFunction.java", "ModuleFileFunction.java", "ModuleFileGlobals.java", "RepoSpecFunction.java", diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesFunction.java new file mode 100644 index 00000000000000..fb1e9adcea3645 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesFunction.java @@ -0,0 +1,78 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +package com.google.devtools.build.lib.bazel.bzlmod; + +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.cmdline.RepositoryMapping; +import com.google.devtools.build.lib.cmdline.RepositoryName; +import com.google.devtools.build.skyframe.SkyFunction; +import com.google.devtools.build.skyframe.SkyKey; +import com.google.devtools.build.skyframe.SkyValue; +import javax.annotation.Nullable; + +/** + * A SkyFunction that computes the {@link RepositoryMapping#entries()} for the repos generated by a + * module extension. While the repos differ in {@link RepositoryMapping#ownerRepo()}, the entries + * are identical and sharing the instance ensures that memory and CPU usage are only linear in the + * number of repos. + */ +public class ModuleExtensionRepoMappingEntriesFunction implements SkyFunction { + + @Override + @Nullable + public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException { + BazelDepGraphValue bazelDepGraphValue = + (BazelDepGraphValue) env.getValue(BazelDepGraphValue.KEY); + if (bazelDepGraphValue == null) { + return null; + } + + var moduleExtensionId = ((ModuleExtensionRepoMappingEntriesValue.Key) skyKey).argument(); + var extensionEvalValue = + (SingleExtensionEvalValue) env.getValue(SingleExtensionEvalValue.key(moduleExtensionId)); + if (extensionEvalValue == null) { + return null; + } + + return computeRepoMappingEntries(moduleExtensionId, extensionEvalValue, bazelDepGraphValue); + } + + /** + * Calculates repo mappings for a repo generated from a module extension. Such a repo can see all + * repos generated by the same module extension, as well as all repos that the Bazel module + * hosting the extension can see (see above). + */ + private ModuleExtensionRepoMappingEntriesValue computeRepoMappingEntries( + ModuleExtensionId extensionId, + SingleExtensionEvalValue extensionEvalValue, + BazelDepGraphValue bazelDepGraphValue) { + // Find the key of the module containing this extension. This will be used to compute additional + // mappings -- any repo generated by an extension contained in the module "foo" can additionally + // see all repos that "foo" can see. + ModuleKey moduleKey = + bazelDepGraphValue + .getCanonicalRepoNameLookup() + .get(extensionId.getBzlFileLabel().getRepository()); + // NOTE(wyv): This means that if "foo" has a bazel_dep with the repo name "bar", and the + // extension generates an internal repo name "bar", then within a repo generated by the + // extension, "bar" will refer to the latter. We should explore a way to differentiate between + // the two to avoid any surprises. + ImmutableMap.Builder entries = ImmutableMap.builder(); + entries.putAll(bazelDepGraphValue.getFullRepoMapping(moduleKey).entries()); + entries.putAll(extensionEvalValue.getCanonicalRepoNameToInternalNames().inverse()); + return ModuleExtensionRepoMappingEntriesValue.create(entries.buildKeepingLast(), moduleKey); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesValue.java new file mode 100644 index 00000000000000..5f2e2ffa7d7f3a --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionRepoMappingEntriesValue.java @@ -0,0 +1,76 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +package com.google.devtools.build.lib.bazel.bzlmod; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.cmdline.RepositoryName; +import com.google.devtools.build.lib.skyframe.SkyFunctions; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.skyframe.AbstractSkyKey; +import com.google.devtools.build.skyframe.SkyFunctionName; +import com.google.devtools.build.skyframe.SkyKey; +import com.google.devtools.build.skyframe.SkyValue; + +/** The value for {@link ModuleExtensionRepoMappingEntriesFunction}. */ +@AutoCodec +@AutoValue +public abstract class ModuleExtensionRepoMappingEntriesValue implements SkyValue { + + public abstract ImmutableMap getEntries(); + + public abstract ModuleKey getModuleKey(); + + @AutoCodec.Instantiator + public static ModuleExtensionRepoMappingEntriesValue create( + ImmutableMap entries, ModuleKey moduleKey) { + return new AutoValue_ModuleExtensionRepoMappingEntriesValue(entries, moduleKey); + } + + public static ModuleExtensionRepoMappingEntriesValue.Key key(ModuleExtensionId id) { + return ModuleExtensionRepoMappingEntriesValue.Key.create(id); + } + + /** + * The {@link com.google.devtools.build.skyframe.SkyKey} of a {@link + * ModuleExtensionRepoMappingEntriesValue}. + */ + @AutoCodec + public static class Key extends AbstractSkyKey { + + private static final SkyKeyInterner interner = + SkyKey.newInterner(); + + protected Key(ModuleExtensionId arg) { + super(arg); + } + + @AutoCodec.Instantiator + static ModuleExtensionRepoMappingEntriesValue.Key create(ModuleExtensionId arg) { + return interner.intern(new ModuleExtensionRepoMappingEntriesValue.Key(arg)); + } + + @Override + public SkyFunctionName functionName() { + return SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES; + } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } + } +} diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java index d1e5f35cc7c53f..0246c930171776 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java @@ -17,8 +17,6 @@ import com.google.auto.value.AutoValue; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Interner; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -36,15 +34,6 @@ @AutoValue public abstract class RepositoryMapping { - // All repositories generated by a module extension have the same repository mapping - // entries. Without interning, if a module extension generates N repositories, each such - // repository would have its own copy with (more than) N entries, resulting in memory usage that - // is quadratic in N. - // Note: We intern the entries, not the RepositoryMapping itself, because the latter also includes - // the owner repo, which differs between extension repos. - private static final Interner> ENTRIES_INTERNER = - BlazeInterners.newWeakInterner(); - // Always fallback to the requested name public static final RepositoryMapping ALWAYS_FALLBACK = createAllowingFallback(ImmutableMap.of()); @@ -71,8 +60,7 @@ public static RepositoryMapping createAllowingFallback(Map entries, RepositoryName ownerRepo) { - return new AutoValue_RepositoryMapping( - ENTRIES_INTERNER.intern(ImmutableMap.copyOf(entries)), ownerRepo); + return new AutoValue_RepositoryMapping(ImmutableMap.copyOf(entries), ownerRepo); } /** diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java index 69323adcd9b277..ee6ea36772edef 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java @@ -18,8 +18,8 @@ import com.google.devtools.build.lib.bazel.bzlmod.BazelDepGraphValue; import com.google.devtools.build.lib.bazel.bzlmod.Module; import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionId; +import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionRepoMappingEntriesValue; import com.google.devtools.build.lib.bazel.bzlmod.ModuleKey; -import com.google.devtools.build.lib.bazel.bzlmod.SingleExtensionEvalValue; import com.google.devtools.build.lib.bazel.bzlmod.Version; import com.google.devtools.build.lib.cmdline.LabelConstants; import com.google.devtools.build.lib.cmdline.RepositoryMapping; @@ -141,14 +141,16 @@ public SkyValue compute(SkyKey skyKey, Environment env) maybeGetModuleExtensionForRepo(repositoryName, bazelDepGraphValue); if (moduleExtensionId.isPresent()) { - SingleExtensionEvalValue extensionEvalValue = - (SingleExtensionEvalValue) - env.getValue(SingleExtensionEvalValue.key(moduleExtensionId.get())); - if (extensionEvalValue == null) { + var repoMappingEntriesValue = + (ModuleExtensionRepoMappingEntriesValue) + env.getValue(ModuleExtensionRepoMappingEntriesValue.key(moduleExtensionId.get())); + if (repoMappingEntriesValue == null) { return null; } - return computeForModuleExtensionRepo( - repositoryName, moduleExtensionId.get(), extensionEvalValue, bazelDepGraphValue); + return RepositoryMappingValue.createForBzlmodRepo( + RepositoryMapping.create(repoMappingEntriesValue.getEntries(), repositoryName), + repoMappingEntriesValue.getModuleKey().getName(), + repoMappingEntriesValue.getModuleKey().getVersion()); } } @@ -192,36 +194,6 @@ private Optional computeForBazelModuleRepo( module.getVersion())); } - /** - * Calculates repo mappings for a repo generated from a module extension. Such a repo can see all - * repos generated by the same module extension, as well as all repos that the Bazel module - * hosting the extension can see (see above). - */ - private RepositoryMappingValue computeForModuleExtensionRepo( - RepositoryName repositoryName, - ModuleExtensionId extensionId, - SingleExtensionEvalValue extensionEvalValue, - BazelDepGraphValue bazelDepGraphValue) { - // Find the key of the module containing this extension. This will be used to compute additional - // mappings -- any repo generated by an extension contained in the module "foo" can additionally - // see all repos that "foo" can see. - ModuleKey moduleKey = - bazelDepGraphValue - .getCanonicalRepoNameLookup() - .get(extensionId.getBzlFileLabel().getRepository()); - Module module = bazelDepGraphValue.getDepGraph().get(moduleKey); - // NOTE(wyv): This means that if "foo" has a bazel_dep with the repo name "bar", and the - // extension generates an internal repo name "bar", then within a repo generated by the - // extension, "bar" will refer to the latter. We should explore a way to differentiate between - // the two to avoid any surprises. - return RepositoryMappingValue.createForBzlmodRepo( - RepositoryMapping.create( - extensionEvalValue.getCanonicalRepoNameToInternalNames().inverse(), repositoryName) - .withAdditionalMappings(bazelDepGraphValue.getFullRepoMapping(moduleKey)), - module.getName(), - module.getVersion()); - } - /** * Calculate repo mappings for a repo generated from WORKSPACE. Such a repo is not subject to * strict deps, and can additionally see all repos that the root module can see. diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java index fbb723db80c435..a6398ead1866ba 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java @@ -157,6 +157,9 @@ public final class SkyFunctions { SkyFunctionName.createHermetic("BAZEL_FETCH_ALL"); public static final SkyFunctionName REPO_SPEC = SkyFunctionName.createNonHermetic("REPO_SPEC"); + public static final SkyFunctionName MODULE_EXTENSION_REPO_MAPPING_ENTRIES = + SkyFunctionName.createHermetic("MODULE_EXTENSION_REPO_MAPPING_ENTRIES"); + public static Predicate isSkyFunction(SkyFunctionName functionName) { return key -> key.functionName().equals(functionName); } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java index e49ea3b7c1168d..8eec78c6461dfa 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.bazel.bzlmod.BazelLockFileFunction; import com.google.devtools.build.lib.bazel.bzlmod.BazelModuleResolutionFunction; import com.google.devtools.build.lib.bazel.bzlmod.FakeRegistry; +import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionRepoMappingEntriesFunction; import com.google.devtools.build.lib.bazel.bzlmod.ModuleFileFunction; import com.google.devtools.build.lib.bazel.bzlmod.NonRegistryOverride; import com.google.devtools.build.lib.bazel.bzlmod.RepoSpecFunction; @@ -176,6 +177,9 @@ public ImmutableMap getSkyFunctions(BlazeDirectori new SingleExtensionEvalFunction(directories, ImmutableMap::of, downloadManager)) .put(SkyFunctions.SINGLE_EXTENSION_USAGES, new SingleExtensionUsagesFunction()) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(FakeRegistry.DEFAULT_FACTORY)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java index f563b3b9a564c2..38b058339926aa 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java @@ -130,6 +130,9 @@ public void setup() throws Exception { .put(SkyFunctions.BAZEL_DEP_GRAPH, new BazelDepGraphFunction()) .put(SkyFunctions.BAZEL_MODULE_RESOLUTION, resolutionFunctionMock) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction( diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunctionTest.java index 25cfa1eeff6c2d..54c00ba78aa153 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunctionTest.java @@ -157,6 +157,9 @@ public void setup() throws Exception { new ModuleFileFunction(registryFactory, rootDirectory, ImmutableMap.of())) .put(SkyFunctions.BAZEL_LOCK_FILE, new BazelLockFileFunction(rootDirectory)) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction( diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java index aeceea95a65426..63fbbd4e09656d 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java @@ -116,6 +116,9 @@ public void setup() throws Exception { .put(SkyFunctions.BAZEL_LOCK_FILE, new BazelLockFileFunction(rootDirectory)) .put(SkyFunctions.BAZEL_MODULE_RESOLUTION, new BazelModuleResolutionFunction()) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleFunctionTest.java index 992aef9ce40766..010b56d916b593 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodRepoRuleFunctionTest.java @@ -131,6 +131,9 @@ public void setup() throws Exception { SkyFunctions.MODULE_FILE, new ModuleFileFunction(registryFactory, workspaceRoot, ImmutableMap.of())) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/DiscoveryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/DiscoveryTest.java index 24b262b7b857ff..399e2ca1e23cee 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/DiscoveryTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/DiscoveryTest.java @@ -185,6 +185,9 @@ private void setUpWithBuiltinModules(ImmutableMap b BzlmodRepoRuleValue.BZLMOD_REPO_RULE, new BzlmodRepoRuleFunction(ruleClassProvider, directories)) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java index d57f14e5f2bbc9..42a814e9070c22 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java @@ -266,6 +266,9 @@ public void setup() throws Exception { .put(SkyFunctions.SINGLE_EXTENSION_USAGES, new SingleExtensionUsagesFunction()) .put(SkyFunctions.SINGLE_EXTENSION_EVAL, singleExtensionEvalFunction) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java index 4b68069d28e856..474654691e51bc 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java @@ -154,6 +154,9 @@ private void setUpWithBuiltinModules(ImmutableMap b BzlmodRepoRuleValue.BZLMOD_REPO_RULE, new BzlmodRepoRuleFunction(ruleClassProvider, directories)) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of()))) diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java index b4af3fe4e96c05..95166b3511fe52 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.bazel.bzlmod.BazelModuleResolutionFunction; import com.google.devtools.build.lib.bazel.bzlmod.BzlmodRepoRuleValue; import com.google.devtools.build.lib.bazel.bzlmod.FakeRegistry; +import com.google.devtools.build.lib.bazel.bzlmod.ModuleExtensionRepoMappingEntriesFunction; import com.google.devtools.build.lib.bazel.bzlmod.ModuleFileFunction; import com.google.devtools.build.lib.bazel.bzlmod.RepoSpecFunction; import com.google.devtools.build.lib.bazel.bzlmod.YankedVersionsUtil; @@ -258,6 +259,9 @@ public void setupDelegator() throws Exception { BzlmodRepoRuleValue.BZLMOD_REPO_RULE, new BzlmodRepoRuleFunction(ruleClassProvider, directories)) .put(SkyFunctions.REPO_SPEC, new RepoSpecFunction(registryFactory)) + .put( + SkyFunctions.MODULE_EXTENSION_REPO_MAPPING_ENTRIES, + new ModuleExtensionRepoMappingEntriesFunction()) .put( SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE, new ClientEnvironmentFunction(new AtomicReference<>(ImmutableMap.of())))