From 9e4b124af59fa28f38cb931cc51a9b1bbd31847d Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 22 Jun 2022 22:03:24 +0200 Subject: [PATCH 1/3] WIP --- ...DefaultRepositorySystemSessionFactory.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java index 40f3592a5923..8b73a7a858ae 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java @@ -81,6 +81,20 @@ public class DefaultRepositorySystemSessionFactory private static final String RESOLVER_MAX_PRIORITY = String.valueOf( Float.MAX_VALUE ); + private static final String MAVEN_RESOLVER_LOCKING_KEY = "maven.resolver.locking"; + + private static final String MAVEN_RESOLVER_LOCKING_DEFAULT = "default"; + + private static final String MAVEN_RESOLVER_LOCKING_LOCAL = "local"; + + private static final String MAVEN_RESOLVER_LOCKING_FILE = "file"; + + private static final String MAVEN_RESOLVER_LOCKING_AUTO = "auto"; + + private static final String MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY = "aether.syncContext.named.factory"; + + private static final String MAVEN_RESOLVER_LOCKING_NAME_MAPPER_KEY = "aether.syncContext.named.nameMapper"; + @Inject private Logger logger; @@ -282,6 +296,25 @@ else if ( !MAVEN_RESOLVER_TRANSPORT_AUTO.equals( transport ) ) + MAVEN_RESOLVER_TRANSPORT_NATIVE + ", " + MAVEN_RESOLVER_TRANSPORT_AUTO ); } + Object locking = configProps.getOrDefault( MAVEN_RESOLVER_LOCKING_KEY, MAVEN_RESOLVER_LOCKING_DEFAULT ); + if ( MAVEN_RESOLVER_LOCKING_DEFAULT.equals( locking ) || MAVEN_RESOLVER_LOCKING_FILE.equals( locking ) ) + { + // The "default" mode (user did not set anything) is same as "file" mode + configProps.put( MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY, "file-lock" ); + configProps.put( MAVEN_RESOLVER_LOCKING_NAME_MAPPER_KEY, "file-gav" ); + } + else if ( MAVEN_RESOLVER_LOCKING_LOCAL.equals( locking ) ) + { + configProps.put( MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY, "rwlock-local" ); + configProps.put( MAVEN_RESOLVER_LOCKING_NAME_MAPPER_KEY, "gav" ); + } + else if ( !MAVEN_RESOLVER_LOCKING_AUTO.equals( locking ) ) + { + throw new IllegalArgumentException( "Unknown resolver locking mode '" + transport + + "'. Supported locking modes are: " + MAVEN_RESOLVER_LOCKING_FILE + ", " + + MAVEN_RESOLVER_LOCKING_LOCAL + ", " + MAVEN_RESOLVER_LOCKING_AUTO ); + } + session.setTransferListener( request.getTransferListener() ); session.setRepositoryListener( eventSpyDispatcher.chainListener( new LoggingRepositoryListener( logger ) ) ); From ab44914452e21e22d70f05934439a04f1ba2c5ff Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Fri, 24 Jun 2022 12:55:18 +0200 Subject: [PATCH 2/3] Add more user friendly(er) locking modes. --- .../DefaultRepositorySystemSessionFactory.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java index 8b73a7a858ae..f57ff4b9bd04 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java @@ -89,6 +89,10 @@ public class DefaultRepositorySystemSessionFactory private static final String MAVEN_RESOLVER_LOCKING_FILE = "file"; + private static final String MAVEN_RESOLVER_LOCKING_HAZELCAST = "hazelcast"; + + private static final String MAVEN_RESOLVER_LOCKING_REDISSON = "redisson"; + private static final String MAVEN_RESOLVER_LOCKING_AUTO = "auto"; private static final String MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY = "aether.syncContext.named.factory"; @@ -308,6 +312,16 @@ else if ( MAVEN_RESOLVER_LOCKING_LOCAL.equals( locking ) ) configProps.put( MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY, "rwlock-local" ); configProps.put( MAVEN_RESOLVER_LOCKING_NAME_MAPPER_KEY, "gav" ); } + else if ( MAVEN_RESOLVER_LOCKING_HAZELCAST.equals( locking ) ) + { + configProps.put( MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY, "semaphore-hazelcast-client" ); + configProps.put( MAVEN_RESOLVER_LOCKING_NAME_MAPPER_KEY, "discriminating" ); + } + else if ( MAVEN_RESOLVER_LOCKING_REDISSON.equals( locking ) ) + { + configProps.put( MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY, "rwlock-redisson" ); + configProps.put( MAVEN_RESOLVER_LOCKING_NAME_MAPPER_KEY, "discriminating" ); + } else if ( !MAVEN_RESOLVER_LOCKING_AUTO.equals( locking ) ) { throw new IllegalArgumentException( "Unknown resolver locking mode '" + transport From 7faf7b1fde98a25bea44dcd02dda1f956c92484a Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Fri, 24 Jun 2022 13:12:03 +0200 Subject: [PATCH 3/3] local is the default --- .../DefaultRepositorySystemSessionFactory.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java index f57ff4b9bd04..83fd8a596792 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java @@ -301,17 +301,17 @@ else if ( !MAVEN_RESOLVER_TRANSPORT_AUTO.equals( transport ) ) } Object locking = configProps.getOrDefault( MAVEN_RESOLVER_LOCKING_KEY, MAVEN_RESOLVER_LOCKING_DEFAULT ); - if ( MAVEN_RESOLVER_LOCKING_DEFAULT.equals( locking ) || MAVEN_RESOLVER_LOCKING_FILE.equals( locking ) ) - { - // The "default" mode (user did not set anything) is same as "file" mode - configProps.put( MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY, "file-lock" ); - configProps.put( MAVEN_RESOLVER_LOCKING_NAME_MAPPER_KEY, "file-gav" ); - } - else if ( MAVEN_RESOLVER_LOCKING_LOCAL.equals( locking ) ) + if ( MAVEN_RESOLVER_LOCKING_DEFAULT.equals( locking ) || MAVEN_RESOLVER_LOCKING_LOCAL.equals( locking ) ) { + // The "default" mode (user did not set anything) is same as "local" mode configProps.put( MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY, "rwlock-local" ); configProps.put( MAVEN_RESOLVER_LOCKING_NAME_MAPPER_KEY, "gav" ); } + else if ( MAVEN_RESOLVER_LOCKING_FILE.equals( locking ) ) + { + configProps.put( MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY, "file-lock" ); + configProps.put( MAVEN_RESOLVER_LOCKING_NAME_MAPPER_KEY, "file-gav" ); + } else if ( MAVEN_RESOLVER_LOCKING_HAZELCAST.equals( locking ) ) { configProps.put( MAVEN_RESOLVER_LOCKING_LOCK_FACTORY_KEY, "semaphore-hazelcast-client" );