This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
The following commit(s) were added to refs/heads/master by this push:
new 8c9ae638 [MRESOLVER-319] Parallel Deploy Support (#240)
8c9ae638 is described below
commit 8c9ae638f56966f27422c8f63e1c9c88bce02609
Author: Tamas Cservenak <[email protected]>
AuthorDate: Tue Feb 7 14:26:11 2023 +0100
[MRESOLVER-319] Parallel Deploy Support (#240)
Make basic connector be able to perform parallel PUTs in very same manner
as it did so far parallel GETs.
Still, there is a "safety switch" to turn off this new feature that is
ENABLED by default.
Effects:
* set threads to 1: GET and PUT are executed sequentially
* set parallelPut to false: Behave as Maven 3.8.x line was
* default: perform parallel GETs and PUTs
---
https://issues.apache.org/jira/browse/MRESOLVER-319
---
.../connector/basic/BasicRepositoryConnector.java | 17 +++++++++++++++--
src/site/markdown/configuration.md | 1 +
2 files changed, 16 insertions(+), 2 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 60f7412d..e7ff2e94 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
@@ -82,6 +82,8 @@ final class BasicRepositoryConnector
private static final String CONFIG_PROP_SMART_CHECKSUMS =
"aether.connector.smartChecksums";
+ private static final String CONFIG_PROP_PARALLEL_PUT =
"aether.connector.basic.parallelPut";
+
private static final Logger LOGGER = LoggerFactory.getLogger(
BasicRepositoryConnector.class );
private final Map<String, ProvidedChecksumsSource>
providedChecksumsSources;
@@ -102,6 +104,8 @@ final class BasicRepositoryConnector
private final boolean smartChecksums;
+ private final boolean parallelPut;
+
private final boolean persistedChecksums;
private Executor executor;
@@ -143,6 +147,8 @@ final class BasicRepositoryConnector
maxThreads = ExecutorUtils.threadCount( session, 5,
CONFIG_PROP_THREADS, "maven.artifact.threads" );
smartChecksums = ConfigUtils.getBoolean( session, true,
CONFIG_PROP_SMART_CHECKSUMS );
+ parallelPut = ConfigUtils.getBoolean( session, true,
+ CONFIG_PROP_PARALLEL_PUT + "." + repository.getId(),
CONFIG_PROP_PARALLEL_PUT );
persistedChecksums =
ConfigUtils.getBoolean( session,
ConfigurationProperties.DEFAULT_PERSISTED_CHECKSUMS,
ConfigurationProperties.PERSISTED_CHECKSUMS );
@@ -284,6 +290,9 @@ final class BasicRepositoryConnector
Collection<? extends ArtifactUpload> safeArtifactUploads = safe(
artifactUploads );
Collection<? extends MetadataUpload> safeMetadataUploads = safe(
metadataUploads );
+ Executor executor = getExecutor( parallelPut ?
safeArtifactUploads.size() + safeMetadataUploads.size() : 1 );
+ RunnableErrorForwarder errorForwarder = new RunnableErrorForwarder();
+
for ( ArtifactUpload transfer : safeArtifactUploads )
{
URI location = layout.getLocation( transfer.getArtifact(), true );
@@ -298,9 +307,11 @@ final class BasicRepositoryConnector
Runnable task = new PutTaskRunner( location, transfer.getFile(),
transfer.getFileTransformer(),
checksumLocations, listener );
- task.run();
+ executor.execute( errorForwarder.wrap( task ) );
}
+ errorForwarder.await(); // make sure all artifacts are PUT before we
go with Metadata
+
for ( MetadataUpload transfer : safeMetadataUploads )
{
URI location = layout.getLocation( transfer.getMetadata(), true );
@@ -314,8 +325,10 @@ final class BasicRepositoryConnector
Runnable task = new PutTaskRunner( location, transfer.getFile(),
checksumLocations, listener );
- task.run();
+ executor.execute( errorForwarder.wrap( task ) );
}
+
+ errorForwarder.await();
}
private static <T> Collection<T> safe( Collection<T> items )
diff --git a/src/site/markdown/configuration.md
b/src/site/markdown/configuration.md
index fe03055a..18e14794 100644
--- a/src/site/markdown/configuration.md
+++ b/src/site/markdown/configuration.md
@@ -31,6 +31,7 @@ Option | Type | Description | Default Value | Supports Repo
ID Suffix
`aether.checksums.algorithms` | String | Comma-separated list of checksum
algorithms with which checksums are validated (downloaded) and generated
(uploaded). Resolver by default supports following algorithms: `MD5`, `SHA-1`,
`SHA-256` and `SHA-512`. New algorithms can be added by implementing
`ChecksumAlgorithmFactory` component. | `"SHA-1,MD5"` | no
`aether.conflictResolver.verbose` | boolean | Flag controlling the conflict
resolver's verbose mode. | `false` | no
`aether.connector.basic.threads` or `maven.artifact.threads` | int | Number of
threads to use for uploading/downloading. | `5` | no
+`aether.connector.basic.parallelPut` | boolean | Enables or disables parallel
PUT processing (parallel deploys) on basic connector globally or per remote
repository. When disabled, connector behaves exactly as in Maven 3.8.x did:
GETs are parallel while PUTs are sequential. | `true` | yes
`aether.connector.classpath.loader` | ClassLoader | `ClassLoader` from which
resources should be retrieved which start with the `classpath:` protocol. |
`Thread.currentThread().getContextClassLoader()` | no
`aether.connector.connectTimeout` | long | Connect timeout in milliseconds. |
`10000` | yes
`aether.connector.http.cacheState` | boolean | Flag indicating whether a
memory-based cache is used for user tokens, connection managers, expect
continue requests and authentication schemes. | `true` | no