aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildeventstream/transports/FileTransport.java13
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>() {