You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2008/02/04 01:11:11 UTC
svn commit: r618128 - in /maven/sandbox/branches/maven/MNG-3379: ./
maven-artifact-manager/
maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/
maven-core/ maven-core/src/main/java/org/apache/maven/
Author: brett
Date: Sun Feb 3 16:11:10 2008
New Revision: 618128
URL: http://svn.apache.org/viewvc?rev=618128&view=rev
Log:
[MNG-3379] initial implementation of parallel artifact resolution
Submitted by: Don Brown
Modified:
maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/pom.xml
maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
maven/sandbox/branches/maven/MNG-3379/maven-core/pom.xml
maven/sandbox/branches/maven/MNG-3379/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
maven/sandbox/branches/maven/MNG-3379/pom.xml
Modified: maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/pom.xml?rev=618128&r1=618127&r2=618128&view=diff
==============================================================================
--- maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/pom.xml (original)
+++ maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/pom.xml Sun Feb 3 16:11:10 2008
@@ -55,6 +55,11 @@
<artifactId>wagon-provider-api</artifactId>
</dependency>
<dependency>
+ <groupId>backport-util-concurrent</groupId>
+ <artifactId>backport-util-concurrent</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
<groupId>easymock</groupId>
<artifactId>easymock</artifactId>
<version>1.2_Java1.3</version>
Modified: maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=618128&r1=618127&r2=618128&view=diff
==============================================================================
--- maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original)
+++ maven/sandbox/branches/maven/MNG-3379/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Sun Feb 3 16:11:10 2008
@@ -39,13 +39,12 @@
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
+
+import edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor;
+import edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue;
+import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
+import edu.emory.mathcs.backport.java.util.concurrent.CountDownLatch;
public class DefaultArtifactResolver
extends AbstractLogEnabled
@@ -62,6 +61,13 @@
protected ArtifactFactory artifactFactory;
private ArtifactCollector artifactCollector;
+ private final ThreadPoolExecutor resolveArtifactPool;
+
+ public DefaultArtifactResolver()
+ {
+ super();
+ resolveArtifactPool = new ThreadPoolExecutor(3, 5, 3, TimeUnit.SECONDS, new LinkedBlockingQueue());
+ }
// ----------------------------------------------------------------------
// Implementation
@@ -298,23 +304,37 @@
localRepository, remoteRepositories, source, filter,
listeners );
- List resolvedArtifacts = new ArrayList();
- List missingArtifacts = new ArrayList();
+ List resolvedArtifacts = Collections.synchronizedList(new ArrayList());
+ List missingArtifacts = Collections.synchronizedList(new ArrayList());
+ CountDownLatch latch = new CountDownLatch(artifactResolutionResult.getArtifactResolutionNodes().size());
+ Map nodesByGroupId = new HashMap();
for ( Iterator i = artifactResolutionResult.getArtifactResolutionNodes().iterator(); i.hasNext(); )
{
ResolutionNode node = (ResolutionNode) i.next();
- try
+ List nodes = (List) nodesByGroupId.get(node.getArtifact().getGroupId());
+ if (nodes == null)
{
- resolve( node.getArtifact(), node.getRemoteRepositories(), localRepository );
- resolvedArtifacts.add( node.getArtifact() );
+ nodes = new ArrayList();
+ nodesByGroupId.put(node.getArtifact().getGroupId(), nodes);
}
- catch ( ArtifactNotFoundException anfe )
- {
- getLogger().debug( anfe.getMessage(), anfe );
+ nodes.add(node);
+ }
- missingArtifacts.add( node.getArtifact() );
+ try {
+ for (Iterator i = nodesByGroupId.values().iterator(); i.hasNext(); )
+ {
+ List nodes = (List) i.next();
+ resolveArtifactPool.execute(new ResolveArtifactTask(resolveArtifactPool, latch, nodes, localRepository, resolvedArtifacts, missingArtifacts));
}
- }
+ latch.await();
+ } catch (InterruptedException e) {
+ throw new ArtifactResolutionException("Resolution interrupted", null, e);
+ } catch (RuntimeException ex) {
+ if (ex.getCause() instanceof ArtifactResolutionException)
+ throw (ArtifactResolutionException) ex.getCause();
+ else
+ throw ex;
+ }
if ( missingArtifacts.size() > 0 )
{
@@ -340,6 +360,53 @@
{
return resolveTransitively( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository,
remoteRepositories, source, null, listeners );
+ }
+
+ private class ResolveArtifactTask implements Runnable {
+ private List nodes;
+ private ArtifactRepository localRepository;
+ private List resolvedArtifacts;
+ private List missingArtifacts;
+ private CountDownLatch latch;
+ private ThreadPoolExecutor pool;
+
+ public ResolveArtifactTask(ThreadPoolExecutor pool, CountDownLatch latch, List nodes, ArtifactRepository localRepository, List resolvedArtifacts, List missingArtifacts) {
+ this.nodes = nodes;
+ this.localRepository = localRepository;
+ this.resolvedArtifacts = resolvedArtifacts;
+ this.missingArtifacts = missingArtifacts;
+ this.latch = latch;
+ this.pool = pool;
+ }
+
+ public void run() {
+ //getLogger().info("Size of nodes: "+nodes.size()+" on thread: "+Thread.currentThread().getId());
+ Iterator i = nodes.iterator();
+ ResolutionNode node = (ResolutionNode) i.next();
+ i.remove();
+ try {
+ resolveArtifact(node);
+ if (i.hasNext())
+ pool.execute(new ResolveArtifactTask(pool, latch, nodes, localRepository, resolvedArtifacts, missingArtifacts));
+ } catch (ArtifactResolutionException e) {
+ throw new RuntimeException(e);
+ }
+ latch.countDown();
+ }
+
+ private void resolveArtifact(ResolutionNode node) throws ArtifactResolutionException {
+ try
+ {
+ resolve( node.getArtifact(), node.getRemoteRepositories(), localRepository );
+ resolvedArtifacts.add( node.getArtifact() );
+ }
+ catch ( ArtifactNotFoundException anfe )
+ {
+ getLogger().debug( anfe.getMessage(), anfe );
+
+ missingArtifacts.add( node.getArtifact() );
+ }
+ }
}
}
Modified: maven/sandbox/branches/maven/MNG-3379/maven-core/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/maven/MNG-3379/maven-core/pom.xml?rev=618128&r1=618127&r2=618128&view=diff
==============================================================================
--- maven/sandbox/branches/maven/MNG-3379/maven-core/pom.xml (original)
+++ maven/sandbox/branches/maven/MNG-3379/maven-core/pom.xml Sun Feb 3 16:11:10 2008
@@ -114,8 +114,24 @@
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-http-lightweight</artifactId>
+ <artifactId>wagon-http</artifactId>
+ <classifier>shaded</classifier>
<scope>runtime</scope>
+ <exclusions>
+ <!-- would be nice if the shading process could write out a new POM :) -->
+ <exclusion>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.apache.maven.reporting</groupId>
Modified: maven/sandbox/branches/maven/MNG-3379/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/maven/MNG-3379/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java?rev=618128&r1=618127&r2=618128&view=diff
==============================================================================
--- maven/sandbox/branches/maven/MNG-3379/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java (original)
+++ maven/sandbox/branches/maven/MNG-3379/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java Sun Feb 3 16:11:10 2008
@@ -65,8 +65,11 @@
artifacts.add( "wagon-provider-api" );
artifacts.add( "wagon-file" );
artifacts.add( "wagon-http-lightweight" );
+ artifacts.add( "wagon-http" );
artifacts.add( "wagon-ssh" );
artifacts.add( "wagon-ssh-external" );
+ artifacts.add( "commons-httpclient" );
+ artifacts.add( "backport-util-concurrent" );
return new ExclusionSetFilter( artifacts );
}
Modified: maven/sandbox/branches/maven/MNG-3379/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/maven/MNG-3379/pom.xml?rev=618128&r1=618127&r2=618128&view=diff
==============================================================================
--- maven/sandbox/branches/maven/MNG-3379/pom.xml (original)
+++ maven/sandbox/branches/maven/MNG-3379/pom.xml Sun Feb 3 16:11:10 2008
@@ -266,27 +266,28 @@
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-provider-api</artifactId>
- <version>1.0-beta-2</version>
+ <version>1.0-rc1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
- <version>1.0-beta-2</version>
+ <version>1.0-rc1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
- <version>1.0-beta-2</version>
+ <version>1.0-rc1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-file</artifactId>
- <version>1.0-beta-2</version>
+ <version>1.0-rc1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-http-lightweight</artifactId>
- <version>1.0-beta-2</version>
+ <artifactId>wagon-http</artifactId>
+ <classifier>shaded</classifier>
+ <version>1.0-rc1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>easymock</groupId>