[
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/18/15 12:31 AM:
--------------------------------------------------------------------
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 session is being cloned, but
all cloned sessions share original projects. if some session mutates project
instance - it actually does it globally. that could potentially results 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 sessions share original projects. if some
session mutates somehow project instance - 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)