Skip to content

Commit 798b9a9

Browse files
meteorcloudyCopybara-Service
authored and
Copybara-Service
committed
Add --build_event_upload_max_threads option
This is a follow up for 7fc967c, related issue #6806 RELNOTES: None PiperOrigin-RevId: 223944430
1 parent 8ae6e12 commit 798b9a9

File tree

4 files changed

+27
-10
lines changed

4 files changed

+27
-10
lines changed

src/main/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploader.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,30 @@
4141
*/
4242
class ByteStreamBuildEventArtifactUploader implements BuildEventArtifactUploader {
4343

44-
private final ListeningExecutorService uploadExecutor =
45-
MoreExecutors.listeningDecorator(
46-
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()));
44+
private final ListeningExecutorService uploadExecutor;
4745
private final Context ctx;
4846
private final ByteStreamUploader uploader;
4947
private final String remoteServerInstanceName;
5048

5149
private final AtomicBoolean shutdown = new AtomicBoolean();
5250

5351
ByteStreamBuildEventArtifactUploader(
54-
ByteStreamUploader uploader, String remoteServerName, Context ctx,
55-
@Nullable String remoteInstanceName) {
52+
ByteStreamUploader uploader,
53+
String remoteServerName,
54+
Context ctx,
55+
@Nullable String remoteInstanceName,
56+
int maxUploadThreads) {
5657
this.uploader = Preconditions.checkNotNull(uploader);
5758
String remoteServerInstanceName = Preconditions.checkNotNull(remoteServerName);
5859
if (!Strings.isNullOrEmpty(remoteInstanceName)) {
5960
remoteServerInstanceName += "/" + remoteInstanceName;
6061
}
6162
this.ctx = ctx;
6263
this.remoteServerInstanceName = remoteServerInstanceName;
64+
// Limit the maximum threads number to 1000 (chosen arbitrarily)
65+
this.uploadExecutor =
66+
MoreExecutors.listeningDecorator(
67+
Executors.newFixedThreadPool(Math.min(maxUploadThreads, 1000)));
6368
}
6469

6570
@Override

src/main/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploaderFactory.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ class ByteStreamBuildEventArtifactUploaderFactory implements
4141

4242
@Override
4343
public BuildEventArtifactUploader create(CommandEnvironment env) {
44-
return new ByteStreamBuildEventArtifactUploader(uploader.retain(), remoteServerName, ctx,
45-
remoteInstanceName);
44+
return new ByteStreamBuildEventArtifactUploader(
45+
uploader.retain(),
46+
remoteServerName,
47+
ctx,
48+
remoteInstanceName,
49+
env.getOptions().getOptions(RemoteOptions.class).buildEventUploadMaxThreads);
4650
}
4751
}

src/main/java/com/google/devtools/build/lib/remote/RemoteOptions.java

+8
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,14 @@ public final class RemoteOptions extends OptionsBase {
252252
+ "symlinks and represent them as files. See #6631 for details.")
253253
public boolean incompatibleRemoteSymlinks;
254254

255+
@Option(
256+
name = "build_event_upload_max_threads",
257+
defaultValue = "100",
258+
documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
259+
effectTags = {OptionEffectTag.UNKNOWN},
260+
help = "The number of threads used to do build event uploads. Capped at 1000.")
261+
public int buildEventUploadMaxThreads;
262+
255263
@Deprecated
256264
@Option(
257265
name = "remote_allow_symlink_upload",

src/test/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploaderTest.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public void uploadsShouldWork() throws Exception {
145145
new ByteStreamUploader("instance", refCntChannel, null, 3, retrier);
146146
ByteStreamBuildEventArtifactUploader artifactUploader =
147147
new ByteStreamBuildEventArtifactUploader(
148-
uploader, "localhost", withEmptyMetadata, "instance");
148+
uploader, "localhost", withEmptyMetadata, "instance", /* maxUploadThreads= */ 100);
149149

150150
PathConverter pathConverter = artifactUploader.upload(filesToUpload).get();
151151
for (Path file : filesToUpload.keySet()) {
@@ -171,7 +171,7 @@ public void testUploadDirectoryDoesNotCrash() throws Exception {
171171
ByteStreamUploader uploader = mock(ByteStreamUploader.class);
172172
ByteStreamBuildEventArtifactUploader artifactUploader =
173173
new ByteStreamBuildEventArtifactUploader(
174-
uploader, "localhost", withEmptyMetadata, "instance");
174+
uploader, "localhost", withEmptyMetadata, "instance", /* maxUploadThreads= */ 100);
175175
PathConverter pathConverter = artifactUploader.upload(filesToUpload).get();
176176
assertThat(pathConverter.apply(dir)).isNull();
177177
artifactUploader.shutdown();
@@ -234,7 +234,7 @@ public void onCompleted() {
234234
new ByteStreamUploader("instance", refCntChannel, null, 3, retrier);
235235
ByteStreamBuildEventArtifactUploader artifactUploader =
236236
new ByteStreamBuildEventArtifactUploader(
237-
uploader, "localhost", withEmptyMetadata, "instance");
237+
uploader, "localhost", withEmptyMetadata, "instance", /* maxUploadThreads= */ 100);
238238

239239
try {
240240
artifactUploader.upload(filesToUpload).get();

0 commit comments

Comments
 (0)