[aether-resolver] IJI-781 Add retries support to ArtifactRepositoryManager

(cherry picked from commit 8101f4a14c0745c61d7c604eb7478be887aa2e0c)

IJ-MR-20326

GitOrigin-RevId: 93edea4f0d0c1d6c69fb01a1c73aa28370377db4
This commit is contained in:
Vladislav Yaroshchuk
2021-12-31 04:32:25 +03:00
committed by intellij-monorepo-bot
parent 6034e60ed0
commit 51687593f9

View File

@@ -57,6 +57,7 @@ public final class ArtifactRepositoryManager {
private static final JreProxySelector ourProxySelector = new JreProxySelector();
private static final Logger LOG = LoggerFactory.getLogger(ArtifactRepositoryManager.class);
private final RepositorySystemSessionFactory mySessionFactory;
private final Retry myRetry;
private static final RemoteRepository MAVEN_CENTRAL_REPOSITORY = createRemoteRepository(
"central", "https://repo1.maven.org/maven2/"
@@ -98,8 +99,19 @@ public final class ArtifactRepositoryManager {
}
public ArtifactRepositoryManager(@NotNull File localRepositoryPath, List<RemoteRepository> remoteRepositories, @NotNull ProgressConsumer progressConsumer, boolean offline) {
this(localRepositoryPath, remoteRepositories, progressConsumer, offline, RetryProvider.disabled());
}
public ArtifactRepositoryManager(@NotNull File localRepositoryPath, List<RemoteRepository> remoteRepositories,
@NotNull ProgressConsumer progressConsumer, @NotNull Retry retry) {
this(localRepositoryPath, remoteRepositories, progressConsumer, false, retry);
}
public ArtifactRepositoryManager(@NotNull File localRepositoryPath, List<RemoteRepository> remoteRepositories,
@NotNull ProgressConsumer progressConsumer, boolean offline, @NotNull Retry retry) {
myRemoteRepositories.addAll(remoteRepositories);
mySessionFactory = new RepositorySystemSessionFactory(localRepositoryPath, progressConsumer, offline);
myRetry = retry;
}
private static class RepositorySystemSessionFactory {
@@ -254,7 +266,7 @@ public final class ArtifactRepositoryManager {
Set<VersionConstraint> constraints = Collections.singleton(asVersionConstraint(versionConstraint));
CollectRequest collectRequest = createCollectRequest(groupId, artifactId, constraints, EnumSet.of(ArtifactKind.ARTIFACT));
ArtifactDependencyTreeBuilder builder = new ArtifactDependencyTreeBuilder();
DependencyNode root = ourSystem.collectDependencies(mySessionFactory.createVerboseSession(), collectRequest).getRoot();
DependencyNode root = myRetry.retry(() -> ourSystem.collectDependencies(mySessionFactory.createVerboseSession(), collectRequest), LOG).getRoot();
if (root.getArtifact() == null && root.getChildren().size() == 1) {
root = root.getChildren().get(0);
}
@@ -282,9 +294,9 @@ public final class ArtifactRepositoryManager {
RepositorySystemSession session;
if (includeTransitiveDependencies) {
session = mySessionFactory.createSession(excludedDependencies);
final CollectResult collectResult = ourSystem.collectDependencies(
final CollectResult collectResult = myRetry.retry(() -> ourSystem.collectDependencies(
session, createCollectRequest(groupId, artifactId, constraints, EnumSet.of(kind))
);
), LOG);
final ArtifactRequestBuilder builder = new ArtifactRequestBuilder(kind);
DependencyFilter filter = createScopeFilter();
if (!excludedDependencies.isEmpty()) {
@@ -313,7 +325,8 @@ public final class ArtifactRepositoryManager {
if (!requests.isEmpty()) {
try {
for (ArtifactResult result : ourSystem.resolveArtifacts(session, requests)) {
List<ArtifactResult> resultList = myRetry.retry(() -> ourSystem.resolveArtifacts(session, requests), LOG);
for (ArtifactResult result : resultList) {
artifacts.add(result.getArtifact());
}
}
@@ -323,7 +336,7 @@ public final class ArtifactRepositoryManager {
if (requests.size() > 1) {
for (ArtifactRequest request : requests) {
try {
final ArtifactResult result = ourSystem.resolveArtifact(session, request);
final ArtifactResult result = myRetry.retry(() -> ourSystem.resolveArtifact(session, request), LOG);
artifacts.add(result.getArtifact());
}
catch (ArtifactResolutionException ignored) {