You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2019/07/14 08:44:45 UTC

[maven-resolver] branch buildfix created (now f5fa57c)

This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a change to branch buildfix
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git.


      at f5fa57c  temporal fix for hanging Maven builds

This branch includes the following new commits:

     new f5fa57c  temporal fix for hanging Maven builds

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-resolver] 01/01: temporal fix for hanging Maven builds

Posted by ti...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch buildfix
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git

commit f5fa57ca558bee21ef29ca91758bf59bcbfd4820
Author: tibordigana <ti...@apache.org>
AuthorDate: Sun Jul 14 10:44:34 2019 +0200

    temporal fix for hanging Maven builds
---
 .../src/it/resolve-artifact/invoker.properties     | 19 +++++++
 .../eclipse/aether/internal/impl/collect/Args.java |  4 +-
 .../aether/internal/impl/collect/DataPool.java     | 62 +++++++++++++---------
 .../impl/collect/DefaultDependencyCollector.java   | 10 ++--
 4 files changed, 61 insertions(+), 34 deletions(-)

diff --git a/maven-resolver-demos/maven-resolver-demo-maven-plugin/src/it/resolve-artifact/invoker.properties b/maven-resolver-demos/maven-resolver-demo-maven-plugin/src/it/resolve-artifact/invoker.properties
new file mode 100644
index 0000000..c256d0f
--- /dev/null
+++ b/maven-resolver-demos/maven-resolver-demo-maven-plugin/src/it/resolve-artifact/invoker.properties
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+invoker.maven.version=3.5.0+
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/Args.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/Args.java
index e2c1229..56f7250 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/Args.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/Args.java
@@ -27,7 +27,7 @@ import org.eclipse.aether.collection.CollectRequest;
 import org.eclipse.aether.util.ConfigUtils;
 import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
 
-class Args
+final class Args
 {
 
     final RepositorySystemSession session;
@@ -42,7 +42,7 @@ class Args
 
     final NodeStack nodes;
 
-    final DefaultDependencyCollectionContext collectionContext;
+    final DefaultDependencyCollectionContext collectionContext; // unused ???
 
     final DefaultVersionFilterContext versionContext;
 
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
index 10e9ab6..fedcc3a 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
@@ -20,11 +20,11 @@ package org.eclipse.aether.internal.impl.collect;
  */
 
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
@@ -61,24 +61,28 @@ final class DataPool
 
     private static final String DESCRIPTORS = DataPool.class.getName() + "$Descriptors";
 
-    public static final Future<ArtifactDescriptorResult> NO_DESCRIPTOR =
+    static final Future<ArtifactDescriptorResult> NO_DESCRIPTOR =
         new FutureResult<>( new ArtifactDescriptorResult( new ArtifactDescriptorRequest() ) );
 
-    private ObjectPool<Artifact> artifacts;
+    private final ObjectPool<Artifact> artifacts;
 
-    private ObjectPool<Dependency> dependencies;
+    private final ObjectPool<Dependency> dependencies;
 
-    private Map<Object, Descriptor> descriptors;
+    private final Map<Object, Descriptor> descriptors;
 
-    private Map<Object, Constraint> constraints = new HashMap<>();
+    private final Map<Object, Constraint> constraints = new ConcurrentHashMap<>();
 
-    private Map<Object, List<DependencyNode>> nodes = new HashMap<>( 256 );
+    private final Map<Object, List<DependencyNode>> nodes = new ConcurrentHashMap<>( 256 );
 
     @SuppressWarnings( "unchecked" )
     DataPool( RepositorySystemSession session )
     {
         RepositoryCache cache = session.getCache();
 
+        ObjectPool<Artifact> artifacts = null;
+        ObjectPool<Dependency> dependencies = null;
+        Map<Object, Descriptor> descriptors = null;
+
         if ( cache != null )
         {
             artifacts = (ObjectPool<Artifact>) cache.get( session, ARTIFACT_POOL );
@@ -95,6 +99,8 @@ final class DataPool
             }
         }
 
+        this.artifacts = artifacts;
+
         if ( dependencies == null )
         {
             dependencies = new ObjectPool<>();
@@ -104,6 +110,8 @@ final class DataPool
             }
         }
 
+        this.dependencies = dependencies;
+
         if ( descriptors == null )
         {
             descriptors = Collections.synchronizedMap( new WeakHashMap<Object, Descriptor>( 256 ) );
@@ -112,24 +120,26 @@ final class DataPool
                 cache.put( session, DESCRIPTORS, descriptors );
             }
         }
+
+        this.descriptors = descriptors;
     }
 
-    public Artifact intern( Artifact artifact )
+    Artifact intern( Artifact artifact )
     {
         return artifacts.intern( artifact );
     }
 
-    public Dependency intern( Dependency dependency )
+    Dependency intern( Dependency dependency )
     {
         return dependencies.intern( dependency );
     }
 
-    public Object toKey( ArtifactDescriptorRequest request )
+    Object toKey( ArtifactDescriptorRequest request )
     {
         return request.getArtifact();
     }
 
