Skip to content

[9.3.0] Use no-op path mapper when output paths collide with inputs - #30467

Open
Silic0nS0ldier wants to merge 2 commits into
bazelbuild:release-9.3.0from
Silic0nS0ldier:9.3.0_path-mapping-io-collision-fix
Open

[9.3.0] Use no-op path mapper when output paths collide with inputs#30467
Silic0nS0ldier wants to merge 2 commits into
bazelbuild:release-9.3.0from
Silic0nS0ldier:9.3.0_path-mapping-io-collision-fix

Conversation

@Silic0nS0ldier

Copy link
Copy Markdown
Contributor

Description

Prevents the path mapper (#6526, --experimental_output_paths=strip) from applying when a collision occurs between mapped input and output paths.

Motivation

Fixes a discovered edge case where a globally applied Java annotation processor had dependent .jar collide when building that same .jar under the default configuration, leading to a AccessDeniedException.

e.g.

$ bazel cquery 'somepath(//product_platform/libs/protogen:protogen, config(//product_platform/libs/protogen:protogen, d373329))'
...
//product_platform/libs/protogen:protogen (e3ee988)
@bazel_tools//tools/jdk:java_plugins_flag_alias (e3ee988)
//tools/error_prone/global_bug_patterns:global_bug_patterns (d373329)
//tools/error_prone/global_bug_patterns/unproducible_value:unproducible_value (d373329)
//product_platform/libs/protogen:protogen (d373329)

$ bazel build //product_platform/libs/protogen:protogen
...
ERROR: /___/product_platform/libs/protogen/BUILD.bazel:7:13: Building product_platform/libs/protogen/libprotogen.jar (18 source files) failed: (Exit 1): java failed: error executing Javac command (from java_library rule target //product_platform/libs/protogen:protogen) external/+java_repositories+openjdk21_linux_x86_64/bin/java '--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED' ... (remaining 20 arguments skipped)
Remote server execution message: Execution result: ___
java.nio.file.AccessDeniedException: bazel-out/cfg/bin/product_platform/libs/protogen/libprotogen.jar
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
        at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:261)
        at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:482)
        at java.base/java.nio.file.Files.newOutputStream(Files.java:228)
        at com.google.devtools.build.buildjar.jarhelper.JarCreator.execute(JarCreator.java:279)
        at com.google.devtools.build.buildjar.SimpleJavaLibraryBuilder.buildJar(SimpleJavaLibraryBuilder.java:152)
        at com.google.devtools.build.buildjar.SimpleJavaLibraryBuilder.run(SimpleJavaLibraryBuilder.java:119)
        at com.google.devtools.build.buildjar.BazelJavaBuilder.build(BazelJavaBuilder.java:111)
        at com.google.devtools.build.buildjar.BazelJavaBuilder.parseAndBuild(BazelJavaBuilder.java:91)
        at com.google.devtools.build.buildjar.BazelJavaBuilder.lambda$main$0(BazelJavaBuilder.java:52)
        at com.google.devtools.build.lib.worker.WorkRequestHandler$WorkRequestCallback.apply(WorkRequestHandler.java:252)
        at com.google.devtools.build.lib.worker.WorkRequestHandler.respondToRequest(WorkRequestHandler.java:481)
        at com.google.devtools.build.lib.worker.WorkRequestHandler.lambda$startResponseThread$0(WorkRequestHandler.java:433)
        at java.base/java.lang.Thread.run(Thread.java:1583)Use --verbose_failures to see the command lines of failed build steps.

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 #30440.

### Description
Prevents the path mapper (bazelbuild#6526, `--experimental_output_paths=strip`) from applying when a collision occurs between mapped input and output paths.

### Motivation
Fixes a discovered edge case where a globally applied Java annotation processor had dependent `.jar` collide when building that same `.jar` under the default configuration, leading to a `AccessDeniedException`.

e.g.
```
$ bazel cquery 'somepath(//product_platform/libs/protogen:protogen, config(//product_platform/libs/protogen:protogen, d373329))'
...
//product_platform/libs/protogen:protogen (e3ee988)
@bazel_tools//tools/jdk:java_plugins_flag_alias (e3ee988)
//tools/error_prone/global_bug_patterns:global_bug_patterns (d373329)
//tools/error_prone/global_bug_patterns/unproducible_value:unproducible_value (d373329)
//product_platform/libs/protogen:protogen (d373329)

$ bazel build //product_platform/libs/protogen:protogen
...
ERROR: /___/product_platform/libs/protogen/BUILD.bazel:7:13: Building product_platform/libs/protogen/libprotogen.jar (18 source files) failed: (Exit 1): java failed: error executing Javac command (from java_library rule target //product_platform/libs/protogen:protogen) external/+java_repositories+openjdk21_linux_x86_64/bin/java '--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED' ... (remaining 20 arguments skipped)
Remote server execution message: Execution result: ___
java.nio.file.AccessDeniedException: bazel-out/cfg/bin/product_platform/libs/protogen/libprotogen.jar
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
        at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:261)
        at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:482)
        at java.base/java.nio.file.Files.newOutputStream(Files.java:228)
        at com.google.devtools.build.buildjar.jarhelper.JarCreator.execute(JarCreator.java:279)
        at com.google.devtools.build.buildjar.SimpleJavaLibraryBuilder.buildJar(SimpleJavaLibraryBuilder.java:152)
        at com.google.devtools.build.buildjar.SimpleJavaLibraryBuilder.run(SimpleJavaLibraryBuilder.java:119)
        at com.google.devtools.build.buildjar.BazelJavaBuilder.build(BazelJavaBuilder.java:111)
        at com.google.devtools.build.buildjar.BazelJavaBuilder.parseAndBuild(BazelJavaBuilder.java:91)
        at com.google.devtools.build.buildjar.BazelJavaBuilder.lambda$main$0(BazelJavaBuilder.java:52)
        at com.google.devtools.build.lib.worker.WorkRequestHandler$WorkRequestCallback.apply(WorkRequestHandler.java:252)
        at com.google.devtools.build.lib.worker.WorkRequestHandler.respondToRequest(WorkRequestHandler.java:481)
        at com.google.devtools.build.lib.worker.WorkRequestHandler.lambda$startResponseThread$0(WorkRequestHandler.java:433)
        at java.base/java.lang.Thread.run(Thread.java:1583)Use --verbose_failures to see the command lines of failed build steps.
```

### 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#30440.
@Silic0nS0ldier
Silic0nS0ldier requested a review from a team as a code owner July 26, 2026 05:42
@github-actions github-actions Bot added team-Configurability platforms, toolchains, cquery, select(), config transitions awaiting-review PR is awaiting review from an assigned reviewer labels Jul 26, 2026
@Silic0nS0ldier

Copy link
Copy Markdown
Contributor Author

CI errors look to be unrelated. Flakes or existing breakages.

@iancha1992
iancha1992 enabled auto-merge July 27, 2026 17:22
@iancha1992
iancha1992 requested review from gregestren and tjgq July 27, 2026 17:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-review PR is awaiting review from an assigned reviewer team-Configurability platforms, toolchains, cquery, select(), config transitions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants