diff options
author | Jeff Davidson <jpd@google.com> | 2015-10-15 15:26:10 -0700 |
---|---|---|
committer | Jeff Davidson <jpd@google.com> | 2016-03-10 13:49:44 -0800 |
commit | dd439dcb42093fde4452e320f3a9c4bfa2066def (patch) | |
tree | 2c11e4241d60b61edddbc842f82cf6aeeed73b3e /src/main/java/com/android/volley/Request.java | |
parent | f605da3d9e6590351cb0bb26bb6ba5146952777c (diff) | |
download | volley-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.java | 21 |
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. */ |