clarify mirror timeout logic with constants
This should make the timeout logic clearer, without changing the logic at all. This does increase the timeouts, with the second pass using 1 minute instead of 30 seconds, and the third pass using 10 minutes instead of 1 minute. Since this often or usually runs in the background, it should allow some pretty long timeouts in the worst case.
This commit is contained in:
parent
eb12bc1645
commit
71884c16b1
@ -71,6 +71,7 @@ import org.fdroid.fdroid.installer.ApkFileProvider;
|
||||
import org.fdroid.fdroid.installer.InstallHistoryService;
|
||||
import org.fdroid.fdroid.localrepo.SDCardScannerService;
|
||||
import org.fdroid.fdroid.net.ConnectivityMonitorService;
|
||||
import org.fdroid.fdroid.net.Downloader;
|
||||
import org.fdroid.fdroid.net.HttpDownloader;
|
||||
import org.fdroid.fdroid.net.ImageLoaderForUIL;
|
||||
import org.fdroid.fdroid.net.WifiStateChangeService;
|
||||
@ -126,7 +127,7 @@ public class FDroidApp extends Application {
|
||||
|
||||
private static volatile LongSparseArray<String> lastWorkingMirrorArray = new LongSparseArray<>(1);
|
||||
private static volatile int numTries = Integer.MAX_VALUE;
|
||||
private static volatile int timeout = 10000;
|
||||
private static volatile int timeout = Downloader.DEFAULT_TIMEOUT;
|
||||
|
||||
// Leaving the fully qualified class name here to help clarify the difference between spongy/bouncy castle.
|
||||
private static final org.bouncycastle.jce.provider.BouncyCastleProvider BOUNCYCASTLE_PROVIDER;
|
||||
@ -244,10 +245,26 @@ public class FDroidApp extends Application {
|
||||
repo = new Repo();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #getMirror(String, Repo)
|
||||
*/
|
||||
public static String getMirror(String urlString, long repoId) throws IOException {
|
||||
return getMirror(urlString, RepoProvider.Helper.findById(getInstance(), repoId));
|
||||
}
|
||||
|
||||
/**
|
||||
* Each time this is called, it will return a mirror from the pool of
|
||||
* mirrors. If it reaches the end of the list of mirrors, it will start
|
||||
* again from the stop, while setting the timeout to
|
||||
* {@link Downloader#SECOND_TIMEOUT}. If it reaches the end of the list
|
||||
* again, it will do one last pass through the list with the timeout set to
|
||||
* {@link Downloader#LONGEST_TIMEOUT}. After that, this gives up with a
|
||||
* {@link IOException}.
|
||||
*
|
||||
* @see #resetMirrorVars()
|
||||
* @see #getTimeout()
|
||||
* @see Repo#getMirror(String)
|
||||
*/
|
||||
public static String getMirror(String urlString, Repo repo2) throws IOException {
|
||||
if (repo2.hasMirrors()) {
|
||||
String lastWorkingMirror = lastWorkingMirrorArray.get(repo2.getId());
|
||||
@ -255,11 +272,11 @@ public class FDroidApp extends Application {
|
||||
lastWorkingMirror = repo2.address;
|
||||
}
|
||||
if (numTries <= 0) {
|
||||
if (timeout == 10000) {
|
||||
timeout = 30000;
|
||||
if (timeout == Downloader.DEFAULT_TIMEOUT) {
|
||||
timeout = Downloader.SECOND_TIMEOUT;
|
||||
numTries = Integer.MAX_VALUE;
|
||||
} else if (timeout == 30000) {
|
||||
timeout = 60000;
|
||||
} else if (timeout == Downloader.SECOND_TIMEOUT) {
|
||||
timeout = Downloader.LONGEST_TIMEOUT;
|
||||
numTries = Integer.MAX_VALUE;
|
||||
} else {
|
||||
Utils.debugLog(TAG, "Mirrors: Giving up");
|
||||
@ -291,7 +308,7 @@ public class FDroidApp extends Application {
|
||||
lastWorkingMirrorArray.removeAt(i);
|
||||
}
|
||||
numTries = Integer.MAX_VALUE;
|
||||
timeout = 10000;
|
||||
timeout = Downloader.DEFAULT_TIMEOUT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -389,6 +389,10 @@ public class Repo extends ValueObject {
|
||||
* URL in the mirrors list so the mirror logic works on the first index
|
||||
* update. That makes it possible to do the first index update via SD Card
|
||||
* or USB OTG drive.
|
||||
*
|
||||
* @see FDroidApp#resetMirrorVars()
|
||||
* @see FDroidApp#getMirror(String, Repo)
|
||||
* @see FDroidApp#getTimeout()
|
||||
*/
|
||||
public String getMirror(String lastWorkingMirror) {
|
||||
if (TextUtils.isEmpty(lastWorkingMirror)) {
|
||||
|
@ -2,7 +2,7 @@ package org.fdroid.fdroid.net;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import android.text.format.DateUtils;
|
||||
import org.fdroid.fdroid.ProgressListener;
|
||||
import org.fdroid.fdroid.Utils;
|
||||
|
||||
@ -33,6 +33,10 @@ public abstract class Downloader {
|
||||
public static final String EXTRA_CANONICAL_URL = "org.fdroid.fdroid.net.Downloader.extra.ERROR_CANONICAL_URL";
|
||||
public static final String EXTRA_MIRROR_URL = "org.fdroid.fdroid.net.Downloader.extra.ERROR_MIRROR_URL";
|
||||
|
||||
public static final int DEFAULT_TIMEOUT = 10000;
|
||||
public static final int SECOND_TIMEOUT = (int) DateUtils.MINUTE_IN_MILLIS;
|
||||
public static final int LONGEST_TIMEOUT = 600000; // 10 minutes
|
||||
|
||||
private volatile boolean cancelled = false;
|
||||
private volatile long bytesRead;
|
||||
private volatile long totalBytes;
|
||||
@ -43,7 +47,7 @@ public abstract class Downloader {
|
||||
String cacheTag;
|
||||
boolean notFound;
|
||||
|
||||
private volatile int timeout = 10000;
|
||||
private volatile int timeout = DEFAULT_TIMEOUT;
|
||||
|
||||
/**
|
||||
* For sending download progress, should only be called in {@link #progressTask}
|
||||
|
Loading…
x
Reference in New Issue
Block a user