You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/05/28 23:13:19 UTC

svn commit: r779772 - in /maven/components/branches/maven-2.1.x: ./ maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/ maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/

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();
+    }
 }