diff --git a/src/main/java/me/itzg/helpers/fabric/FabricLauncherInstaller.java b/src/main/java/me/itzg/helpers/fabric/FabricLauncherInstaller.java index 01d02183..dbcf0de7 100644 --- a/src/main/java/me/itzg/helpers/fabric/FabricLauncherInstaller.java +++ b/src/main/java/me/itzg/helpers/fabric/FabricLauncherInstaller.java @@ -65,6 +65,7 @@ public void installUsingVersions( resolvedLoaderVersion, resolvedInstallerVersion )) + .checkpoint("downloadResolvedLauncher") ) ) .block(); diff --git a/src/main/java/me/itzg/helpers/fabric/FabricMetaClient.java b/src/main/java/me/itzg/helpers/fabric/FabricMetaClient.java index bb5628c2..8916fc9b 100644 --- a/src/main/java/me/itzg/helpers/fabric/FabricMetaClient.java +++ b/src/main/java/me/itzg/helpers/fabric/FabricMetaClient.java @@ -1,8 +1,11 @@ package me.itzg.helpers.fabric; +import java.io.IOException; import java.nio.file.Path; +import java.time.Duration; import java.util.List; import java.util.function.Predicate; +import lombok.Setter; import me.itzg.helpers.errors.GenericException; import me.itzg.helpers.http.FileDownloadStatusHandler; import me.itzg.helpers.http.SharedFetch; @@ -10,11 +13,16 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import reactor.core.publisher.Mono; +import reactor.util.retry.Retry; public class FabricMetaClient { private final SharedFetch sharedFetch; private final UriBuilder uriBuilder; + @Setter + private int downloadRetryMaxAttempts = 5; + @Setter + private Duration downloadRetryMinBackoff = Duration.ofMillis(500); public FabricMetaClient(SharedFetch sharedFetch, String fabricMetaBaseUrl) { this.sharedFetch = sharedFetch; @@ -106,7 +114,9 @@ public Mono downloadLauncher( ) .toDirectory(outputDir) .handleStatus(statusHandler) - .assemble(); + .assemble() + .retryWhen(Retry.backoff(downloadRetryMaxAttempts, downloadRetryMinBackoff).filter(IOException.class::isInstance)) + .checkpoint("downloadLauncher"); } @NotNull