You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2021/06/25 08:39:19 UTC

[maven] branch MNG-6843 created (now ddfa24c)

This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a change to branch MNG-6843
in repository https://gitbox.apache.org/repos/asf/maven.git.


      at ddfa24c  Thread-safe artifacts in MavenProject

This branch includes the following new commits:

     new ddfa24c  Thread-safe artifacts in MavenProject

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven] 01/01: Thread-safe artifacts in MavenProject

Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MNG-6843
in repository https://gitbox.apache.org/repos/asf/maven.git

commit ddfa24ce7ffe6e176ca11d7d2cc46594a4ba01e5
Author: Falko Modler <fa...@users.noreply.github.com>
AuthorDate: Sun Dec 20 21:59:38 2020 +0100

    Thread-safe artifacts in MavenProject
    
    Avoids concurrency issues when aggregator plugins are involved.
---
 .../org/apache/maven/project/MavenProject.java     | 56 ++++++++++++----------
 1 file changed, 31 insertions(+), 25 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
index 57069a5..0fce71a 100644
--- a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
@@ -111,10 +111,6 @@ public class MavenProject
 
     private Set<Artifact> resolvedArtifacts;
 
-    private ArtifactFilter artifactFilter;
-
-    private Set<Artifact> artifacts;
-
     private Artifact parentArtifact;
 
     private Set<Artifact> pluginArtifacts;
@@ -151,8 +147,8 @@ public class MavenProject
 
     private Artifact artifact;
 
-    // calculated.
-    private Map<String, Artifact> artifactMap;
+    private final ThreadLocal<ArtifactsHolder> threadLocalArtifactsHolder =
+        ThreadLocal.withInitial( ArtifactsHolder::new );
 
     private Model originalModel;
 
@@ -695,10 +691,11 @@ public class MavenProject
 
     public void setArtifacts( Set<Artifact> artifacts )
     {
-        this.artifacts = artifacts;
+        ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+        artifactsHolder.artifacts = artifacts;
 
         // flush the calculated artifactMap
-        artifactMap = null;
+        artifactsHolder.artifactMap = null;
     }
 
     /**
@@ -711,34 +708,36 @@ public class MavenProject
      */
     public Set<Artifact> getArtifacts()
     {
-        if ( artifacts == null )
+        ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+        if ( artifactsHolder.artifacts == null )
         {
-            if ( artifactFilter == null || resolvedArtifacts == null )
+            if ( artifactsHolder.artifactFilter == null || resolvedArtifacts == null )
             {
-                artifacts = new LinkedHashSet<>();
+                artifactsHolder.artifacts = new LinkedHashSet<>();
             }
             else
             {
-                artifacts = new LinkedHashSet<>( resolvedArtifacts.size() * 2 );
+                artifactsHolder.artifacts = new LinkedHashSet<>( resolvedArtifacts.size() * 2 );
                 for ( Artifact artifact : resolvedArtifacts )
                 {
-                    if ( artifactFilter.include( artifact ) )
+                    if ( artifactsHolder.artifactFilter.include( artifact ) )
                     {
-                        artifacts.add( artifact );
+                        artifactsHolder.artifacts.add( artifact );
                     }
                 }
             }
         }
-        return artifacts;
+        return artifactsHolder.artifacts;
     }
 
     public Map<String, Artifact> getArtifactMap()
     {
-        if ( artifactMap == null )
+        ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+        if ( artifactsHolder.artifactMap == null )
         {
-            artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() );
+            artifactsHolder.artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() );
         }
-        return artifactMap;
+        return artifactsHolder.artifactMap;
     }
 
     public void setPluginArtifacts( Set<Artifact> pluginArtifacts )
@@ -1428,8 +1427,9 @@ public class MavenProject
     public void setResolvedArtifacts( Set<Artifact> artifacts )
     {
         this.resolvedArtifacts = ( artifacts != null ) ? artifacts : Collections.<Artifact>emptySet();
-        this.artifacts = null;
-        this.artifactMap = null;
+        ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+        artifactsHolder.artifacts = null;
+        artifactsHolder.artifactMap = null;
     }
 
     /**
@@ -1442,9 +1442,10 @@ public class MavenProject
      */
     public void setArtifactFilter( ArtifactFilter artifactFilter )
     {
-        this.artifactFilter = artifactFilter;
-        this.artifacts = null;
-        this.artifactMap = null;
+        ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+        artifactsHolder.artifactFilter = artifactFilter;
+        artifactsHolder.artifacts = null;
+        artifactsHolder.artifactMap = null;
     }
 
     /**
@@ -1839,7 +1840,6 @@ public class MavenProject
         {
             reportArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getReportArtifacts() );
         }
-
         return reportArtifactMap;
     }
 
@@ -1864,7 +1864,6 @@ public class MavenProject
         {
             extensionArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getExtensionArtifacts() );
         }
-
         return extensionArtifactMap;
     }
 
@@ -1986,4 +1985,11 @@ public class MavenProject
     {
         this.projectBuilderConfiguration = projectBuildingRequest;
     }
+
+    private static class ArtifactsHolder
+    {
+        private ArtifactFilter artifactFilter;
+        private Set<Artifact> artifacts;
+        private Map<String, Artifact> artifactMap;
+    }
 }