Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 0195f18

Browse files
iancha1992fmeum
andauthoredMay 6, 2025··
[8.3.0] Fix a crash when an execution platform is registered twice (#26017)
Fixes: ``` java.lang.RuntimeException: Unrecoverable error while evaluating node 'RegisteredExecutionPlatformsValue.Key{configurationKey=BuildConfigurationKey[9717a88017211d5216fbdbc464e63175f64ccddbf8228373e570ef6207784c59], debug=false}' (requested by nodes 'ToolchainContextKey{configurationKey=BuildConfigurationKey[9717a88017211d5216fbdbc464e63175f64ccddbf8228373e570ef6207784c59], toolchainTypes=[ToolchainTypeRequirement[toolchainType=@@rules_shell+//shell:toolchain_type, mandatory=false, ignoreIfInvalid=false]], execConstraintLabels=[], forceExecutionPlatform=Optional.empty, debugTarget=false}', 'ToolchainContextKey{configurationKey=BuildConfigurationKey[9717a88017211d5216fbdbc464e63175f64ccddbf8228373e570ef6207784c59], toolchainTypes=[], execConstraintLabels=[], forceExecutionPlatform=Optional.empty, debugTarget=false}', 'ToolchainContextKey{configurationKey=BuildConfigurationKey[9717a88017211d5216fbdbc464e63175f64ccddbf8228373e570ef6207784c59], toolchainTypes=[ToolchainTypeRequirement[toolchainType=@@bazel_tools//tools/test:default_test_toolchain_type, mandatory=true, ignoreIfInvalid=false]], execConstraintLabels=[], forceExecutionPlatform=Optional.empty, debugTarget=false}') at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:551) at com.google.devtools.build.lib.concurrent.AbstractQueueVisitor$WrappedRunnable.run(AbstractQueueVisitor.java:435) at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source) at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source) at java.base/java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(Unknown Source) at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source) at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source) Caused by: java.lang.IllegalArgumentException: Multiple entries with same key: ConfiguredTargetKey{label=//:exotic_platform, config=BuildConfigurationKey[143f37d1c59dd799b41d79727ea40234e8a728fed9683c1cd6a5d96a9954f9f6]}=PlatformInfo(//:exotic_platform, constraints=<[@@platforms//os:wasi]>) and ConfiguredTargetKey{label=//:exotic_platform, config=BuildConfigurationKey[143f37d1c59dd799b41d79727ea40234e8a728fed9683c1cd6a5d96a9954f9f6]}=PlatformInfo(//:exotic_platform, constraints=<[@@platforms//os:wasi]>) at com.google.common.collect.ImmutableMap.conflictException(ImmutableMap.java:382) at com.google.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:376) at com.google.common.collect.RegularImmutableMap.checkNoConflictInKeyBucket(RegularImmutableMap.java:246) at com.google.common.collect.RegularImmutableMap.fromEntryArrayCheckingBucketOverflow(RegularImmutableMap.java:134) at com.google.common.collect.RegularImmutableMap.fromEntryArray(RegularImmutableMap.java:96) at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:579) at com.google.common.collect.ImmutableMap$Builder.buildOrThrow(ImmutableMap.java:607) at com.google.devtools.build.lib.skyframe.toolchains.RegisteredExecutionPlatformsFunction.configureRegisteredExecutionPlatforms(RegisteredExecutionPlatformsFunction.java:295) at com.google.devtools.build.lib.skyframe.toolchains.RegisteredExecutionPlatformsFunction.compute(RegisteredExecutionPlatformsFunction.java:154) at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:471) ... 8 more ``` Also deduplicate toolchain keys for symmetry and to avoid a bit of unnecessary duplicative work. Closes #25999. PiperOrigin-RevId: 755293554 Change-Id: I0df716868289eddf83ec57866b70cf26a8dedc1d Commit 9123d1d Co-authored-by: Fabian Meumertzheim <fabian@meumertzhe.im>
1 parent 4e97771 commit 0195f18

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed
 

‎src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredExecutionPlatformsFunction.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@
1414

1515
package com.google.devtools.build.lib.skyframe.toolchains;
1616

17-
import static com.google.common.collect.ImmutableList.toImmutableList;
17+
import static com.google.common.collect.ImmutableSet.toImmutableSet;
1818

1919
import com.google.common.annotations.VisibleForTesting;
2020
import com.google.common.collect.ImmutableList;
21+
import com.google.common.collect.ImmutableSet;
2122
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
2223
import com.google.devtools.build.lib.analysis.ConfiguredTargetValue;
2324
import com.google.devtools.build.lib.analysis.PlatformConfiguration;
@@ -215,7 +216,7 @@ private static ImmutableList<TargetPattern> getBzlmodExecutionPlatforms(
215216
private static ImmutableList<ConfiguredTargetKey> configureRegisteredExecutionPlatforms(
216217
Environment env, List<Label> labels)
217218
throws InterruptedException, RegisteredExecutionPlatformsFunctionException {
218-
ImmutableList<ConfiguredTargetKey> keys =
219+
ImmutableSet<ConfiguredTargetKey> keys =
219220
labels.stream()
220221
.map(
221222
label ->
@@ -224,7 +225,7 @@ private static ImmutableList<ConfiguredTargetKey> configureRegisteredExecutionPl
224225
.setConfigurationKey(
225226
BuildConfigurationKey.create(CommonOptions.EMPTY_OPTIONS))
226227
.build())
227-
.collect(toImmutableList());
228+
.collect(toImmutableSet());
228229

229230
SkyframeLookupResult values = env.getValuesAndExceptions(keys);
230231
ImmutableList.Builder<ConfiguredTargetKey> validPlatformKeys = new ImmutableList.Builder<>();

‎src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsFunction.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@
1414

1515
package com.google.devtools.build.lib.skyframe.toolchains;
1616

17-
import static com.google.common.collect.ImmutableList.toImmutableList;
17+
import static com.google.common.collect.ImmutableSet.toImmutableSet;
1818
import static java.util.stream.Collectors.joining;
1919

2020
import com.google.common.annotations.VisibleForTesting;
2121
import com.google.common.collect.HashBasedTable;
2222
import com.google.common.collect.ImmutableList;
23+
import com.google.common.collect.ImmutableSet;
2324
import com.google.common.collect.ImmutableTable;
2425
import com.google.common.collect.Table;
2526
import com.google.devtools.build.lib.actions.ActionLookupKey;
@@ -238,15 +239,15 @@ private static ImmutableList<TargetPattern> getBzlmodToolchains(
238239
private static ImmutableList<DeclaredToolchainInfo> configureRegisteredToolchains(
239240
Environment env, BuildConfigurationValue configuration, List<Label> labels)
240241
throws InterruptedException, RegisteredToolchainsFunctionException {
241-
ImmutableList<ActionLookupKey> keys =
242+
ImmutableSet<ActionLookupKey> keys =
242243
labels.stream()
243244
.map(
244245
label ->
245246
ConfiguredTargetKey.builder()
246247
.setLabel(label)
247248
.setConfiguration(configuration)
248249
.build())
249-
.collect(toImmutableList());
250+
.collect(toImmutableSet());
250251

251252
SkyframeLookupResult values = env.getValuesAndExceptions(keys);
252253
ImmutableList.Builder<DeclaredToolchainInfo> toolchains = new ImmutableList.Builder<>();

0 commit comments

Comments
 (0)
Please sign in to comment.