[ 
https://issues.apache.org/jira/browse/MNG-5750?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14962106#comment-14962106
 ] 

Alexander Ashitkin edited comment on MNG-5750 at 10/17/15 10:49 PM:
--------------------------------------------------------------------

Could you please share your vision on following place 
(org/apache/maven/lifecycle/internal/BuildListCalculator.java:60):
{code}
           for ( MavenProject project : projects )
            {
                BuilderCommon.attachToThread( project );
                MavenSession copiedSession = session.clone(); // suspicious 
place
                List<MavenProject> copiedSessionProjects = 
copiedSession.getProjects();
{code}
Could be here an intention for deep copy? Because debug shows althougs the 
session is being cloned, all created sessions share original projects. if some 
session mutates somehow project - it actually does it globally. that could 
potentially result in the issue and explains why my fix worked.

I modified code like this:
{code}
            for ( MavenProject project : projects )
            {
                BuilderCommon.attachToThread( project ); // Not totally sure if 
this is needed for anything
                MavenSession copiedSession = session.clone();
                List<MavenProject> copiedSessionProjects = 
copiedSession.getProjects();

                for ( int i = 0; i < copiedSessionProjects.size(); i++ )
                {
                    MavenProject mavenProject = copiedSessionProjects.get( i );
                    MavenProject original = session.getProjects().get( i );
                    System.err.println( "Cloned session: " + 
System.identityHashCode( copiedSession )
                            + ", project "
                            + mavenProject.getArtifactId() + " shared: " + ( 
mavenProject == original ) );
                }
{code}
which gives following output on maven project itself:
{code}
c:\dev\maven-project>mvn clean instal-T 8 -q
Cloned session: 234740890, project maven shared: true
Cloned session: 234740890, project maven-modeshared: true
Cloned session: 234740890, project maven-artifact shared: true
Cloned session: 234740890, project maven-plugin-apshared: true
Cloned session: 234740890, project maven-builder-support shared: true
Cloned session: 234740890, project maven-model-builder shared: true
Cloned session: 234740890, project maven-settingshared: true
Cloned session: 234740890, project maven-settings-builder shared: true
Cloned session: 234740890, project maven-repository-metadatshared: true
Cloned session: 234740890, project maven-aether-provider shared: true
Cloned session: 234740890, project maven-corshared: true
Cloned session: 234740890, project maven-compat shared: true
Cloned session: 234740890, project maven-embedder shared: true
Cloned session: 234740890, project apache-maven shared: true
Cloned session: 79290250, project maven shared: true
Cloned session: 79290250, project maven-modeshared: true
Cloned session: 79290250, project maven-artifact shared: true
Cloned session: 79290250, project maven-plugin-apshared: true
Cloned session: 79290250, project maven-builder-support shared: true
Cloned session: 79290250, project maven-model-builder shared: true
Cloned session: 79290250, project maven-settingshared: true
Cloned session: 79290250, project maven-settings-builder shared: true
Cloned session: 79290250, project maven-repository-metadatshared: true
Cloned session: 79290250, project maven-aether-provider shared: true
Cloned session: 79290250, project maven-corshared: true
Cloned session: 79290250, project maven-compat shared: true
Cloned session: 79290250, project maven-embedder shared: true
Cloned session: 79290250, project apache-maven shared: true
Cloned session: 1586151649, project maven shared: true
Cloned session: 1586151649, project maven-modeshared: true
Cloned session: 1586151649, project maven-artifact shared: true
Cloned session: 1586151649, project maven-plugin-apshared: true
Cloned session: 1586151649, project maven-builder-support shared: true
Cloned session: 1586151649, project maven-model-builder shared: true
Cloned session: 1586151649, project maven-settingshared: true
Cloned session: 1586151649, project maven-settings-builder shared: true
Cloned session: 1586151649, project maven-repository-metadatshared: true
Cloned session: 1586151649, project maven-aether-provider shared: true
Cloned session: 1586151649, project maven-corshared: true
Cloned session: 1586151649, project maven-compat shared: true
Cloned session: 1586151649, project maven-embedder shared: true
Cloned session: 1586151649, project apache-maven shared: true
Cloned session: 179294202, project maven shared: true
.....
{code}

please share your thoughts

thanks in advance, Alexander


was (Author: alexander ashitkin):
Could you please share your vision on following place 
(org/apache/maven/lifecycle/internal/BuildListCalculator.java:60):
{code}
           for ( MavenProject project : projects )
            {
                BuilderCommon.attachToThread( project );
                MavenSession copiedSession = session.clone(); // suspicious 
place
                List<MavenProject> copiedSessionProjects = 
copiedSession.getProjects();
{code}
Could be here an intention for deep copy? Because debug shows althougs the 
session is being cloned, all created session share original projects. if some 
session mutates somehow project - it actually does it globally. that could 
potentially result in the issue and explains why my fix worked.

I modified code like this:
{code}
            for ( MavenProject project : projects )
            {
                BuilderCommon.attachToThread( project ); // Not totally sure if 
this is needed for anything
                MavenSession copiedSession = session.clone();
                List<MavenProject> copiedSessionProjects = 
copiedSession.getProjects();

                for ( int i = 0; i < copiedSessionProjects.size(); i++ )
                {
                    MavenProject mavenProject = copiedSessionProjects.get( i );
                    MavenProject original = session.getProjects().get( i );
                    System.err.println( "Cloned session: " + 
System.identityHashCode( copiedSession )
                            + ", project "
                            + mavenProject.getArtifactId() + " shared: " + ( 
mavenProject == original ) );
                }
{code}
which gives following output on maven project itself:
{code}
c:\dev\maven-project>mvn clean instal-T 8 -q
Cloned session: 234740890, project maven shared: true
Cloned session: 234740890, project maven-modeshared: true
Cloned session: 234740890, project maven-artifact shared: true
Cloned session: 234740890, project maven-plugin-apshared: true
Cloned session: 234740890, project maven-builder-support shared: true
Cloned session: 234740890, project maven-model-builder shared: true
Cloned session: 234740890, project maven-settingshared: true
Cloned session: 234740890, project maven-settings-builder shared: true
Cloned session: 234740890, project maven-repository-metadatshared: true
Cloned session: 234740890, project maven-aether-provider shared: true
Cloned session: 234740890, project maven-corshared: true
Cloned session: 234740890, project maven-compat shared: true
Cloned session: 234740890, project maven-embedder shared: true
Cloned session: 234740890, project apache-maven shared: true
Cloned session: 79290250, project maven shared: true
Cloned session: 79290250, project maven-modeshared: true
Cloned session: 79290250, project maven-artifact shared: true
Cloned session: 79290250, project maven-plugin-apshared: true
Cloned session: 79290250, project maven-builder-support shared: true
Cloned session: 79290250, project maven-model-builder shared: true
Cloned session: 79290250, project maven-settingshared: true
Cloned session: 79290250, project maven-settings-builder shared: true
Cloned session: 79290250, project maven-repository-metadatshared: true
Cloned session: 79290250, project maven-aether-provider shared: true
Cloned session: 79290250, project maven-corshared: true
Cloned session: 79290250, project maven-compat shared: true
Cloned session: 79290250, project maven-embedder shared: true
Cloned session: 79290250, project apache-maven shared: true
Cloned session: 1586151649, project maven shared: true
Cloned session: 1586151649, project maven-modeshared: true
Cloned session: 1586151649, project maven-artifact shared: true
Cloned session: 1586151649, project maven-plugin-apshared: true
Cloned session: 1586151649, project maven-builder-support shared: true
Cloned session: 1586151649, project maven-model-builder shared: true
Cloned session: 1586151649, project maven-settingshared: true
Cloned session: 1586151649, project maven-settings-builder shared: true
Cloned session: 1586151649, project maven-repository-metadatshared: true
Cloned session: 1586151649, project maven-aether-provider shared: true
Cloned session: 1586151649, project maven-corshared: true
Cloned session: 1586151649, project maven-compat shared: true
Cloned session: 1586151649, project maven-embedder shared: true
Cloned session: 1586151649, project apache-maven shared: true
Cloned session: 179294202, project maven shared: true
.....
{code}

please share your thoughts

thanks in advance, Alexander

> Sporadic failures in concurrent build
> -------------------------------------
>
>                 Key: MNG-5750
>                 URL: https://issues.apache.org/jira/browse/MNG-5750
>             Project: Maven
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 3.1.1, 3.2.1, 3.2.2, 3.2.5
>         Environment: SLES 3.0.80-0.7-default SMP x86_64 GNU/Linux Oracle 
> HotSpot JDK 7u25
> windows server 2008 x64 Oracle HotSpot JDK 7u65/8u25
>            Reporter: Alexander Ashitkin
>            Priority: Critical
>
> We have a large project of 300+ modules which regularly fails with different 
> kind of errors in different places. The issue is reliably reproduced with 
> parallel build and is not happens in single threaded. The optimal concurrency 
> level for our project ~10 threads. At this level ~%20 of builds fail. To 
> workaround the issue we reduced concurrency to 4 in development builds and 
> reverted production build to 1 thread.
> Main point of failures:
> # Surefire ClassNotFound. Reported and investigated in SUREFIRE-1132. Points 
> to a problem with MavenProject#getArtifacts - empty set unexpectedly returned.
> # Compiler - unexpected failure because of incorrect classpath (literally all 
> dependencies are not on the classpath), like: {code}
> 20:20:54 [ERROR] /D:/jenkins/work/workspace/..Request.java:[3,30] package ... 
> does not exist
> 20:20:54 [ERROR] /D:/jenkins/work/workspace/..Request.java:[4,30] package ... 
> does not exist
> 20:20:54 [ERROR] /D:/jenkins/work/workspace/..Request.java:[8,25] package ... 
> does not exist
> 20:20:54 [ERROR] /D:/jenkins/work/workspace/..Request.java:[9,21] package 
> org.joda.time does not exist
> 20:20:54 [ERROR] /D:/jenkins/work/workspace/..Request.java:[11,37] package 
> com.google.common.base does not exist
> 20:20:54 [ERROR] /D:/jenkins/work/workspace/..Request.java:[11,1] static 
> import only from classes and interfaces
> 20:20:54 [ERROR] /D:/jenkins/work/workspace/..Request.java:[12,37] package 
> com.google.common.base does not exist
> 20:20:54 [ERROR] /D:/jenkins/work/workspace/..Request.java:[12,1] static 
> import only from classes and interfaces
> {code}
> # Jar - unexpected NPE. Reported with stack traces in MJAR-192. (assembly 
> plusgin seems to be also affected)
> At this point the issue looks like problem with MavenProject#getArtifacts in 
> concurrent builds.
> To help with the issue im happy to implement or evaluate any custom assembly 
> to trace this down. Unfortunately i cannot submit my project - it is 
> proprietary.
> Thanks in advance, Alexander



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to