-    public Future<ArtifactDescriptorResult> getDescriptor( Object key, ArtifactDescriptorRequest request )
+    Future<ArtifactDescriptorResult> getDescriptor( Object key, ArtifactDescriptorRequest request )
     {
         Descriptor descriptor = descriptors.get( key );
         if ( descriptor != null )
@@ -139,22 +149,22 @@ final class DataPool
         return null;
     }
 
-    public void putDescriptor( Object key, Future<ArtifactDescriptorResult> futureResult )
+    void putDescriptor( Object key, Future<ArtifactDescriptorResult> futureResult )
     {
         descriptors.put( key, new GoodDescriptor( futureResult ) );
     }
 
-    public void putDescriptor( Object key, ArtifactDescriptorException exception )
+    void putDescriptor( Object key, ArtifactDescriptorException exception ) // unused param ???, type better method name
     {
         descriptors.put( key, BadDescriptor.INSTANCE );
     }
 
-    public Object toKey( VersionRangeRequest request )
+    Object toKey( VersionRangeRequest request )
     {
         return new ConstraintKey( request );
     }
 
-    public VersionRangeResult getConstraint( Object key, VersionRangeRequest request )
+    VersionRangeResult getConstraint( Object key, VersionRangeRequest request )
     {
         Constraint constraint = constraints.get( key );
         if ( constraint != null )
@@ -164,33 +174,33 @@ final class DataPool
         return null;
     }
 
-    public void putConstraint( Object key, VersionRangeResult result )
+    void putConstraint( Object key, VersionRangeResult result )
     {
         constraints.put( key, new Constraint( result ) );
     }
 
-    public Object toKey( Artifact artifact, DefaultDependencyCollectionContext context )
+    Object toKey( Artifact artifact, DefaultDependencyCollectionContext context )
     {
         return new GraphKey( artifact, context.getRepositories(), context.getDepSelector(),
                              context.getDepManager(), context.getDepTraverser(), context.getVerFilter() );
     }
 
-    public List<DependencyNode> getChildren( Object key )
+    List<DependencyNode> getChildren( Object key )
     {
         return nodes.get( key );
     }
 
-    public void putChildren( Object key, List<DependencyNode> children )
+    void putChildren( Object key, List<DependencyNode> children )
     {
         nodes.put( key, children );
     }
 
-    abstract static class Descriptor
+    private abstract static class Descriptor
     {
         public abstract Future<ArtifactDescriptorResult> toResult( ArtifactDescriptorRequest request );
     }
 
-    static final class GoodDescriptor
+    private static final class GoodDescriptor
         extends Descriptor
     {
         Future<ArtifactDescriptorResult> futureResult;
@@ -247,7 +257,7 @@ final class DataPool
         }
     }
 
-    static final class BadDescriptor
+    private static final class BadDescriptor
         extends Descriptor
     {
         static final BadDescriptor INSTANCE = new BadDescriptor();
@@ -258,7 +268,7 @@ final class DataPool
         }
     }
 
-    static final class Constraint
+    private static final class Constraint
     {
         final VersionRepo[] repositories;
 
@@ -276,7 +286,7 @@ final class DataPool
             }
         }
 
-        public VersionRangeResult toResult( VersionRangeRequest request )
+        VersionRangeResult toResult( VersionRangeRequest request )
         {
             VersionRangeResult result = new VersionRangeResult( request );
             for ( VersionRepo vr : repositories )
@@ -302,7 +312,7 @@ final class DataPool
         }
     }
 
-    static final class ConstraintKey
+    private static final class ConstraintKey
     {
         private final Artifact artifact;
 
@@ -376,7 +386,7 @@ final class DataPool
         }
     }
 
-    static final class GraphKey
+    private static final class GraphKey
     {
         private final Artifact artifact;
 
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollector.java
index 9d37435..d4647e4 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollector.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollector.java
@@ -36,10 +36,9 @@ import static java.util.Objects.requireNonNull;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
-import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -147,9 +146,8 @@ public class DefaultDependencyCollector
     {
         int numThreads = ConfigUtils.getInteger( session, DEFAULT_THREADS, CONFIG_PROP_THREADS );
         LOGGER.debug( "{} = {} ", CONFIG_PROP_THREADS, numThreads );
-        ThreadPoolExecutor executor = new ThreadPoolExecutor(
-                numThreads, numThreads, 3L, TimeUnit.SECONDS,
-                new LinkedBlockingQueue<Runnable>(), new WorkerThreadFactory( "artifact-descriptor-resolver" ) );
+        ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool(
+                new WorkerThreadFactory( "artifact-descriptor-resolver" ) );
         try
         {
             return collectDependenciesWithExecutor( session, request, executor );
@@ -517,7 +515,7 @@ public class DefaultDependencyCollector
         }
     }
 
-    private boolean processDependencyVersion( DependencyContext dc )
+    private boolean processDependencyVersion( DependencyContext dc ) // warning - returned value is never used !!!
     {
         Args args = dc.context.getArgs();
         Results results = dc.context.getResults();