You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2022/01/17 19:40:37 UTC
[maven] 01/01: [MNG-7381] Shorten parallel builder thread name to artifactId, conditionally with groupId
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch MNG-7381
in repository https://gitbox.apache.org/repos/asf/maven.git
commit ab4fec0a334698ff5f1ca5957c000a44cc6efd88
Author: Falko Modler <fa...@users.noreply.github.com>
AuthorDate: Sun Jan 16 22:17:08 2022 +0100
[MNG-7381] Shorten parallel builder thread name to artifactId, conditionally with groupId
This closes #662
---
.../multithreaded/MultiThreadedBuilder.java | 32 ++++++++++++++++++----
1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
index b513d46..4bf6810 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
@@ -21,6 +21,7 @@ package org.apache.maven.lifecycle.internal.builder.multithreaded;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
@@ -28,6 +29,8 @@ import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Named;
@@ -129,6 +132,14 @@ public class MultiThreadedBuilder
Map<MavenProject, ProjectSegment> projectBuildList,
ThreadOutputMuxer muxer )
{
+ // gather artifactIds which are not unique so that the respective thread names can be extended with the groupId
+ Set<String> duplicateArtifactIds = projectBuildList.keySet().stream()
+ .map( MavenProject::getArtifactId )
+ .collect( Collectors.groupingBy( Function.identity(), Collectors.counting() ) )
+ .entrySet().stream()
+ .filter( p -> p.getValue() > 1 )
+ .map( Map.Entry::getKey )
+ .collect( Collectors.toSet() );
// schedule independent projects
for ( MavenProject mavenProject : analyzer.getRootSchedulableBuilds() )
@@ -136,7 +147,8 @@ public class MultiThreadedBuilder
ProjectSegment projectSegment = projectBuildList.get( mavenProject );
logger.debug( "Scheduling: " + projectSegment.getProject() );
Callable<ProjectSegment> cb =
- createBuildCallable( rootSession, projectSegment, reactorContext, taskSegment, muxer );
+ createBuildCallable( rootSession, projectSegment, reactorContext, taskSegment, muxer,
+ duplicateArtifactIds );
service.submit( cb );
}
@@ -161,7 +173,8 @@ public class MultiThreadedBuilder
ProjectSegment scheduledDependent = projectBuildList.get( mavenProject );
logger.debug( "Scheduling: " + scheduledDependent );
Callable<ProjectSegment> cb =
- createBuildCallable( rootSession, scheduledDependent, reactorContext, taskSegment, muxer );
+ createBuildCallable( rootSession, scheduledDependent, reactorContext, taskSegment, muxer,
+ duplicateArtifactIds );
service.submit( cb );
}
}
@@ -183,19 +196,26 @@ public class MultiThreadedBuilder
private Callable<ProjectSegment> createBuildCallable( final MavenSession rootSession,
final ProjectSegment projectBuild,
final ReactorContext reactorContext,
- final TaskSegment taskSegment, final ThreadOutputMuxer muxer )
+ final TaskSegment taskSegment,
+ final ThreadOutputMuxer muxer,
+ final Set<String> duplicateArtifactIds )
{
return () ->
{
final Thread currentThread = Thread.currentThread();
final String originalThreadName = currentThread.getName();
- currentThread.setName( "mvn-builder-" + projectBuild.getProject().getId() );
+ final MavenProject project = projectBuild.getProject();
+
+ final String threadNameSuffix = duplicateArtifactIds.contains( project.getArtifactId() )
+ ? project.getGroupId() + ":" + project.getArtifactId()
+ : project.getArtifactId();
+ currentThread.setName( "mvn-builder-" + threadNameSuffix );
try
{
// muxer.associateThreadWithProjectSegment( projectBuild );
- lifecycleModuleBuilder.buildProject( projectBuild.getSession(), rootSession, reactorContext,
- projectBuild.getProject(), taskSegment );
+ lifecycleModuleBuilder.buildProject( projectBuild.getSession(), rootSession, reactorContext, project,
+ taskSegment );
// muxer.setThisModuleComplete( projectBuild );
return projectBuild;