summaryrefslogtreecommitdiffstats
path: root/packages/StatementService
diff options
context:
space:
mode:
authorJoseph Wen <josephwen@google.com>2015-06-15 10:36:03 -0400
committerJoseph Wen <josephwen@google.com>2015-06-15 10:36:03 -0400
commit5fcbb9d0c17e073fb28c7169e80fa7bb8e61c6b1 (patch)
tree5bab917c65a5939e287ca2e92f87dcbf21ec4a10 /packages/StatementService
parent5d8c276bb91788441ec9a98717017eb01f1b348f (diff)
downloadframeworks_base-5fcbb9d0c17e073fb28c7169e80fa7bb8e61c6b1.zip
frameworks_base-5fcbb9d0c17e073fb28c7169e80fa7bb8e61c6b1.tar.gz
frameworks_base-5fcbb9d0c17e073fb28c7169e80fa7bb8e61c6b1.tar.bz2
Retry intent verification 3 times before failing.
BUG=21596311 Change-Id: Ia98925a4310046ef4d8117afe0b278e6a414dac6
Diffstat (limited to 'packages/StatementService')
-rw-r--r--packages/StatementService/src/com/android/statementservice/retriever/DirectStatementRetriever.java9
-rw-r--r--packages/StatementService/src/com/android/statementservice/retriever/URLFetcher.java34
2 files changed, 40 insertions, 3 deletions
diff --git a/packages/StatementService/src/com/android/statementservice/retriever/DirectStatementRetriever.java b/packages/StatementService/src/com/android/statementservice/retriever/DirectStatementRetriever.java
index e4feb90..9839329 100644
--- a/packages/StatementService/src/com/android/statementservice/retriever/DirectStatementRetriever.java
+++ b/packages/StatementService/src/com/android/statementservice/retriever/DirectStatementRetriever.java
@@ -36,6 +36,8 @@ import java.util.List;
private static final long DO_NOT_CACHE_RESULT = 0L;
private static final int HTTP_CONNECTION_TIMEOUT_MILLIS = 5000;
+ private static final int HTTP_CONNECTION_BACKOFF_MILLIS = 3000;
+ private static final int HTTP_CONNECTION_RETRY = 3;
private static final long HTTP_CONTENT_SIZE_LIMIT_IN_BYTES = 1024 * 1024;
private static final int MAX_INCLUDE_LEVEL = 1;
private static final String WELL_KNOWN_STATEMENT_PATH = "/.well-known/assetlinks.json";
@@ -151,9 +153,10 @@ import java.util.List;
&& !url.getProtocol().toLowerCase().equals("https")) {
return Result.create(statements, DO_NOT_CACHE_RESULT);
}
- webContent = mUrlFetcher.getWebContentFromUrl(url,
- HTTP_CONTENT_SIZE_LIMIT_IN_BYTES, HTTP_CONNECTION_TIMEOUT_MILLIS);
- } catch (IOException e) {
+ webContent = mUrlFetcher.getWebContentFromUrlWithRetry(url,
+ HTTP_CONTENT_SIZE_LIMIT_IN_BYTES, HTTP_CONNECTION_TIMEOUT_MILLIS,
+ HTTP_CONNECTION_BACKOFF_MILLIS, HTTP_CONNECTION_RETRY);
+ } catch (IOException | InterruptedException e) {
return Result.create(statements, DO_NOT_CACHE_RESULT);
}
diff --git a/packages/StatementService/src/com/android/statementservice/retriever/URLFetcher.java b/packages/StatementService/src/com/android/statementservice/retriever/URLFetcher.java
index 225e26c..23cd832 100644
--- a/packages/StatementService/src/com/android/statementservice/retriever/URLFetcher.java
+++ b/packages/StatementService/src/com/android/statementservice/retriever/URLFetcher.java
@@ -49,6 +49,40 @@ public class URLFetcher {
/**
* Fetches the specified url and returns the content and ttl.
*
+ * <p>
+ * Retry {@code retry} times if the connection failed or timed out for any reason.
+ * HTTP error code (e.g. 404/500) won't be retried.
+ *
+ * @throws IOException if it can't retrieve the content due to a network problem.
+ * @throws AssociationServiceException if the URL scheme is not http or https or the content
+ * length exceeds {code fileSizeLimit}.
+ */
+ public WebContent getWebContentFromUrlWithRetry(URL url, long fileSizeLimit,
+ int connectionTimeoutMillis, int backoffMillis, int retry)
+ throws AssociationServiceException, IOException, InterruptedException {
+ if (retry <= 0) {
+ throw new IllegalArgumentException("retry should be a postive inetger.");
+ }
+ while (retry > 0) {
+ try {
+ return getWebContentFromUrl(url, fileSizeLimit, connectionTimeoutMillis);
+ } catch (IOException e) {
+ retry--;
+ if (retry == 0) {
+ throw e;
+ }
+ }
+
+ Thread.sleep(backoffMillis);
+ }
+
+ // Should never reach here.
+ return null;
+ }
+
+ /**
+ * Fetches the specified url and returns the content and ttl.
+ *
* @throws IOException if it can't retrieve the content due to a network problem.
* @throws AssociationServiceException if the URL scheme is not http or https or the content
* length exceeds {code fileSizeLimit}.