aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/android/volley/Request.java
diff options
context:
space:
mode:
authorJeff Davidson <jpd@google.com>2015-10-15 15:26:10 -0700
committerJeff Davidson <jpd@google.com>2016-03-10 13:49:44 -0800
commitdd439dcb42093fde4452e320f3a9c4bfa2066def (patch)
tree2c11e4241d60b61edddbc842f82cf6aeeed73b3e /src/main/java/com/android/volley/Request.java
parentf605da3d9e6590351cb0bb26bb6ba5146952777c (diff)
downloadvolley-dd439dcb42093fde4452e320f3a9c4bfa2066def.tar.gz
Retry more errors in Volley's BasicNetwork.
Always retry I/O errors while reading the HTTP response entity. Furthermore, if a client opts in, retry HTTP 500 errors indicating something went wrong on the server. This resolves a longstanding TODO to only throw a ServerError on 5xx errors by adding a ClientError for 4xx errors. For backwards compatibility, this extends ServerError. Note that Volley already may retry a request that reached the server if the connection times out, which means that lack of idempotency shouldn't be a concern here if it wasn't already. But if we wanted to be even safer, we could require clients to opt into the additional retry cases, at the cost of a somewhat more polluted API. Add unit tests for most failure scenarios. Bug: 23152983 Change-Id: I92cf35c66ccf98a1682adf41654afeb8634911db
Diffstat (limited to 'src/main/java/com/android/volley/Request.java')
-rw-r--r--src/main/java/com/android/volley/Request.java21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/main/java/com/android/volley/Request.java b/src/main/java/com/android/volley/Request.java
index 5b42d1f..8200f6e 100644
--- a/src/main/java/com/android/volley/Request.java
+++ b/src/main/java/com/android/volley/Request.java
@@ -20,7 +20,6 @@ import android.net.TrafficStats;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
-import android.os.SystemClock;
import android.text.TextUtils;
import com.android.volley.VolleyLog.MarkerLog;
@@ -90,6 +89,9 @@ public abstract class Request<T> implements Comparable<Request<T>> {
/** Whether or not a response has been delivered for this request yet. */
private boolean mResponseDelivered = false;
+ /** Whether the request should be retried in the event of an HTTP 5xx (server) error. */
+ private boolean mShouldRetryServerErrors = false;
+
/** The retry policy for this request. */
private RetryPolicy mRetryPolicy;
@@ -474,6 +476,23 @@ public abstract class Request<T> implements Comparable<Request<T>> {
}
/**
+ * Sets whether or not the request should be retried in the event of an HTTP 5xx (server) error.
+ *
+ * @return This Request object to allow for chaining.
+ */
+ public final Request<?> setShouldRetryServerErrors(boolean shouldRetryServerErrors) {
+ mShouldRetryServerErrors = shouldRetryServerErrors;
+ return this;
+ }
+
+ /**
+ * Returns true if this request should be retried in the event of an HTTP 5xx (server) error.
+ */
+ public final boolean shouldRetryServerErrors() {
+ return mShouldRetryServerErrors;
+ }
+
+ /**
* Priority values. Requests will be processed from higher priorities to
* lower priorities, in FIFO order.
*/