From 672854ea8dfbc19cf9457229da6b937c2a066c23 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Tue, 18 Nov 2025 20:07:09 +0100 Subject: [PATCH 1/2] Remove hack from Basic connector Similar as in 1.9.x, but here the Executor may be null (threading and pooling has been reworked) so we need to check for executor being non-null. --- .../basic/BasicRepositoryConnector.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java index fd2d51e93..7f76efa7a 100644 --- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java +++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java @@ -217,8 +217,6 @@ public void get( RunnableErrorForwarder errorForwarder = new RunnableErrorForwarder(); List checksumAlgorithmFactories = layout.getChecksumAlgorithmFactories(); - boolean first = true; - for (MetadataDownload transfer : safeMetadataDownloads) { URI location = layout.getLocation(transfer.getMetadata(), false); @@ -240,9 +238,8 @@ public void get( checksumLocations, null, listener); - if (executor == null || first) { + if (executor == null) { task.run(); - first = false; } else { executor.submit(errorForwarder.wrap(task)); } @@ -285,9 +282,8 @@ public void get( providedChecksums, listener); } - if (executor == null || first) { + if (executor == null) { task.run(); - first = false; } else { executor.submit(errorForwarder.wrap(task)); } @@ -309,8 +305,6 @@ public void put( getExecutor(false, parallelPut ? safeArtifactUploads.size() + safeMetadataUploads.size() : 1); RunnableErrorForwarder errorForwarder = new RunnableErrorForwarder(); - boolean first = true; - for (ArtifactUpload transfer : safeArtifactUploads) { URI location = layout.getLocation(transfer.getArtifact(), true); @@ -322,9 +316,8 @@ public void put( layout.getChecksumLocations(transfer.getArtifact(), true, location); Runnable task = new PutTaskRunner(location, transfer.getPath(), checksumLocations, listener); - if (executor == null || first) { + if (executor == null) { task.run(); - first = false; } else { executor.submit(errorForwarder.wrap(task)); } @@ -344,9 +337,8 @@ public void put( layout.getChecksumLocations(transfer.getMetadata(), true, location); Runnable task = new PutTaskRunner(location, transfer.getPath(), checksumLocations, listener); - if (executor == null || first) { + if (executor == null) { task.run(); - first = false; } else { executor.submit(errorForwarder.wrap(task)); } From ece8e1a7525a46ddda950ebeaa0586b68ad0cd66 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 19 Nov 2025 11:42:29 +0100 Subject: [PATCH 2/2] Use concurrent map --- .../apache/DeferredCredentialsProvider.java | 6 +++--- .../aether/transport/apache/SharingAuthCache.java | 15 +++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/DeferredCredentialsProvider.java b/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/DeferredCredentialsProvider.java index bb0b20188..fd32f1dd7 100644 --- a/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/DeferredCredentialsProvider.java +++ b/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/DeferredCredentialsProvider.java @@ -20,9 +20,9 @@ import java.net.InetAddress; import java.net.UnknownHostException; -import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.http.auth.AuthScope; import org.apache.http.auth.Credentials; @@ -39,11 +39,11 @@ final class DeferredCredentialsProvider implements CredentialsProvider { private final CredentialsProvider delegate; - private final Map factories; + private final ConcurrentHashMap factories; DeferredCredentialsProvider() { delegate = new BasicCredentialsProvider(); - factories = new HashMap<>(); + factories = new ConcurrentHashMap<>(); } public void setCredentials(AuthScope authScope, Factory factory) { diff --git a/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/SharingAuthCache.java b/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/SharingAuthCache.java index ef4c25163..d868eacaf 100644 --- a/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/SharingAuthCache.java +++ b/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/SharingAuthCache.java @@ -18,8 +18,8 @@ */ package org.eclipse.aether.transport.apache; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScheme; @@ -33,11 +33,11 @@ final class SharingAuthCache implements AuthCache { private final LocalState state; - private final Map authSchemes; + private final ConcurrentHashMap authSchemes; SharingAuthCache(LocalState state) { this.state = state; - authSchemes = new HashMap<>(); + authSchemes = new ConcurrentHashMap<>(); } private static HttpHost toKey(HttpHost host) { @@ -54,17 +54,20 @@ public AuthScheme get(HttpHost host) { AuthScheme authScheme = authSchemes.get(host); if (authScheme == null) { authScheme = state.getAuthScheme(host); - authSchemes.put(host, authScheme); + if (authScheme != null) { + authSchemes.put(host, authScheme); + } } return authScheme; } @Override public void put(HttpHost host, AuthScheme authScheme) { + host = toKey(host); if (authScheme != null) { - authSchemes.put(toKey(host), authScheme); + authSchemes.put(host, authScheme); } else { - remove(host); + authSchemes.remove(host); } }