Author: bentmann Date: Thu May 28 21:13:19 2009 New Revision: 779772 URL: http://svn.apache.org/viewvc?rev=779772&view=rev Log: [MNG-4179] [regression] Artifact download hangs upon transfer failure
o Merged from r779768 Modified: maven/components/branches/maven-2.1.x/ (props changed) maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java maven/components/branches/maven-2.1.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java Propchange: maven/components/branches/maven-2.1.x/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu May 28 21:13:19 2009 @@ -3,6 +3,6 @@ /maven/components/branches/maven-2.1.0-M1-RC:690315,691793-694304 /maven/components/branches/maven-2.1.0-RC:688883,689695,689976,689990,752168,752428,752622,752653,753089-753090,753320,755086,755199,755215 /maven/components/branches/maven-2.1.x:751686 -/maven/components/branches/maven-2.2.x:769913 +/maven/components/branches/maven-2.2.x:769913,779768 /maven/components/trunk:572229,720001,721902,726845,729292 /maven/sandbox/branches/maven/MNG-3379:678167 Modified: maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=779772&r1=779771&r2=779772&view=diff ============================================================================== --- maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original) +++ maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Thu May 28 21:13:19 2009 @@ -431,11 +431,6 @@ try { resolveArtifact( node ); - if ( i.hasNext() ) - { - pool.execute( new ResolveArtifactTask( pool, latch, nodes, localRepository, resolvedArtifacts, - missingArtifacts, resolutionExceptions ) ); - } } catch ( ArtifactResolutionException e ) { @@ -444,6 +439,12 @@ finally { latch.countDown(); + + if ( i.hasNext() ) + { + pool.execute( new ResolveArtifactTask( pool, latch, nodes, localRepository, resolvedArtifacts, + missingArtifacts, resolutionExceptions ) ); + } } } Modified: maven/components/branches/maven-2.1.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java?rev=779772&r1=779771&r2=779772&view=diff ============================================================================== --- maven/components/branches/maven-2.1.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java (original) +++ maven/components/branches/maven-2.1.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java Thu May 28 21:13:19 2009 @@ -361,5 +361,60 @@ control.verify(); } + + /** + * Test deadlocking in case a transfer error occurs within a group of multiple artifacts (MNG-4179). + */ + public void testResolveMultipleWithException() + throws Exception + { + ArtifactRepository repository = remoteRepository(); + List remoteRepositories = Collections.singletonList( repository ); + + Artifact a1 = createArtifact( "testGroup", "artifactId", "1.0", "jar" ); + + Artifact a2 = createArtifact( "testGroup", "anotherId", "1.0", "jar" ); + + ArtifactMetadataSource mds = new ArtifactMetadataSourceImplementation(); + + DefaultArtifactResolver artifactResolver = (DefaultArtifactResolver) this.artifactResolver; + + MockControl control = MockControl.createControl( WagonManager.class ); + WagonManager wagonManager = (WagonManager) control.getMock(); + artifactResolver.setWagonManager( wagonManager ); + + wagonManager.isOnline(); + control.setReturnValue( true ); + wagonManager.getArtifact( a1, remoteRepositories ); + control.setThrowable( new TransferFailedException( "message" ) ); + wagonManager.getMirrorRepository( repository ); + control.setReturnValue( repository ); + + wagonManager.isOnline(); + control.setReturnValue( true ); + wagonManager.getArtifact( a2, remoteRepositories ); + control.setThrowable( new TransferFailedException( "message" ) ); + wagonManager.getMirrorRepository( repository ); + control.setReturnValue( repository ); + + control.replay(); + + try + { + artifactResolver.resolveTransitively( new LinkedHashSet( Arrays.asList( new Artifact[] { a1, a2 } ) ), + projectArtifact, remoteRepositories, localRepository(), mds ); + fail( "Resolution succeeded when it should have failed" ); + } + catch ( ArtifactResolutionException expected ) + { + List repos = expected.getRemoteRepositories(); + assertEquals( 1, repos.size() ); + assertEquals( "test", ( (ArtifactRepository) repos.get( 0 ) ).getId() ); + + assertEquals( "testGroup", expected.getGroupId() ); + } + + control.verify(); + } }