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;