clarify get mirrors method: Repo.getRandomMirror()

This commit is contained in:
Hans-Christoph Steiner 2019-02-19 12:18:34 +01:00
parent cf9a6b851d
commit 89422e9c8f
2 changed files with 12 additions and 8 deletions

View File

@ -263,7 +263,7 @@ public class FDroidApp extends Application {
* *
* @see #resetMirrorVars() * @see #resetMirrorVars()
* @see #getTimeout() * @see #getTimeout()
* @see Repo#getMirror(String) * @see Repo#getRandomMirror(String)
*/ */
public static String getMirror(String urlString, Repo repo2) throws IOException { public static String getMirror(String urlString, Repo repo2) throws IOException {
if (repo2.hasMirrors()) { if (repo2.hasMirrors()) {
@ -286,7 +286,7 @@ public class FDroidApp extends Application {
if (numTries == Integer.MAX_VALUE) { if (numTries == Integer.MAX_VALUE) {
numTries = repo2.getMirrorCount(); numTries = repo2.getMirrorCount();
} }
String mirror = repo2.getMirror(lastWorkingMirror); String mirror = repo2.getRandomMirror(lastWorkingMirror);
String newUrl = urlString.replace(lastWorkingMirror, mirror); String newUrl = urlString.replace(lastWorkingMirror, mirror);
Utils.debugLog(TAG, "Trying mirror " + mirror + " after " + lastWorkingMirror + " failed," + Utils.debugLog(TAG, "Trying mirror " + mirror + " after " + lastWorkingMirror + " failed," +
" timeout=" + timeout / 1000 + "s"); " timeout=" + timeout / 1000 + "s");

View File

@ -380,12 +380,16 @@ public class Repo extends ValueObject {
} }
/** /**
* Get a random mirror URL from the list of mirrors for this repo. It will
* remove the URL in {@code mirrorToSkip} from consideration before choosing
* which mirror to return.
* <p>
* The mirror logic assumes that it has a mirrors list with at least once * The mirror logic assumes that it has a mirrors list with at least once
* valid entry in it. In the index format as defined by {@code fdroid update}, * valid entry in it. In the index format as defined by {@code fdroid update},
* there is always at least one valid URL: the canonical URL. That also means * there is always at least one valid URL: the canonical URL. That also means
* if there is only one item in the mirrors list, there are no other URLs to try. * if there is only one item in the mirrors list, there are no other URLs to try.
* <p> * <p>
* The initial state of the repos in the database also include the canonical * The initial state of the repos in the database also includes the canonical
* URL in the mirrors list so the mirror logic works on the first index * 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 * update. That makes it possible to do the first index update via SD Card
* or USB OTG drive. * or USB OTG drive.
@ -394,16 +398,16 @@ public class Repo extends ValueObject {
* @see FDroidApp#getMirror(String, Repo) * @see FDroidApp#getMirror(String, Repo)
* @see FDroidApp#getTimeout() * @see FDroidApp#getTimeout()
*/ */
public String getMirror(String lastWorkingMirror) { public String getRandomMirror(String mirrorToSkip) {
if (TextUtils.isEmpty(lastWorkingMirror)) { if (TextUtils.isEmpty(mirrorToSkip)) {
lastWorkingMirror = address; mirrorToSkip = address;
} }
List<String> shuffledMirrors = getMirrorList(); List<String> shuffledMirrors = getMirrorList();
Collections.shuffle(shuffledMirrors);
if (shuffledMirrors.size() > 1) { if (shuffledMirrors.size() > 1) {
Collections.shuffle(shuffledMirrors);
for (String m : shuffledMirrors) { for (String m : shuffledMirrors) {
// Return a non default, and not last used mirror // Return a non default, and not last used mirror
if (!m.equals(lastWorkingMirror)) { if (!m.equals(mirrorToSkip)) {
if (FDroidApp.isUsingTor()) { if (FDroidApp.isUsingTor()) {
return m; return m;
} else { } else {