[7.3.0] Deduplicate locally executed path mapped spawns (#23069)
When path mapping is enabled, different `Spawn`s in the same build can have identical `RemoteAction.ActionKey`s and can thus provide remote cache hits for each other. However, cache hits are only possible after the first local execution has concluded and uploaded its result to the cache. To avoid unnecessary duplication of local work, the first `Spawn` for each `RemoteAction.ActionKey` is tracked until its results have been uploaded and all other concurrently scheduled `Spawn`s wait for it and then copy over its local outputs. Fixes #21043 Closes #22556. PiperOrigin-RevId: 655097996 Change-Id: I4368f9210c67a306775164d252aae122d8b46f9b Closes #23060
Showing
- src/main/java/com/google/devtools/build/lib/actions/SpawnResult.java 143 additions, 0 deletions...va/com/google/devtools/build/lib/actions/SpawnResult.java
- src/main/java/com/google/devtools/build/lib/exec/AbstractSpawnStrategy.java 1 addition, 1 deletion...google/devtools/build/lib/exec/AbstractSpawnStrategy.java
- src/main/java/com/google/devtools/build/lib/exec/BUILD 1 addition, 0 deletionssrc/main/java/com/google/devtools/build/lib/exec/BUILD
- src/main/java/com/google/devtools/build/lib/exec/SpawnCache.java 1 addition, 0 deletions...n/java/com/google/devtools/build/lib/exec/SpawnCache.java
- src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionService.java 161 additions, 8 deletions...gle/devtools/build/lib/remote/RemoteExecutionService.java
- src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java 64 additions, 7 deletions...om/google/devtools/build/lib/remote/RemoteSpawnCache.java
- src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java 1 addition, 1 deletion...m/google/devtools/build/lib/remote/RemoteSpawnRunner.java
- src/main/java/com/google/devtools/build/lib/remote/common/RemotePathResolver.java 0 additions, 16 deletions.../devtools/build/lib/remote/common/RemotePathResolver.java
- src/test/java/com/google/devtools/build/lib/remote/RemoteExecutionServiceTest.java 8 additions, 8 deletions...devtools/build/lib/remote/RemoteExecutionServiceTest.java
- src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnCacheTest.java 269 additions, 105 deletions...oogle/devtools/build/lib/remote/RemoteSpawnCacheTest.java
- src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java 6 additions, 6 deletions...ogle/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
- src/test/shell/bazel/path_mapping_test.sh 274 additions, 0 deletionssrc/test/shell/bazel/path_mapping_test.sh