Change information
Commit message:
Bugfix: Split large RemoteOutputService gRPC message (https://github.com/bazelbuild/bazel/pull/28758)
### Description
Directories with too many output files creates unlimited gRPC messages for the `RemoteOutputService`. Limit the messages to `maxOutboundMessageSize`.
### Motivation
Large directory outputs from actions in combination with Remote Output Service gives:
```
ERROR: /code/.../BUILD.bazel:3:16: Action large_directory_ failed: (Exit 34): RESOURCE_EXHAUSTED: grpc: received message larger than max (18681338 vs. 4194304)
Target //:large_directory failed to build
```
Example `rules.bzl`:
```
def _large_directory_impl(ctx):
output_dir = ctx.actions.declare_directory(ctx.label.name + "_")
args = ctx.actions.args()
args.add_all([output_dir], expand_directories = False)
ctx.actions.run_shell(
outputs = [output_dir],
command = """
cd $1
for i in $(seq 1 100); do
mkdir $i
for j in $(seq 1 1000); do
echo $i-$j > $i/$j
done
done
""",
arguments = [args],
execution_requirements = {"supports-path-mapping": "1"},
)
return DefaultInfo(files = depset([output_dir]))
large_directory = rule(
implementation = _large_directory_impl,
)
```
Example `BUILD.bazel`:
```
load("//:rules.bzl", "large_directory")
large_directory(
name = "large_directory",
)
```
RELNOTES: None
Closes #28758.
Closes #24705.
PiperOrigin-RevId: 925246636
Change-Id: I1c882a73fb2dc11313de7dd17b5a8d9179736eac
Files:
- M src/main/java/com/google/devtools/build/lib/remote/BazelOutputService.java
- M src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
- M src/test/java/com/google/devtools/build/lib/remote/BUILD
- A src/test/java/com/google/devtools/build/lib/remote/BazelOutputServiceTest.java
Change size: L
Delta: 4 files changed, 452 insertions(+), 50 deletions(-)
Branch: refs/heads/master