diff options
Diffstat (limited to 'src/main/java')
2 files changed, 16 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java index 160c2ae4fc..dfb4bdee98 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java +++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java @@ -25,7 +25,6 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.base.Strings; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -65,6 +64,8 @@ import io.grpc.StatusException; import java.time.Duration; import java.util.Collection; import java.util.Deque; +import java.util.HashMap; +import java.util.Map; import java.util.Set; import java.util.concurrent.BlockingDeque; import java.util.concurrent.Callable; @@ -343,12 +344,14 @@ public class BuildEventServiceTransport implements BuildEventTransport { } Collection<LocalFile> localFiles = event.referencedLocalFiles(); - ImmutableMap.Builder<Path, LocalFile> localFileMap = - ImmutableMap.builderWithExpectedSize(localFiles.size()); + Map<Path, LocalFile> localFileMap = new HashMap<>(localFiles.size()); for (LocalFile localFile : localFiles) { - localFileMap.put(localFile.path, localFile); + // It is possible for targets to have duplicate artifacts (same path but different owners) + // in their output groups. Since they didn't trigger an artifact conflict they are the + // same file, so just skip either one + localFileMap.putIfAbsent(localFile.path, localFile); } - ListenableFuture<PathConverter> upload = artifactUploader.upload(localFileMap.build()); + ListenableFuture<PathConverter> upload = artifactUploader.upload(localFileMap); InternalOrderedBuildEvent buildEvent = new DefaultInternalOrderedBuildEvent( event, namer, upload, besProtoUtil.nextSequenceNumber(), timestamp()); diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/FileTransport.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/FileTransport.java index e8391a37d9..24689f7073 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/FileTransport.java +++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/FileTransport.java @@ -20,7 +20,6 @@ import static java.lang.String.format; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; import com.google.common.base.Throwables; -import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -48,6 +47,8 @@ import java.io.OutputStream; import java.time.Duration; import java.time.Instant; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; @@ -254,12 +255,14 @@ abstract class FileTransport implements BuildEventTransport { */ private ListenableFuture<PathConverter> uploadReferencedFiles(Collection<LocalFile> localFiles) { checkNotNull(localFiles); - ImmutableMap.Builder<Path, LocalFile> localFileMap = - ImmutableMap.builderWithExpectedSize(localFiles.size()); + Map<Path, LocalFile> localFileMap = new HashMap<>(localFiles.size()); for (LocalFile localFile : localFiles) { - localFileMap.put(localFile.path, localFile); + // It is possible for targets to have duplicate artifacts (same path but different owners) + // in their output groups. Since they didn't trigger an artifact conflict they are the + // same file, so just skip either one + localFileMap.putIfAbsent(localFile.path, localFile); } - ListenableFuture<PathConverter> upload = uploader.upload(localFileMap.build()); + ListenableFuture<PathConverter> upload = uploader.upload(localFileMap); Futures.addCallback( upload, new FutureCallback<PathConverter>() { |